如何向合约转BNB?

现在遇到了一大问题,就是不知道如何向合约来转BNB

我想实现的功能就是说,有一个button,点击button,Metamask的弹窗就弹出来授权,然后从钱包中转出1个BNB

我参考的资料如下,没准把这些知识串起来就明白了

 

参考文章如下:

https://blog.csdn.net/qq_16137795/article/details/120239103?utm_source=app&app_version=4.17.2&code=app_1562916241&uLinkId=usr1mkqgl919blen

 

代码如下:

 


import React, {Component} from 'react';
import Web3 from "web3";


/*******************************************************************************************
* 1.一个实例化的provider,可以是metamask ,infura,ganache,或者搭建以太坊节点 **
* **
2.合约的abi,自己填写的合约通过编译后获得abi,链上的合约需要开源才能获得abi,erc代币合约的abi其实都一样 ** **
*
3.实例化web3.js 或者 ether.js
*
4.通过abi和合约地址将合约实例化
*
5.调用合约方法 call 或者 send
*
* ******************************************************************************************/

class App extends Component {
constructor(props) {
super(props);
this.state = {
value: 0
};
}

//这个comreact的一个生命周期,在页面加载完之后会执行这里面的程序
async componentDidMount() {
//判断用户是不是安装了metamask
if (typeof window.ethereum !== 'undefined') {
const ethereum = window.ethereum
//禁止自动刷新,meta mask要求写的
ethereum.autoRefreshOnNetworkChange = false;

try {
//这一步就是第一次和metamask进行链接
const accounts = await ethereum.enable()
console.log(accounts)
console.log("链接成功小狐狸!!")
//初始化provider,其实这个provider就是节点,小狐狸也是一个节点
const provider = window['ethereum']

//获取网络id
console.log("chan id is ")
console.log(provider.chainId)


//实例化web3,注意哈,这里是大写
const web3 = new Web3(provider)

console.log("ssssssss")
console.log(accounts[0])


let fromAddress = accounts[0];
//转账数量
//let amount = 1*Math.pow(10,18);
// 如果要是18就是1BNB,如果要是17,就是0.1BNB
// 如果要是 2*Math.pow(10,17) 就是 0.2BNB
let amount = 1*Math.pow(10,17);
//收款地址
let toAddress = "0x40141cF4756A72DF8D8f81c1E0c2ad403C127b9E";
web3.eth.sendTransaction({
gas: 21000,
gasPrice: 5000000000,
from: fromAddress,
to: toAddress,
value: amount
}, (err, result) => {
console.log("转账Hash=",result)
})




//捕获两个事件,当前的页面切换网络ID和当前账号
ethereum.on('accountsChanged', function (accounts) {
console.log("当前账户发生更改:" + accounts)
})
ethereum.on('networkChanged', function (networkVersion) {
console.log("networkChanged" + networkVersion)
})
} catch (e) {

}

} else {
console.log("没有安装小狐狸!")
}

}

//定义两个方法
Getter = () => {
window.myContract.methods.getdata().call(null,function(error, resultt){

console.log("the data:"+resultt);

// this.setState({value: resultt})
});
}


Increase = () => {
window.myContract.methods.increase(2).send({from:window.defauleAccount})
.on('transactionHash',(transactionHash)=>{
console.log('transactionhash == ' + transactionHash)
})
.on('confirmation',(confirmation) => {
// console.log('confirmation == ' + confirmation )
})

}


render() {
return (
<div>
<div>{this.state.value}</div>
<div>
<button onClick={() => {this.Getter()}}>Getter</button>
</div>
<div>
<button onClick={() => {this.Increase()}}>Increase</button>
</div>
<div></div>
</div>
);
}
}

export default App;
 

 

 终于明白:

代码不变,

如果选择ETH链,转账时候的弹框就会显示 1 eth

如果选择 Binance 链,转账的时候就会显示 1 bnb

 

posted @ 2022-01-05 10:02  链宁区块链安全服务  阅读(640)  评论(0)    收藏  举报