blockchain - 如何使用solidity和web3将以太币存入账户?
问题描述
我正在构建一个示例智能合约。我正在尝试将以太币从一个帐户存入另一个帐户,但问题是金额已从发件人的帐户中扣除,但无法存入收件人的帐户。
这是我的合同代码:
pragma solidity ^0.5.0;
contract ApprovalContract{
address public sender;
address public receiver;
function deposit(address _receiver) external payable {
require(msg.value > 0);
sender = msg.sender;
receiver = _receiver;
address payable _rec = receiver.make_payable();
_rec.transfer(address(this).balance);
}
using address_make_payable for address;
}
library address_make_payable {
function make_payable(address x) internal pure returns (address payable) {
return address(uint160(x));
}
}
这是我的 web3 代码:
let ApprovalContract = new web3.eth.Contract(
abi,
"0xABd4495e3afc9E61Bbbf54620587aB4B48CEd7d3" //contract address
);
ApprovalContract.methods
.deposit("0xF33ca58CbD25bC0fFe5546Dc494E5c61C8D7fFc3")
.send(
{
from: "0x7186ffcf5ea764257fdbaefccb9472f054495d11",
gas: 100000,
value: web3.utils.toWei("1", "ether")
},
(err, res) =>
err
? console.log(`error: ${err}`)
: console.log(`Success: ${res}`)
);
解决方案
只需在您的智能合约中添加一些映射,就像这样mapping( address => uint256 ) balance
,这是您的固定智能合约:
pragma solidity ^0.5.0;
contract ApprovalContract{
address payable owner = msg.sender;
mapping(address => uint256) balance;
function deposit() external payable {
require(msg.value > 0);
sender = msg.sender;
deposited = msg.value;
receiver = owner;
balance[sender] = deposited;
receiver.transfer(deposited);
}
}
推荐阅读
- excel - 在单元格文本中查找字符串(VB)
- python - 如何根据A列中的值合并B列中的值
- mysql - 如何将可重复的分区作为一个又一个分区的新分区?
- javascript - 标记的形状 - 可点击区域
- xamarin - 如何处理推送通知中的点击事件 (Xamarin.IOS)
- reactjs - 如何映射对象数组,以返回具有新键的对象数组
- javascript - 如何在 iFrame 中添加原始关闭按钮?
- python-3.x - 为什么 Dask.dataframe.set_index 不能将组合列识别为单列?
- php-7 - 使用 PHP7 PDO 的密码重置页面?
- ios - 分组按钮的最佳方式是什么?