func main() {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
endpoint, err := tron.NewEndpoint()
if err != nil {
panic(err)
}
var data []byte
methodId, _ := hexutil.Decode(methodRentResource)
receive := internal.DecodeCheck("TDXhWtfwXqH6DadcrB5uucJ6HXtQQQQQQQ")
paddedReceive := common.LeftPadBytes(receive[1:], 32)
amountBig := new(big.Int).SetInt64(100000)
paddedAmount := common.LeftPadBytes(amountBig.Bytes(), 32)
resourceTypeBig := new(big.Int).SetInt64(int64(0))
paddedResourceType := common.LeftPadBytes(resourceTypeBig.Bytes(), 32)
data = append(data, methodId...)
data = append(data, paddedReceive...)
data = append(data, paddedAmount...)
data = append(data, paddedResourceType...)
fmt.Printf("parameter: %x\n", data)
endpoint.TriggerSmartContract(ctx, "TU2MJ5Veik1LRAgjeSzEdvmDYx7mefJZvd", data, &tron.Wallet{
Owner: "TDXhWtfwXqH6DadcrB5uucJ6HXtQQQQQQQ",
Ctrl: "x",
})
}
func (e *Endpoint) TriggerSmartContract(ctx context.Context, contract string, data []byte, wallet *Wallet) (*api.TransactionExtention, error) {
transferContract := new(core.TriggerSmartContract)
transferContract.OwnerAddress = internal.DecodeCheck(wallet.Owner)
transferContract.ContractAddress = internal.DecodeCheck(contract)
transferContract.Data = data
transferTransactionEx, err := e.wallet.TriggerConstantContract(ctx, transferContract)
var txId string
if err != nil {
return nil, err
}
transferTransaction := transferTransactionEx.Transaction
if transferTransaction == nil ||
len(transferTransaction.GetRawData().GetContract()) == 0 {
return nil, fmt.Errorf("transfer error: invalid transaction")
}
transferTransaction.RawData.FeeLimit = 200000000
hash, err := SignTransaction(transferTransaction, wallet.Ctrl)
if err != nil {
return nil, err
}
txId = hexutil.Encode(hash)
result, err := e.BroadcastTransaction(ctx, transferTransaction)
if err != nil {
return nil, err
}
if !result {
return nil, fmt.Errorf("api get false the msg: %v", result)
}
fmt.Println(txId)
return transferTransactionEx, err
}