Ethereum 以太坊/Solidity新手:方便地发送多笔交易

Ethereum 以太坊/Solidity新手:方便地发送多笔交易,ethereum,solidity,web3,Ethereum,Solidity,Web3,坚固性新手问题: 我需要允许用户将CSV上传到基于以太坊的令牌(专用网络)。CSV可能包括数百行,甚至数千行。目前,用户必须批准每个单独的交易(例如:通过MetaMask),这意味着每次上传可能需要数百次,有时需要数千次批准点击 我们希望实现一种解决方案,允许用户只需单击一下即可批准多个事务。我尝试过使用createBatch/executeBatch,但至少在Metamask中,它仍然要求我独立批准每一行 那么,这方面的标准做法是什么?有吗?请注意: 我们在一个私人网络上运行,汽油价格不是一

坚固性新手问题:

我需要允许用户将CSV上传到基于以太坊的令牌(专用网络)。CSV可能包括数百行,甚至数千行。目前,用户必须批准每个单独的交易(例如:通过MetaMask),这意味着每次上传可能需要数百次,有时需要数千次批准点击

我们希望实现一种解决方案,允许用户只需单击一下即可批准多个事务。我尝试过使用createBatch/executeBatch,但至少在Metamask中,它仍然要求我独立批准每一行

那么,这方面的标准做法是什么?有吗?请注意:

  • 我们在一个私人网络上运行,汽油价格不是一个大问题
  • 我们意识到,将整个CSV作为单个事务上传是有争议的。我们不希望这样做,这既是为了可搜索性,也是为了与非CSV数据的一致性,其中大多数数据将以每行1个事务的形式上传

任何想法都值得欣赏

你可以这样做。虽然这个膨胀不是必需的。 您不必将它们存储在数组中,只需为csv的每一行调用(address).transfer(value),并部署智能合约来发送以太。 请注意,一次通话只能使用100次转接,否则您可能会遇到blockgaslimit

pragma solidity ^0.4.24;


contract SendBCF {
    address public owner;

    struct OldToken {
        uint256 value;
        address member;
    }

    event FundsReceived(uint256 amount);

    event PaymentSent(address addr, uint256 amount);

    OldToken[] public oldTokenList;

    constructor() public {
        owner = msg.sender;
    }

    function () public payable onlyOwner {
        /* Determine how much to pay each shareholder. */
        emit FundsReceived(msg.value);
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    function send2() public {
        oldTokenList.push(OldToken({ value:120000000000000000, member:0x6Dc44076Ee3E3fAdC3DF35fF047eA5E5D59B2Caa}));
        oldTokenList.push(OldToken({ value:120000000000000000, member:0x4a3e34cE7E79c47638c9053A776127271a1fFfe9}));
        oldTokenList.push(OldToken({ value:120000000000000000, member:0xeE088601eA16C61974dD737Ca742342D6D8a3271}));
        oldTokenList.push(OldToken({ value:120000000000000000, member:0xDf1D8265EA5E858322e1fd1b67f2D4AC63A31FC3}));
        oldTokenList.push(OldToken({ value:120000000000000000, member:0xa9DE9B27958bd66259368376FCca53fe2A12dd9D}));
    }

    function kill() public onlyOwner {
        require(msg.sender == owner);
        selfdestruct(owner);
    }

    function sendPayment() public {
        for (uint256 i = 0; i < oldTokenList.length; i++) {
            oldTokenList[i].member.transfer(oldTokenList[i].value);
            emit PaymentSent(oldTokenList[i].member, oldTokenList[i].value);            
        }
    }
}
pragma-solidity^0.4.24;
合同发送BCF{
向公众所有人致辞;
结构OldToken{
uint256值;
向会员致辞;
}
收到的活动资金(uint256金额);
已发送事件付款(地址地址,uint256金额);
OldToken[]公共oldTokenList;
构造函数()公共{
所有者=msg.sender;
}
函数()仅限公共支付所有者{
/*确定向每位股东支付多少*/
接收到的发射资金(消息值);
}
仅修改器所有者{
要求(msg.sender==所有者);
_;
}
函数send2()公共{
push(OldToken({值:120000000000000000,成员:0x6Dc44076Ee3E3fAdC3DF35fF047eA5E5D59B2Caa}));
push(OldToken({value:120000000000000000,成员:0x4a3e34cE7E79c47638c9053A776127271a1fFfe9}));
push(OldToken({值:120000000000000000,成员:0xeE088601eA16C61974dD737Ca742342D6D8a3271}));
push(OldToken({value:120000000000000000,成员:0xDf1D8265EA5E858322e1fd1b67f2D4AC63A31FC3});
push(OldToken({值:120000000000000000,成员:0xA9DE9B27958BD66259368376FCCA53FE2A12AD9D}));
}
函数kill()仅限公共所有者{
要求(msg.sender==所有者);
自毁(所有者);
}
函数sendPayment()public{
对于(uint256 i=0;i