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.
195 lines
5.3 KiB
195 lines
5.3 KiB
2 months ago
|
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 {
|
||
|
// 处理错误
|
||
|
}
|
||
|
|
||
|
}
|