方便地发送多笔交易



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

我们希望实施一种解决方案,允许用户一键批准多笔交易。我尝试过使用 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);            
}
}
}

最新更新