如何向合约中质押bnb
Posted weixin_38532278
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何向合约中质押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,一起沟通交流。
智能合约实战 solidity 语法学习 10 [ BNB合约解读 ] 附代码
目录
1. ether官网搜索BNB
https://etherscan.io/address/0xB8c77482e45F1F44dE1745F52C74426C631bDD52
2.获取BNB合约源码
以上是关于如何向合约中质押bnb的主要内容,如果未能解决你的问题,请参考以下文章