契約にbnbを誓約する方法

一般的なスマートコントラクトでは、担保通貨はトークンであることが多く、非常に扱いやすいです。場合によっては、bnb をプレッジする状況が発生します。これにどのように対処するか、以下に例を示します。
function invest(address fromad,address irefer, uint256 amount) public payable { require(fromad==msg.sender); require(msg.value>=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,
  },
];

このうち、データはメソッドの前にあり、その後にメソッドを呼び出すためのパラメータが続き、16 進数に変換されます。64 ビットが足りない場合は、64 ビットを埋めます let res1=await ethereum .request({ method:
'
eth_sendTransaction ' , params, })補足:valueはメソッド呼び出し時にコントラクトに転送されるbnbの数であり、msg.valueで得られる値です。data は call メソッドでフォーマットされたデータであり、このデータを追加するだけで完全な呼び出しが実現できます。初めて投げるのにかなりの労力がかかったので、共有するためにここに載せました。コミュニケーションが好きな友達は、V: 54516204 を追加して、一緒にコミュニケーションしましょう。






おすすめ

転載: blog.csdn.net/weixin_38532278/article/details/125094935