当前位置: 首页 > 文档资料 > MOAC 中文 WIKI >

墨客交易格式

优质
小牛编辑
117浏览
2023-12-01

在VNODE的后台中,墨客的交易格式定义如下:

type txdata struct {
    AccountNonce   `json:"nonce"    gencodec:"required"`
    SystemContract `json:"syscnt" gencodec:"required"`
    Price          `json:"gasPrice" gencodec:"required"`
    GasLimit       `json:"gas"      gencodec:"required"`
    Recipient      `json:"to"       rlp:"nil"` // nil means contract creation
    Amount         `json:"value"    gencodec:"required"`
    Payload        `json:"input"    gencodec:"required"`
    ShardingFlag   `json:"shardingFlag" gencodec:"required"`
    Via            `json:"via"       rlp:"nil"`

    // Signature values
    V `json:"v" gencodec:"required"`
    R `json:"r" gencodec:"required"`
    S `json:"s" gencodec:"required"`
}

对交易进行签名后发送是一种安全的交易方式,目前在MOAC的几个相应的Library里面都有实现,如 NodeJs, Java, Python. 。 以nodeJs的chain3 library为例,签名过程在chain3/lib/utils/account.js中的signTransaction函数实现:

输入参数

  • data Buffer or Array or Object 交易对象,包括以下内容

    • data.chainId Number 发送交易的网络ID,EIP 155 chainId - 主网: 99, 测试网: 101
    • data.gasLimit Buffer 交易的gas限制
    • data.gasPrice Buffer 交易的gas价格
    • data.to Buffer 交易的发送地址,创建合约时可以为Null,发送子链合约时需要为子链地址
    • data.nonce Buffer 发送交易的起源帐号在母链里的交易数,如果是子链交易,需要为在相应子链里的交易数
    • data.shardingFlag Buffer 标记交易为母链或子链, 0 - 默认值,母链交易; 1 - 子链交易;省略时默认为母链交易
    • data.via Buffer VNODE proxy的帐号地址,用于发送子链交易,发送母链交易时可以为空或者省略
    • data.data Buffer 发送母链或者子链合约的数据,在发送母链的Moac交易时也可以为普通注解
    • data.value Buffer 发送的墨客数量,可以为0
  • key Buffer 帐号签名的私钥

输出结果

  • raw Buffer 输出的签名后的交易,为'0x'开头的16进制的字符串

示例

    var rawTx = {
      nonce: '0x00',
      gasPrice: '0x09184e72a000',
      gasLimit: '0x2710',
      to: '0x0000000000000000000000000000000000000000',
      value: '0x00',
      data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057',
      chainId: 101,
      shardingFlag: 0
    };

    var signTx = chain3.signTransaction(rawTx, src["key"]);

    chain3.mc.sendRawTransaction(signTx, function(err, hash) {
        if (!err){
            console.log("Succeed!: ", hash);
            return hash;
        }else{
            console.log("Chain3 error:", err.message);
            return err.message;
        }
    });