Solidity
我正在嘗試將乙太幣從後端發送到地址列表
下面是契約中的幾行,我基本上是在嘗試將一些乙太幣發送到一組地址。現在,什麼時候可以通過將“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);
我在控制台中執行程式碼,但得到下面的輸出
為什麼不在傳輸方法中傳遞數組而不是單個地址的值。它將節省氣體量。
只需
uint value
從seneth
下面的函式中刪除,因為您的程式碼說您只是將 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)) }