跳转至

代码元数据

原文:https://docs.elrond.com/developers/developer-reference/code-metadata

代码元数据是表示智能合约在部署后允许的操作的标志,特别是:

  • upgradeable -如果合约将来可以升级
  • readable -如果该合约的存储可以被其他合约读取
  • payable -如果合约可以在不调用任何端点的情况下接收资金(就像用户帐户一样)。注:合约不一定要支付才能在支付端点接收资金。
  • payable by smart contracts -就像payable标志一样,但是只能从其他智能合约接收资金。用户转账将被拒绝。
重要

代码元数据必须在部署时指定,如果合约是可升级的,那么它也必须在升级时指定

重要

一旦一个合约被标记为 可升级,它的代码和代码元数据就变成不可变,永远**。

可用性

使用 erdpy 部署(或升级)智能合约时,其默认代码元数据标志为:upgradeablereadablepayable。默认值可以通过如下修改命令erdpy contract deploy(或erdpy contract upgrade)来覆盖:

  • --metadata-not-upgradeable -将合约标记为 upgradeable
  • --metadata-not-readable -将合约标记为 readable
  • --metadata-payable -将合约标记为payable
  • --metadata-payable-by-sc -将合约标记为payable by smart contracts

有关更多信息,请访问 erdpy CLI

将元数据转换为字节

在内部,元数据存储为 2 字节宽的位标志。为了更容易理解,让我们这样定义标志:

bitflags! {
    struct CodeMetadata: u16 {
        const UPGRADEABLE = 0b0000_0001_0000_0000; // LSB of first byte
        const READABLE = 0b0000_0100_0000_0000; // 3rd LSB of first byte
        const PAYABLE = 0b0000_0000_0000_0010; // 2nd LSB of second byte
        const PAYABLE_BY_SC = 0b0000_0000_0000_0100; // 3rd LSB of second byte
    }
} 

或者,如果您喜欢十六进制而不是二进制:

const UPGRADEABLE: u16 = 0x01_00;
const READABLE: u16 = 0x04_00;
const PAYABLE: u16 = 0x00_02;
const PAYABLE_BY_SC = 0x00_04; 

例如,如果我们希望部署一个可支付和可升级的合约,我们的元数据将是0x0102

结论

我们希望这些标志将使创建和升级智能合约变得更加容易。

如果你想看更多关于如何使用代码元数据的例子,请看这里:https://github . com/elrond network/elrond-wasm-RS/tree/master/contracts/examples



回到顶部