| name | mvx-sdk-go-builders |
| description | Transaction construction and signing using Builders in Go SDK. |
MultiversX SDK-Go Builders
Using TxBuilder to construct and sign transactions.
Transaction Builder
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",
RcvAddr: receiverAddressString,
SndAddr: senderAddressString,
GasPrice: 1000000000,
GasLimit: 50000,
Data: []byte("memo"),
ChainID: "D",
Version: 1,
}
err = txBuilder.ApplySignature(tx, privateKey)
Contract Builders (High Level)
There are specific builders for SC interactions (often generated code or custom implementations), but the core pattern is:
- Create
data.Transaction struct
- Populate fields (Date = endpoint@arg1@arg2)
- Sign with
TxBuilder
Token Transfers
ESDT transfers require specific data fields.
tx.Value = "1000000000000000000"
tx.Data = []byte("")
tx.Value = "0"
tx.Data = []byte("ESDTTransfer@" + hexTokenId + "@" + hexAmount)
Relayed V3 Transactions
Constructing the inner transaction for a relayed call.
innerTx := &data.Transaction{...}
signature, _ := userPrivateKey.Sign(innerTxBytes)
relayerTx := &data.Transaction{
Sender: relayerAddress,
Data: []byte("relayedTx@" + innerTxBytesHex + "@" + signatureHex),
...
}
Data Serialization
The SDK uses a Marshalizer interface (usually JSON).
import "github.com/multiversx/mx-sdk-go/core"
bytes, err := core.Marshalizer.Marshal(tx)
Best Practices
- Validate fields before building
- Use correct ChainID ('1', 'D', 'T')
- Handle Big Ints as strings in
Value field
- Gas Limit estimation is manual or via proxy simulation