我用Mist ()来尝试这个。
创建了一个与给定的这里相同的合同。为了快速理解,我把它贴在下面。我从创建令牌的同一个所有者创建了这个契约。
pragma solidity ^0.4.16;
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
*/
contract Ownable {
address public owner;
function Ownable() {
owner = msg.sender;
}
modifier onlyOwner() {
if (msg.sender != owner) {
revert();
}
_;
}
function transferOwnership(address newOwner) onlyOwner {
if (newOwner != address(0)) {
owner = newOwner;
}
}
}
contract ERC20Basic {
uint public totalSupply;
function balanceOf(address who) constant returns (uint);
function transfer(address to, uint value);
event Transfer(address indexed from, address indexed to, uint value);
}
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) constant returns (uint);
function transferFrom(address from, address to, uint value);
function approve(address spender, uint value);
event Approval(address indexed owner, address indexed spender, uint value);
}
contract Airdropper is Ownable {
function multisend(address _tokenAddr, address[] dests, uint256[] values)
onlyOwner
returns (uint256) {
uint256 i = 0;
while (i < dests.length) {
ERC20(_tokenAddr).transfer(dests[i], values[i]);
i += 1;
}
return(i);
}
}已经按照下面的图像执行了Multisend函数。

函数将被执行,但似乎没有一个地址已经接收到令牌。事务哈希为0xeb759ea8f6c923874adfc6961555733b36982f5d770dd24bf85456b534d2e2f9。
我遗漏了什么?任何帮助都是非常感谢的。
发布于 2017-11-22 07:46:22
这个答案适用于那些以前创建令牌的人,他们希望在令牌中添加空投功能,并愿意通过Mist执行drop。它可能也能用其他方法,但没有经过测试。
不知道为什么上述方法(如问题中所述)不起作用。然而,下面的一个为我工作。我把它作为答案,这样对有类似问题的人是有帮助的。这个在rinkeby工作到最多174个阵列项目,消耗了3991732气体。
备注
pragma solidity ^0.4.16;
contract Ownable {
address public owner;
function Ownable() {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
function transferOwnership(address newOwner) onlyOwner {
require(newOwner != address(0));
owner = newOwner;
}
}
interface Token {
function transfer(address _to, uint256 _value) returns (bool);
function balanceOf(address _owner) constant returns (uint256 balance);
}
contract AirDrop is Ownable {
Token token;
event TransferredToken(address indexed to, uint256 value);
event FailedTransfer(address indexed to, uint256 value);
modifier whenDropIsActive() {
assert(isActive());
_;
}
function AirDrop () {
address _tokenAddr = 0x; //here pass address of your token
token = Token(_tokenAddr);
}
function isActive() constant returns (bool) {
return (
tokensAvailable() > 0 // Tokens must be available to send
);
}
//below function can be used when you want to send every recipeint with different number of tokens
function sendTokens(address[] dests, uint256[] values) whenDropIsActive onlyOwner external {
uint256 i = 0;
while (i < dests.length) {
uint256 toSend = values[i] * 10**18;
sendInternally(dests[i] , toSend, values[i]);
i++;
}
}
// this function can be used when you want to send same number of tokens to all the recipients
function sendTokensSingleValue(address[] dests, uint256 value) whenDropIsActive onlyOwner external {
uint256 i = 0;
uint256 toSend = value * 10**18;
while (i < dests.length) {
sendInternally(dests[i] , toSend, value);
i++;
}
}
function sendInternally(address recipient, uint256 tokensToSend, uint256 valueToPresent) internal {
if(recipient == address(0)) return;
if(tokensAvailable() >= tokensToSend) {
token.transfer(recipient, tokensToSend);
TransferredToken(recipient, valueToPresent);
} else {
FailedTransfer(recipient, valueToPresent);
}
}
function tokensAvailable() constant returns (uint256) {
return token.balanceOf(this);
}
function destroy() onlyOwner {
uint256 balance = tokensAvailable();
require (balance > 0);
token.transfer(owner, balance);
selfdestruct(owner);
}
}发布于 2017-11-20 12:26:19
我想你应该把地址写成双引号。
"0xaa..","0xbb.."如果您查看以太扫描上链接事务底部的输入数据,您将看到输入数据包含"64“、"c8”等,这是您的十六进制值,但是地址丢失了。
更新:抱歉,这可能是Mist中的ui错误,请看这个问题(仍然是打开的):https://github.com/ethereum/mist/issues/3054 -根据答复,它应该与引号一起工作,但显然不是。
https://ethereum.stackexchange.com/questions/31185
复制相似问题