合同担保收入 (CSR)

Canto 通过 x/CSR 模块实施称为合同安全收入或 CSR 的费用分割模型。 CSR 允许您在与您的智能合约交互时要求用户支付的所有交易费用的一定百分比。

在成功的治理提案之后,CSR 在 Canto v5.0.0 链升级中被添加,初始费用分成 20%。

概述

要赚取 CSR 费用,您必须使用部署在 0xEcf044C5B4b867CFda001101c617eCd347095B44 的 Canto 主网上的 CSR Turnstile 智能合约注册您的合约。 可以在此处找到 Turnstile 的源代码。

注册合同后,代表有权要求合同收入的可转让 NFT 被铸造到您选择的地址。 或者,您可以将合同的收入分配给现有的 CSR NFT。

所有已注册合同的 CSR 费用均计入 Turnstile 合同中。 要从 Turnstile 合约中提取费用,您必须指定您持有的 CSR NFT 的代币 ID。

注册合约

要为 CSR 注册智能合约,请从您要注册的合约中调用 Turnstile 合约上的 register 方法。

该方法采用一个参数:CSR NFT 应铸造到的地址。 这可以是一个不存在的地址(即以前从未交易过的地址)。

您可以在构造函数或其他地方注册合同; 但是,CSR 费用只会在合同注册后开始累积。

interface Turnstile {
    function register(address) external returns(uint256);
}
    
contract Example {
    Turnstile turnstile = Turnstile(0xabc...);
    
    constructor() {
        //Registers the smart contract with Turnstile
        //Mints the CSR NFT to the contract creator
        turnstile.register(tx.origin);
    }
}

register 方法返回生成的 CSR NFT 的代币 ID。

任务

您可以为 CSR 注册智能合约,同时通过调用 Turnstile 合上的分配方法将其费用分配给现有的 CSR NFT。 此方法还采用一个参数:应分配费用的 CSR NFT 的 uint256 代币 ID。

同样的约束适用:

  • 您必须从您希望注册的合约中调用此方法。

  • CSR 费用只会在合同注册后开始累积。

interface Turnstile {
    function assign(uint256) external returns(uint256);
}

contract Example {
    Turnstile turnstile = Turnstile(0xabc...);

    constructor() {
        //Registers the smart contract with Turnstile
        //Assigns this contract's fee revenue to CSR NFT #1
        turnstile.assign(1);
    }
}

assign 方法返回传递给它的 CSR NFT 的代币 ID。

取款费用

您可以通过读取 NFT 代币 ID 的余额映射中存储的值来检查 CSR NFT 产生的费用金额。

要提取 CSR 费用,请从持有 CSR NFT 的地址调用 Turnstile 合约上的 withdraw 方法。 此方法采用三个参数:CSR NFT 的代币 ID、应接收费用的地址以及要提取的费用金额。

工厂合同

您可以在工厂合约中实现 register 和 assign 方法,这样子合约在创建时会自动注册 CSR。

最后更新于