Solidity

使用地址將資金從合約轉移到賬戶

  • January 20, 2019

我一直在嘗試將我的一份契約的全部資金轉移到一個特定的賬戶。但似乎沒有任何效果。

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,所以你可以在建構子中給出它的合約地址。

引用自:https://ethereum.stackexchange.com/questions/65804