0

在代码中的什么位置以及向我的 ERC20 智能合约添加法律措辞的正确方法是什么?

我已经看到了一些示例,它被保存在一个变量上,然后在函数体中使用memory.

IE

contract MyToken is ERC20, Ownable {   
    string public processNumber = "0041518-41.1982.8.26.0053";
    string public legalBinding = "a lot, a lot of verbiage would go here";
    

    constructor() ERC20("MyToken", "MTK") {
        _mint(msg.sender, 9000000 * 10 ** decimals());
    }

    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }
    
  function setProcessNumber (string memory v) public onlyOwner() {
    processNumber = v;
  }

  function setLegalBinding (string memory v) public onlyOwner() {
    legalBinding = v;
  }

}

无论如何,最后两个函数是做什么的,它是被执行还是只是保存在内存中?

这是正确的做法吗?

有更好的方法吗?

开发人员通常在代码中的什么位置添加这种类型的信息?

如果我要保存包含所有法律用语的大量文本。在一个变量上,我可以使用反引号将它们保存在模板文字上,以利用字符串内的多个换行符等等?

4

1 回答 1

1

我想逐点回答您的问题:

  1. 无论如何,最后两个函数是做什么的,它是被执行还是只是保存在内存中?
    这些函数基本上覆盖了这些变量的值,在您的情况下,默认情况下这些变量在合同一开始就被初始化。由于我们在这些函数上设置了 onlyOwner() 修饰符,因此只有所有者可以通过显式调用这些方法并提供必要的 Gas 成本来更改这些变量。

  2. 这是正确的做法吗?有点,是的

  3. 有更好的方法吗? 方法可以修改查看限制

  4. 开发人员通常在代码中的什么位置添加这种类型的信息? 如果您希望该值是一个常量,即在整个合同过程中不应该更改,请添加常量修饰符。另外,您可以添加使变量不可变,这意味着可以避免初始常量值字符串,并且变量只能在第一次运行时使用常量值初始化,然后无法更改值。

  5. 如果我要保存包含所有法律用语的大量文本。在变量上,我可以使用反引号将它们保存在模板文字上以利用字符串内的多个换行符等等吗? 是的你可以。请参考这里:https ://docs.soliditylang.org/en/v0.8.0/internals/layout_in_storage.html?highlight=string

希望对您有所帮助!

于 2021-04-30T18:35:59.737 回答