Solidity

我正在嘗試將乙太幣從後端發送到地址列表

  • February 13, 2022

下面是契約中的幾行,我基本上是在嘗試將一些乙太幣發送到一組地址。現在,什麼時候可以通過將“value”替換為“msg.value”來以 remix solidity 執行此程式碼。但我正試圖從後端實現這一目標。

pragma solidity ^0.4.16;

contract init {
   address owner;
   address[] public userAddresses;
   function init() {
       owner = msg.sender;
   }

   function getaddresses(address rec) public {
       userAddresses.push(rec);
   } 

   function seneth(uint value) public {
       for (uint i = 0; i < userAddresses.length; i++) {
           userAddresses[i].transfer(value);
       }
   }
}

下面是我正在嘗試的程式碼

var txOptions = {
   nonce: web3.toHex(web3.eth.getTransactionCount(address)),
   gasLimit: web3.toHex(800000),
   gasPrice: web3.toHex(20000000000),
   to: contractAddress
}

var rawTx = txutils.functionTx(interface, 'seneth', [100000000000000], txOptions);
sendRaw(rawTx);

我在控制台中執行程式碼,但得到下面的輸出

附件是 etherscan 中的輸出

為什麼不在傳輸方法中傳遞數組而不是單個地址的值。它將節省氣體量。

只需uint valueseneth下面的函式中刪除,因為您的程式碼說您只是將 uint 數字傳輸到所有地址而不是發送msg.value(ethers).

智能合約的變化:

  function seneth () public{
       for (uint i=0; i<userAddresses.length; i++) {

                userAddresses[i].transfer(msg.value);

     }
   }

web3.js 程式碼的變化只是增加了價值部分:

var txOptions = {
   nonce: web3.toHex(web3.eth.getTransactionCount(address)),
   gasLimit: web3.toHex(800000),
   gasPrice: web3.toHex(20000000000),
   to: contractAddress
   value: web3.toHex(web3.toBigNumber(10000000000000000))
}

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