在普遍智能合约中,质押的币一般是代币,这个非常容易处理。偶尔也会有质押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);文章来源:https://www.toymoban.com/news/detail-455091.html
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,一起沟通交流。文章来源地址https://www.toymoban.com/news/detail-455091.html
到了这里,关于如何向合约中质押bnb的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!