Solidity
如何成功將 Ether 發送到合約?
Solidity 新手…
我正在研究如何通過在函式中設置參數將乙太幣存入智能合約。根據函式接收到的值,msg.sender 能夠發送預定數量的乙太幣。
這個想法是,如果提供 1 - 3 的值,則從 msg.sender 向合約地址發送 24、12 或 6 個 Ether。我設置 z = j 以驗證該函式是否接收到該值。變數 t 是 Wei 中的值,設置為 msg.value。似乎 msg.value 已正確設置,因為 t 的值會根據提供的輸入值進行更新。
我遇到的問題是呼叫函式時沒有轉移乙太幣。有用的指導將不勝感激。
我正在使用 Remix 並確認所有帳戶都已解鎖。
下面是源碼…
pragma solidity ^0.4.18; contract ETHTEST2 { mapping(address => uint256) public deposits; //depost uint256 public z; uint256 public t; function sendETHtoContract(uint256 j) public payable { //msg.sender & msg.value test - Work in Progress if (j == 1){ z = j; msg.value == t; t = 24000000000000000000 wei; address(this).transfer(msg.value); return; } if (j == 2){ z = j; t = 12000000000000000000 wei; address(this).transfer(msg.value); return; } if (j == 3){ z = j; t = 6000000000000000000 wei; address(this).transfer(msg.value); return; } if (j >=4 || j < 0){ //works revert(); return; } } function getBalance() public view returns (uint256) { return address(this).balance; } function() public payable { // this function enables the contract to receive funds } }
合約不能強行從錢包地址中提取 ETH,如果你想將 Ether 支付到合約中,你必須在呼叫函式時設置交易的“價值”(或者如果回退函式,則只需將 ETH 發送到合約地址允許)。
Using將從
transfer
合約轉移到另一個地址,因此,合約只是獲取 msg.sender 提供的 ETH,並將其傳遞給自己。address(this).transfer(msg.value)
function sendETHtoContract(uint256 j) public payable { //msg.value is the amount of wei that the msg.sender sent with this transaction. //If the transaction doesn't fail, then the contract now has this ETH. }