如何向合约中质押bnb

在普遍智能合约中,质押的币一般是代币,这个非常容易处理。偶尔也会有质押bnb的情况,这种是如何处理的呢,下面我给个例子。
function invest(address fromad,address irefer, uint256 amount) public payable {
require(fromad==msg.sender);
require(msg.value>=amount);
//添加amount必须是1,2,5
//…
//
addrefer(fromad,irefer,amount.mul(15000).div(10));
addalluser(fromad);
addmyson(fromad,irefer);

	users storage user = Users[fromad];
    user.amountbnb=user.amountbnb.add(amount);
    require(user.amountbnb+amount<=20*decimals,"must less than 20BNB");
	user.deposits.push(Deposit(block.timestamp,amount,amount.mul(15000)));
}
比如,正常的质押代币,用ERC20直接调用转帐就可以了,但是,如果是转bnb,ERC20就失效了。
首先对函数做一下介绍。
1、函数要写成payable类型的。
2.msg.value,是用户在调用invest方法的时候,向合约发了多少个bnb.
这两个是必须的。那么前端如何拉起小狐狸钱包,调用呢,可以用以下方式:
  let params=[
  {
    from: fromad,
    to: toad,
    gas: '0x9cc3e', // 30400
    gasPrice: '0x2540be400', // 10000000000000
    value: this.$web3.utils.toHex(val), // 2441406250
    data:
      '0x000000000000000000000000,
  },
];

其中data前面为方法,后面是要调用方法的参数,转换成16进制,如果不够64位,补满64位
let res1=await ethereum
.request({
method: ‘eth_sendTransaction’,
params,
})
补充说明:
value是调用方法的时候,向合约中转入的bnb数量,也就是msg.value取得的值。
data是调用方法格式化出来的数据,只要把data补充上,就可以实现完美调用了。
第一次折腾,费了我好大的功夫,所以放这里,给大家分享。喜欢交流的朋友,加V:54516204,一起沟通交流。

猜你喜欢

转载自blog.csdn.net/weixin_38532278/article/details/125094935
今日推荐