{"id":37126063,"url":"https://github.com/sxwebdev/gotron","last_synced_at":"2026-01-14T14:34:22.031Z","repository":{"id":329119769,"uuid":"1089683346","full_name":"sxwebdev/gotron","owner":"sxwebdev","description":"Go Tron SDK","archived":false,"fork":false,"pushed_at":"2026-01-13T12:51:34.000Z","size":173,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-13T15:42:19.200Z","etag":null,"topics":["blockchain","go","sdk","tron","trx"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sxwebdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-04T17:08:32.000Z","updated_at":"2026-01-13T12:51:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sxwebdev/gotron","commit_stats":null,"previous_names":["sxwebdev/gotron"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sxwebdev/gotron","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sxwebdev%2Fgotron","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sxwebdev%2Fgotron/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sxwebdev%2Fgotron/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sxwebdev%2Fgotron/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sxwebdev","download_url":"https://codeload.github.com/sxwebdev/gotron/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sxwebdev%2Fgotron/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28423607,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T13:30:50.153Z","status":"ssl_error","status_checked_at":"2026-01-14T13:29:08.907Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","go","sdk","tron","trx"],"created_at":"2026-01-14T14:34:21.287Z","updated_at":"2026-01-14T14:34:22.017Z","avatar_url":"https://github.com/sxwebdev.png","language":"Go","readme":"# Gotron SDK\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/sxwebdev/gotron.svg)](https://pkg.go.dev/github.com/sxwebdev/gotron)\n[![Go Version](https://img.shields.io/badge/go-1.25-blue)](https://go.dev/)\n[![License](https://img.shields.io/github/license/sxwebdev/gotron)](LICENSE)\n\nA comprehensive Go SDK for the Tron blockchain. This library provides a complete client implementation for interacting with Tron nodes via gRPC, managing addresses, creating and signing transactions, and working with TRC20 tokens.\n\n## Features\n\n- **Complete gRPC Client** - Full implementation of Tron Wallet API\n- **Address Management** - BIP39/BIP44 mnemonic support, address generation and validation\n- **Transaction Handling** - Create, sign, and broadcast transactions\n- **TRC20 Token Support** - Transfer, approve, balance queries, token info\n- **Resource Management** - Delegate/undelegate bandwidth and energy\n- **Account Operations** - Balance queries, account info, activation\n- **Block \u0026 Transaction Queries** - Get blocks, transactions, and receipts\n- **Multi-Network Support** - Mainnet, Shasta testnet, Nile testnet\n- **Precision Arithmetic** - Uses `decimal.Decimal` for accurate calculations\n- **Type Safety** - Full type definitions with validation\n- **Native Implementation** - Built on official Tron protocol buffers\n\n## Installation\n\n```bash\ngo get github.com/sxwebdev/gotron\n```\n\n## Quick Start\n\n### Initialize Client\n\n```go\npackage main\n\nimport (\n  \"context\"\n  \"fmt\"\n  \"log\"\n\n  \"github.com/sxwebdev/gotron\"\n)\n\nfunc main() {\n  // Create client with default mainnet configuration\n  cfg := gotron.Config{\n    GRPCAddress: \"your-custom-node-grpc-address:50051\",\n  }\n\n  tron, err := gotron.New(cfg)\n  if err != nil {\n    log.Fatal(err)\n  }\n  defer tron.Close()\n\n  ctx := context.Background()\n\n  // Get account balance (in TRX)\n  balance, err := tron.GetAccountBalance(ctx, \"TYourAddress\")\n  if err != nil {\n    log.Fatal(err)\n  }\n  fmt.Printf(\"Balance: %s TRX\\n\", balance.String())\n}\n```\n\n### Generate Addresses\n\n```go\nimport \"github.com/sxwebdev/gotron/pkg/address\"\n\n// Generate a new 12-word mnemonic\nmnemonic, err := address.GenerateMnemonic(128)\nif err != nil {\n  log.Fatal(err)\n}\n\n// Derive address from mnemonic (BIP44 path: m/44'/195'/0'/0/0)\naddr, err := address.FromMnemonic(mnemonic, \"\", 0)\nif err != nil {\n  log.Fatal(err)\n}\n\nfmt.Printf(\"Address: %s\\n\", addr.Address)\nfmt.Printf(\"Private Key: %s\\n\", addr.PrivateKey)\nfmt.Printf(\"Mnemonic: %s\\n\", addr.Mnemonic)\n\n// Generate random address\nrandomAddr, err := address.Generate()\nif err != nil {\n  log.Fatal(err)\n}\n\n// Import from private key\nimportedAddr, err := address.FromPrivateKey(\"your-hex-private-key\")\nif err != nil {\n  log.Fatal(err)\n}\n```\n\n### Transfer TRX\n\n```go\nimport (\n  \"context\"\n  \"github.com/shopspring/decimal\"\n  \"github.com/sxwebdev/gotron/pkg/address\"\n)\n\nctx := context.Background()\n\n// Create transfer transaction (amount in TRX)\ntx, err := tron.CreateTransferTransaction(\n  ctx,\n  \"TFromAddress\",\n  \"TToAddress\",\n  decimal.NewFromFloat(1.5), // 1.5 TRX\n)\nif err != nil {\n  log.Fatal(err)\n}\n\n// Import private key\nprivateKey, err := address.PrivateKeyFromHex(\"your-hex-private-key\")\nif err != nil {\n  log.Fatal(err)\n}\n\n// Sign transaction\nerr = tron.SignTransaction(tx.Transaction, privateKey)\nif err != nil {\n  log.Fatal(err)\n}\n\n// Broadcast transaction\nresult, err := tron.BroadcastTransaction(ctx, tx.Transaction)\nif err != nil {\n  log.Fatal(err)\n}\n\nfmt.Printf(\"Transaction broadcasted: %s\\n\", result.Message)\n```\n\n### TRC20 Token Operations\n\n```go\nconst (\n  usdtContract = \"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\" // USDT on Tron\n)\n\nctx := context.Background()\n\n// Get token info\nname, _ := tron.TRC20GetName(ctx, usdtContract)\nsymbol, _ := tron.TRC20GetSymbol(ctx, usdtContract)\ndecimals, _ := tron.TRC20GetDecimals(ctx, usdtContract)\n\nfmt.Printf(\"Token: %s (%s), Decimals: %d\\n\", name, symbol, decimals)\n\n// Get token balance\nbalance, err := tron.TRC20ContractBalance(ctx, \"TYourAddress\", usdtContract)\nif err != nil {\n    log.Fatal(err)\n}\nfmt.Printf(\"Balance: %s\\n\", balance.String())\n\n// Transfer tokens (amount in smallest unit, 1 USDT = 1000000)\ntx, err := tron.TRC20Send(\n  ctx,\n  \"TFromAddress\",\n  \"TToAddress\",\n  usdtContract,\n  decimal.NewFromInt(1000000), // 1 USDT\n  100_000_000, // Fee limit in SUN (100 TRX)\n)\nif err != nil {\n    log.Fatal(err)\n}\n\n// Sign and broadcast...\nprivateKey, _ := address.PrivateKeyFromHex(\"your-private-key\")\ntron.SignTransaction(tx.Transaction, privateKey)\nresult, _ := tron.BroadcastTransaction(ctx, tx.Transaction)\n```\n\n### Delegate \u0026 Reclaim Resources\n\n```go\nimport \"github.com/sxwebdev/gotron\"\n\nctx := context.Background()\n\n// Delegate 1000 TRX worth of energy to another address\ntx, err := tron.DelegateResource(\n  ctx,\n  \"TOwnerAddress\",\n  \"TReceiverAddress\",\n  gotron.Energy,              // Resource type\n  1000_000_000,               // Balance in SUN (1000 TRX)\n  false,                      // Lock\n  0,                          // Lock period\n)\nif err != nil {\n    log.Fatal(err)\n}\n\n// Sign and broadcast...\n\n// Reclaim delegated resources\nreclaimTx, err := tron.ReclaimResource(\n  ctx,\n  \"TOwnerAddress\",\n  \"TReceiverAddress\",\n  gotron.Energy,\n  1000_000_000, // Amount in SUN\n)\n```\n\n### Query Blocks and Transactions\n\n```go\nctx := context.Background()\n\n// Get latest block\nblock, err := tron.GetLastBlock(ctx)\nif err != nil {\n    log.Fatal(err)\n}\nfmt.Printf(\"Latest block: %d\\n\", block.BlockHeader.RawData.Number)\n\n// Get block by height\nspecificBlock, err := tron.GetBlockByHeight(ctx, 12345678)\n\n// Get transaction by hash\ntx, err := tron.GetTransactionByHash(ctx, \"transaction-hash\")\n\n// Get transaction receipt\nreceipt, err := tron.GetTransactionInfoByHash(ctx, \"transaction-hash\")\nfmt.Printf(\"Result: %s\\n\", receipt.Result)\n```\n\n### Account Operations\n\n```go\nctx := context.Background()\n\n// Check if account is activated\nisActivated, err := tron.IsAccountActivated(ctx, \"TAddress\")\n\n// Estimate activation cost\nestimate, err := tron.EstimateActivateAccount(ctx, \"TFromAddress\", \"TToAddress\")\nfmt.Printf(\"Activation cost: %s TRX\\n\", estimate.Trx.String())\n\n// Get account resources\nresources, err := tron.TotalAvailableResources(ctx, \"TAddress\")\nfmt.Printf(\"Energy: %s, Bandwidth: %s\\n\",\n  resources.Energy.String(),\n  resources.Bandwidth.String(),\n)\n```\n\n## Network Configuration\n\n### Predefined Networks\n\n```go\n// Mainnet (default)\ncfg := gotron.Config{\n    Network: gotron.Mainnet,\n}\n\n// Shasta Testnet\ncfg := gotron.Config{\n    Network: gotron.Shasta,\n}\n\n// Nile Testnet\ncfg := gotron.Config{\n    Network: gotron.Nile,\n}\n```\n\n### Custom Configuration\n\n```go\nimport (\n    \"github.com/sxwebdev/gotron/pkg/client\"\n    \"google.golang.org/grpc\"\n)\n\ncfg := client.Config{\n  GRPCAddress: \"your-custom-node:50051\",\n  UseTLS:      true,\n  DialOptions: []grpc.DialOption{\n      // Add custom dial options here\n  },\n}\n\ntron, err := gotron.New(cfg)\n```\n\n### TronGrid with API Key (Interceptor Pattern)\n\nFor production use with TronGrid, implement an interceptor to add the API key header:\n\n```go\nimport (\n    \"context\"\n\n    \"github.com/sxwebdev/gotron/pkg/client\"\n    \"google.golang.org/grpc\"\n    \"google.golang.org/grpc/metadata\"\n)\n\n// Create interceptor that adds TRON-PRO-API-KEY header\nfunc tronGridAPIKeyInterceptor(apiKey string) grpc.UnaryClientInterceptor {\n  return func(\n    ctx context.Context,\n    method string,\n    req, reply any,\n    cc *grpc.ClientConn,\n    invoker grpc.UnaryInvoker,\n    opts ...grpc.CallOption,\n  ) error {\n    ctx = metadata.AppendToOutgoingContext(ctx, \"TRON-PRO-API-KEY\", apiKey)\n    return invoker(ctx, method, req, reply, cc, opts...)\n  }\n}\n\nfunc main() {\n  apiKey := \"your-trongrid-api-key\"\n\n  cfg := client.Config{\n    Network: client.NetworkMainnet,\n    Address: \"grpc.trongrid.io:50051\",\n    DialOptions: []grpc.DialOption{\n        grpc.WithUnaryInterceptor(tronGridAPIKeyInterceptor(apiKey)),\n    },\n  }\n\n  tron, err := gotron.New(cfg)\n  if err != nil {\n    log.Fatal(err)\n  }\n  defer tron.Close()\n\n  // All requests will include the API key header\n  balance, err := tron.GetAccountBalance(ctx, \"TAddress\")\n}\n```\n\n## Package Structure\n\n```text\ngotron/\n├── tron.go              # High-level wrapper and constants\n├── pkg/\n│   ├── address/         # Address generation, validation, BIP39/BIP44\n│   ├── client/          # Core gRPC client implementation\n│   │   ├── client.go    # Client initialization\n│   │   ├── account.go   # Account operations\n│   │   ├── transfer.go  # TRX transfers\n│   │   ├── trc20.go     # TRC20 token operations\n│   │   ├── resources.go # Resource delegation\n│   │   ├── block.go     # Block queries\n│   │   ├── transactions.go # Transaction operations\n│   │   └── ...\n│   └── utils/           # Utility functions\n└── schema/pb/           # Protocol buffer definitions\n    ├── api/             # Tron API definitions\n    └── core/            # Core protocol types\n```\n\n## Constants\n\n```go\n// Networks\ngotron.Mainnet\ngotron.Shasta\ngotron.Nile\n\n// Resource Types\ngotron.Bandwidth\ngotron.Energy\n\n// Decimals\ngotron.TrxDecimals = 6\n\n// Event Signatures\ngotron.Trc20TransferEventSignature\n```\n\n## Error Handling\n\nThe library provides typed errors for common scenarios:\n\n```go\nimport \"github.com/sxwebdev/gotron/pkg/client\"\n\n_, err := tron.GetAccount(ctx, \"invalid-address\")\nif errors.Is(err, client.ErrAccountNotFound) {\n  fmt.Println(\"Account not found\")\n}\n\n// Other errors:\n// - client.ErrInvalidAddress\n// - client.ErrInvalidAmount\n// - client.ErrInvalidConfig\n// - client.ErrTransactionNotFound\n// - client.ErrInvalidResourceType\n```\n\n## Advanced Usage\n\n### Address Generator with Custom Derivation\n\n```go\nimport \"github.com/sxwebdev/gotron/pkg/address\"\n\n// Create address generator\ngenerator := address.NewAddressGenerator(mnemonic, \"passphrase\")\n\n// Customize BIP44 path\ngenerator.\n  SetBipPurpose(44).\n  SetCoinType(195).\n  SetAccount(0)\n\n// Generate multiple addresses\nfor i := uint32(0); i \u003c 10; i++ {\n  addr, err := generator.Generate(i)\n  if err != nil {\n      log.Fatal(err)\n  }\n  fmt.Printf(\"Address %d: %s\\n\", i, addr.Address)\n}\n```\n\n### Direct API Access\n\n```go\n// Access underlying gRPC client for advanced operations\nwalletAPI := tron.API()\n\n// Use any Wallet API method directly\nnodeInfo, err := walletAPI.GetNodeInfo(ctx, \u0026api.EmptyMessage{})\n```\n\n## Testing\n\n```bash\ngo test ./...\n```\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit issues and pull requests.\n\n## Resources\n\n- [Tron Documentation](https://developers.tron.network/)\n- [TronGrid API](https://www.trongrid.io/)\n- [pkg.go.dev Documentation](https://pkg.go.dev/github.com/sxwebdev/gotron)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsxwebdev%2Fgotron","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsxwebdev%2Fgotron","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsxwebdev%2Fgotron/lists"}