墨客交易格式
优质
小牛编辑
127浏览
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, 测试网: 101data.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;
}
});