For the complete documentation index, see llms.txt. This page is also available as Markdown.

TriggerContract - Tron

Example code for the TriggerContract gRPC method. Complete guide on how to use TriggerContract gRPC method in GetBlock Web3 documentation.

This method builds an unsigned transaction that calls a state-changing smart-contract function, such as a TRC-20 transfer. The returned transaction must be signed and broadcast.

Service

This method is served by the protocol.Wallet service.

Method

rpc TriggerContract (TriggerSmartContract) returns (TransactionExtention)

Request Message

TriggerSmartContract

Field
Type
Description

owner_address

bytes

Caller address as raw bytes

contract_address

bytes

Contract address as raw bytes

data

bytes

ABI-encoded call data (selector + arguments)

call_value

int64

TRX in SUN to send with the call

fee_limit

int64

Maximum TRX in SUN to spend on Energy (write calls)

Request

grpcurl -H 'x-api-key: <ACCESS-TOKEN>' \
  -d '{"owner_address": "41f0cc5a2a84cd0f68ed1667070934542d673acbd8", "contract_address": "41a614f803b6fd780986a42c78ec9c7f77e6ded13c", "data": "a9059cbb...", "fee_limit": 100000000}' \
  go.getblock.io:443 protocol.Wallet/TriggerContract
example.py
import grpc
# Stubs generated from java-tron's api.proto with grpcio-tools
from api import api_pb2_grpc
from core import Contract_pb2, Tron_pb2

creds = grpc.ssl_channel_credentials()
channel = grpc.secure_channel('go.getblock.io:443', creds)
metadata = [('x-api-key', '<ACCESS-TOKEN>')]
stub = api_pb2_grpc.WalletStub(channel)

response = stub.TriggerContract(Contract_pb2.TriggerSmartContract(
    owner_address=bytes.fromhex('41f0cc5a2a84cd0f68ed1667070934542d673acbd8'),
    contract_address=bytes.fromhex('41a614f803b6fd780986a42c78ec9c7f77e6ded13c'),
    data=bytes.fromhex('a9059cbb...')), metadata=metadata)
print(response)
example.go
conn, _ := grpc.Dial(
    "go.getblock.io:443",
    grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})),
)
defer conn.Close()

client := api.NewWalletClient(conn)
ctx := metadata.AppendToOutgoingContext(
    context.Background(), "x-api-key", "<ACCESS-TOKEN>")

resp, _ := client.TriggerContract(ctx, &core.TriggerSmartContract{OwnerAddress: owner, ContractAddress: contract, Data: callData})
fmt.Println(resp)

Response Message

TransactionExtention

Field
Type
Description

transaction

Transaction

The built, unsigned transaction

txid

bytes

The transaction id

result

Return

Build result, with a result flag and any error code

constant_result

repeated bytes

Return data for constant (read-only) calls

energy_used

int64

Energy the call consumes

Use Cases

  • Token Transfers: Build a TRC-20 transfer such as USDT

  • Contract Writes: Call any state-changing contract function

  • dApp Actions: Build swaps, approvals, and mints for signing

  • Fee Control: Cap Energy spend with fee_limit

Error Handling

Code
Status
Description

3

INVALID_ARGUMENT

A request field is missing or malformed

5

NOT_FOUND

The requested account, block, or transaction does not exist

16

UNAUTHENTICATED

The access token is missing or invalid

13

INTERNAL

The node failed to process the request

Was this helpful?