name: mvx_sdk_go_builders description: 使用Go SDK中的构建器进行交易构建和签名。
MultiversX SDK-Go 构建器
使用 TxBuilder 来构建和签名交易。
交易构建器
import (
"github.com/multiversx/mx-sdk-go/builders"
"github.com/multiversx/mx-sdk-go/core"
"github.com/multiversx/mx-sdk-go/data"
)
// 初始化
txBuilder, err := builders.NewTxBuilder(core.Marshalizer)
// 手动交易构建
tx := &data.Transaction{
Nonce: nonce,
Value: "1000000000000000000", // 1 EGLD
RcvAddr: receiverAddressString,
SndAddr: senderAddressString,
GasPrice: 1000000000,
GasLimit: 50000,
Data: []byte("备忘录"),
ChainID: "D",
Version: 1,
}
// 签名交易
err = txBuilder.ApplySignature(tx, privateKey)
// tx.Signature, tx.SenderUsername 被更新
合约构建器(高级)
有特定的构建器用于智能合约交互(通常是生成的代码或自定义实现),但核心模式是:
- 创建
data.Transaction结构体 - 填充字段(Data = 端点@参数1@参数2)
- 使用
TxBuilder签名
令牌传输
ESDT传输需要特定的数据字段。
// 原生EGLD
tx.Value = "1000000000000000000"
tx.Data = []byte("")
// ESDT传输
// 函数:ESDTTransfer
// 参数:令牌标识符(十六进制),金额(十六进制)
tx.Value = "0"
tx.Data = []byte("ESDTTransfer@" + hexTokenId + "@" + hexAmount)
中继V3交易
构建中继调用的内部交易。
// 内部交易(用户)
innerTx := &data.Transaction{...}
// 签名内部交易
signature, _ := userPrivateKey.Sign(innerTxBytes)
// 中继者交易
relayerTx := &data.Transaction{
Sender: relayerAddress,
Data: []byte("relayedTx@" + innerTxBytesHex + "@" + signatureHex),
...
}
数据序列化
SDK使用 Marshalizer 接口(通常是JSON)。
import "github.com/multiversx/mx-sdk-go/core"
bytes, err := core.Marshalizer.Marshal(tx)
最佳实践
- 构建前验证字段
- 使用正确的ChainID(‘1’, ‘D’, ‘T’)
- 在
Value字段中将大整数处理为字符串 - Gas限制估计是手动的或通过代理模拟