BSC测试链部署智能合约

发布时间:2024年01月10日

1、metamask小狐狸钱包

  • 在火狐浏览器下载一个小狐狸钱包插件
  • 添加BSC测试网络
  • 创建个账号即有了自己的钱包地址

2、领取测试代币

3、部署智能合约

? ? ? ?

4、go语言获取事件日志

  • 在remix文件中查找abi,把[]及中括号中的内容,复制在一个json格式的文件中
  • go安装abigen,使用abigen将abi生成go文件 例如abigen --abi erc20.json -pkg json -type erc20 --out erc20.go
  • 使用github.com/ethereum/go-ethereum库进行日志事件的获取,具体使用可以参考文档读取事件日志 - 用 Go 来做以太坊开发 - 开发文档 - 文江博客
    package main
    
    import (
    	"context"
    	"github.com/ethereum/go-ethereum"
    	"github.com/ethereum/go-ethereum/common"
    	"github.com/ethereum/go-ethereum/crypto"
    	"github.com/ethereum/go-ethereum/ethclient"
    	"github.com/wonderivan/logger"
    	"math/big"
    	"XXXX/abi" //自己使用abigen生成的那个go文件夹地址,我的pkg设置了为abi,所以这里就叫abi
    )
    // abigen --abi erc20.json -pkg abi -type erc20 --out erc20.go
    func main() {
    	//部署后在remix上面可以看到刚刚部署的合约地址
    	contractAddress := common.HexToAddress("0x12345...")
    	//rpcURL可以参考 https://docs.bnbchain.org/docs/rpc
    	client, err := ethclient.Dial("https://data-seed-prebsc-1-s2.binance.org:8545/") //如果实在拿不到可注册https://getblock.io/nodes/bsc,有免费调用次数
    	if err != nil {
    		panic(err)
    	}
    
    	query := ethereum.FilterQuery{
    		FromBlock: big.NewInt(36660000), //生产环境中,查找当前区块高度,查询后修改区块记录,下一次就从后一个有记录的区块数开始
    		ToBlock:   big.NewInt(36660020),
    		Addresses: []common.Address{
    			contractAddress,
    		},
    	}
    	logs, err := client.FilterLogs(context.Background(), query)
    	if err != nil {
    		panic(err)
    	}
    	erc20, _ := abi.NewAbi(contractAddress, client)
    	for _, log := range logs {
    		if len(log.Topics) == 0 {
    			continue
    		}
    		switch log.Topics[0].Hex() {
    		case TransferEvent():
    			logger.Info("TransferEvent:%v\n", log.Data)
    			data, err := erc20.ParseTransfer(log)
    			logger.Debug(data.From.Hex(), data.To.Hex(), data.Value.String(), err)
    		case MintEvent():
    			logger.Info("MintEvent:%v\n", log)
    			data, err := erc20.ParseMint(log)
    			logger.Debug(data.To.Hex(), data.Value.String(), err)
    		default:
    			logger.Info("default:%v\n", log)
    		}
    	}
    }
    
    func TransferEvent() string {
    	event := crypto.Keccak256Hash([]byte("Transfer(address,address,uint256)")).Hex()
    	return event
    }
    
    func MintEvent() string {
    	event := crypto.Keccak256Hash([]byte("Mint(address,uint256)")).Hex()
    	return event
    }
    
文章来源:https://blog.csdn.net/qq_37575994/article/details/135496292
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。