package grpc import ( "bytes" "context" "fmt" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/rpc" "math/big" "testing" "wallet-system/internal/pkg/contract/coin" "wallet-system/internal/pkg/logging/applogger" "wallet-system/internal/pkg/wallet/tron" "wallet-system/internal/pkg/wallet/tron/sign" ) // TestTRC20Balance func TestTRC20Balance(t *testing.T) { grpcClient, err := NewClient("grpc.shasta.trongrid.io:50051") if err != nil { fmt.Println("链接地址失败:", err) } balance, err := grpcClient.GetTrc20Balance("TSNEe5Tf4rnc9zPMNXfaTF5fZfHDDH8oyW", "TTVFLcvHJfVF1JBm91eQ4aNW2qAQU2Ax3d") if err != nil { fmt.Println("grpc客户端:", err) } fmt.Println("查询可用余额:", balance) } // TestGetContractABI func TestGetContractABI(t *testing.T) { grpcClient, err := NewClient("grpc.shasta.trongrid.io:50051") if err != nil { fmt.Println("链接地址失败:", err) } abi, err := grpcClient.GetContractABI("TTVFLcvHJfVF1JBm91eQ4aNW2qAQU2Ax3d") if err != nil { fmt.Println("获取合约ABI信息:", err) } fmt.Println("数据展示:", abi.String()) } // TestContractApprove 授权设置 func TestContractApprove(t *testing.T) { // 创建一个 Tron 客户端 client, err := NewClient("grpc.shasta.trongrid.io:50051") if err != nil { applogger.Error("链接地址错误:%v", err) return } fmt.Println("链接客户端:", client) // from地址,to地址,合约地址,转账金额 from := "TM9xH19dZtTVszRVfQgrTEqxqhbyzqnPxi" to := "TWqpv3h4Vc3KosHhn4tpSRiuayaVLQF9Xe" contractAddress := "TU1vLr6K4XF8Uddqj8PXr3pSENVb3teY4J" amount := big.NewInt(300000000) // 授权账号信息 tx, err := client.TRC20Approve(from, to, contractAddress, amount, int64(15000000000)) if err != nil { applogger.Error("TRC20Approve 授权:%v", err) return } applogger.Debug("授权转账:%v", tx.Transaction) privateKey := "08b407316ddec4a164d6bbc09357591df580ac380a93f898ddc16e0e11f830c9" signTx, err := sign.SignTransaction(tx.Transaction, privateKey) if err != nil { applogger.Error("签名失败:%v", err) return } if err = client.BroadcastTransaction(signTx); err != nil { applogger.Error("上链失败:%v", err) return } applogger.Debug("授权转账信息:%v", tron.Encode(tx.GetTxid())) } func TestTRC20Transfer(t *testing.T) { // 创建一个 Tron 客户端 client, err := NewClient("grpc.shasta.trongrid.io:50051") if err != nil { applogger.Error("链接地址错误:%v", err) return } fmt.Println("链接客户端:", client) // from地址,to地址,合约地址,转账金额 from := "TVBdbsmp67P76gCxGgLa2dHGJFjyXw5X5Z" to := "TM9xH19dZtTVszRVfQgrTEqxqhbyzqnPxi" amount := big.NewInt(100000000) tx, err := client.Transfer(from, to, amount.Int64()) if err != nil { applogger.Error("转账失败:%v", err) return } privateKey := "5a79d71f2458d07b7d088bb126c03dd0252e7faa1cc60358830563f74ce508af" signTx, err := sign.SignTransaction(tx.Transaction, privateKey) if err != nil { applogger.Error("签名失败:%v", err) return } if err = client.BroadcastTransaction(signTx); err != nil { applogger.Error("上链失败:%v", err) return } applogger.Debug("授权转账信息:%v", tron.Encode(tx.GetTxid())) } // TestTRC20TransferTest 授权之后如何将授权额度转出 func TestTRC20TransferTest(t *testing.T) { // 创建一个 Tron 客户端 client, err := NewClient("grpc.shasta.trongrid.io:50051") if err != nil { applogger.Error("链接地址错误:%v", err) return } // from授权地址,to接受地址, 合约地址, 授权额度 from := "TWqpv3h4Vc3KosHhn4tpSRiuayaVLQF9Xe" to := "TEBZJWzTEezZ4CdZZC91J6zb2MwwqAfoBa" contractAddress := "TU1vLr6K4XF8Uddqj8PXr3pSENVb3teY4J" amount := big.NewInt(10000000) // 授权账号信息 tx, err := client.TransferAsset(from, to, contractAddress, amount.Int64()) if err != nil { applogger.Error("TransferAsset 转账:%v", err) return } applogger.Debug("转账失败:%v", tx.Transaction) privateKey := "1e65c007c7e68d2b51e2610d610afbe1be232b893017bbd287336b9ef494f007" signTx, err := sign.SignTransaction(tx.Transaction, privateKey) if err != nil { applogger.Error("签名失败:%v", err) return } if err = client.BroadcastTransaction(signTx); err != nil { applogger.Error("上链失败:%v", err) return } applogger.Debug("授权转账信息:%v", tron.Encode(tx.GetTxid())) } // TestWeb3Trc20 使用web3调用地址 func TestWeb3Trc20(t *testing.T) { tronNodeURL := "http://localhost:8090" // 替换为实际的Tron节点URL client, err := rpc.Dial(tronNodeURL) if err != nil { // 处理错误 } contractABI, err := abi.JSON(bytes.NewReader([]byte(coin.ContractABI))) // 替换为智能合约的ABI定义 if err != nil { // 处理错误 } contractAddress := common.HexToAddress("TU1vLr6K4XF8Uddqj8PXr3pSENVb3teY4J") // 替换为实际的合约地址 methodName := "myMethod" // 替换为合约的方法名 input, err := contractABI.Methods[methodName].Inputs.Pack("aaaa") // 替换为传入合约方法的参数 if err != nil { // 处理错误 } msg := ethereum.CallMsg{ To: &contractAddress, Data: input, } err = client.CallContext(context.Background(), msg, methodName, nil) if err != nil { // 处理错误 } }