This commit is contained in:
aozhiwei 2024-09-04 15:27:38 +08:00
parent bff6f00c5a
commit a1d43989c9

View File

@ -10,6 +10,10 @@ import (
"strings"
"github.com/gin-gonic/gin"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)
type UserApi struct {
@ -27,6 +31,59 @@ func (this *UserApi) Login(c *gin.Context) {
"token": s.GetToken(),
})
}
client, err := ethclient.Dial("https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID") // 替换为你的Infura项目ID
if err != nil {
log.Fatal(err)
}
contractAddress := common.HexToAddress("0xTokenContractAddress") // 替换为代币合约地址
instance, err := NewERC20(contractAddress, client)
if err != nil {
log.Fatal(err)
}
address := common.HexToAddress("0xUserAddress") // 替换为用户地址
balance, err := instance.BalanceOf(nil, address)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Balance: %s\n", balance.String())
}
func NewERC20(address common.Address, client *ethclient.Client) (*ERC20, error) {
parsedABI, err := abi.JSON(strings.NewReader(erc20ABI))
if err != nil {
return nil, err
}
return &ERC20{
contract: NewERC20Caller(address, client),
caller: parsedABI.Pack("balanceOf", common.HexToAddress("0xUserAddress")), // 替换为用户地址
}, nil
}
type ERC20 struct {
contract *ERC20Caller
caller *abi.Packed
}
type ERC20Caller struct {
contractAddress common.Address
client *ethclient.Client
}
func NewERC20Caller(address common.Address, client *ethclient.Client) *ERC20Caller {
return &ERC20Caller{
contractAddress: address,
client: client,
}
}
func (caller *ERC20Caller) BalanceOf(ctx context.Context, account common.Address) (*big.Int, error) {
var result *big.Int
err := caller.client.CallContext(ctx, &result, "ethcall", &caller.contractAddress, caller.caller, account)
return result, err
}
func (this *UserApi) Info(c *gin.Context) {