You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

194 lines
5.3 KiB

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 {
// 处理错误
}
}