BSC测试链部署智能合约

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
    }
    
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用 Uni-app 进行合约转账操作,需要先安装 web3.js,然后在代码中引入该库。接着,你需要连接到 BSC 络,可以使用 Infura 提供的节点。 下面是一个示例代码: ```javascript import Web3 from 'web3'; // 连接到 BSC 络 const web3 = new Web3(new Web3.providers.HttpProvider('https://bsc-dataseed1.binance.org:443')); // 合约地址和 ABI const contractAddress = '0x0000000000000000000000000000000000000000'; const contractAbi = [{...}]; // 创建合约实例 const contract = new web3.eth.Contract(contractAbi, contractAddress); // 转账 const fromAddress = '0x...'; // 发送方地址 const privateKey = '0x...'; // 发送方私钥 const recipientAddress = '0x...'; // 接收方地址 const amount = web3.utils.toWei('1', 'ether'); // 转账金额 const tx = { from: fromAddress, to: contractAddress, gas: 200000, data: contract.methods.transfer(recipientAddress, amount).encodeABI() }; web3.eth.accounts.signTransaction(tx, privateKey).then(signed => { web3.eth.sendSignedTransaction(signed.rawTransaction).on('receipt', console.log); }); ``` 其中,`contractAddress` 和 `contractAbi` 分别是你要调用的合约的地址和 ABI。`fromAddress` 是发送方的地址,`privateKey` 是发送方的私钥,`recipientAddress` 是接收方的地址,`amount` 是转账金额,需要将其转化为 wei 单位。 最后,使用 `web3.eth.sendSignedTransaction` 方法发送签名后的交易,通过监听 `receipt` 事件获取交易的结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值