Solidity
使用地址將資金從合約轉移到賬戶
我一直在嘗試將我的一份契約的全部資金轉移到一個特定的賬戶。但似乎沒有任何效果。
pragma solidity >= 0.4.22; contract reg{ address owner; uint256 regFee = 2 ether; address[] private registered; uint a = 0; mapping (address => uint256) public balance; constructor() public{ owner = msg.sender; regFee = 2 ether; } event registeration(address indexed _to); // function register() public{ // balance[(msg.sender)] -= 2 ether; // balance[msg.sender] += 2 ether; // emit registeration(msg.sender); // } function () payable external{ balance[(msg.sender)] -= 2 ether; balance[address(this)] += 2 ether; registered.push(msg.sender); a++; emit registeration(msg.sender); } function list() public view returns(address, address, address){ return (registered[0], registered[1], registered[2]); } }
這是完整的契約。
我想寫的另一份契約是選擇一個
掛號的
$$ 0 $$, 掛號的$$ 1 $$, 掛號的$$ 2 $$
並將契約註冊的所有資金轉移到契約送出。以下是 subm 的程式碼。
pragma solidity >= 0.4.22; import "./Untitled.sol"; contract subm{ address winner; reg public regi; mapping (address => uint256) public balance; function submissions() public{ if (winner == address(0)){ winner = msg.sender; } else { return; } } }
有人好心的幫助,由於新的語法而感到困惑。
因此,如果我理解正確,您有一份
reg
從使用者那裡收集乙太幣的契約,還有一份subm
您想要轉發收集到的乙太幣的契約。我猜你對功能還有其他一些想法,但我不確定你想用這些實現什麼。
因此,這是一個可能的超級簡單範例:
pragma solidity ^0.5.0; contract Reg { mapping (address => uint256) public userBalances; address payable otherContr; constructor(address payable otherContrAddr) public { otherContr = otherContrAddr; } function() payable external { userBalances[msg.sender] += msg.value; } function transferToOtherContr() public { otherContr.transfer(address(this).balance); } } contract Subm { function() payable external { // Do something with the sent Ethers } }
這樣,無論發送到什麼乙太幣
Reg
都會記錄在一個名為userBalances
. 請注意,此記錄保存純粹是可選的,如果您需要,則出於內部原因。然後還有另一個函式transferToOtherContr
,它只是將合約中的所有乙太幣發送到另一個合約otherContr
。合約otherContr (Subm)
需要創建合約Reg
,所以你可以在建構子中給出它的合約地址。