Wallet-Transfer
如何將新代幣轉讓給所有擁有舊代幣的人?
我是舊智能合約的所有者:
https://etherscan.io/token/0x73de68dxxxxxxx
現在我創建了一個新的智能合約:
https://etherscan.io/address/0xd4c04exxxxxxx
如何將新代幣轉讓給所有擁有舊代幣的人?
願大家幫助我。
- 通知您的代幣持有者您將在哪個區塊拍攝快照。
- 在該處刮取 eth 區塊鏈,阻止您的所有代幣轉移,以建立一個本地地址及其數量的數據庫。
- 執行本地測試以確保您的地址與餘額的總和等於您的
totalSupply
- 執行像https://rstormsf.github.io/multisender/#/這樣的工具來分發你的新令牌
- 通知所有交易所將您的舊代幣合約下架,或者如果您可以控制它,則禁用轉移或銷毀所有代幣。
您可以使用@rstormsf 的方法,也可以使用智能合約。
// ------------------------------------------------------------------------- --- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // You can get a standard ownable contract here: https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol contract ClaimTokens is Ownable { ERC20Interface old; ERC20Interface new; mapping (address -> bool) hasRegistered; address[] registeredParticipants; function ClaimTokens() Ownable() { old = new ERC20Interface(0x73de68d64b5d9b2108fdf76a394f76e16a88ceb3); new = new ERC20Interface(0xd4c04e5099f62632a0861ec68fd9f58e6cd0cb74); } function registerForAirdrop() public { require(!hasRegistered[msg.sender]) hasRegistered[msg.sender] = true; registeredParticipants.push(msg.sender) } function airdrop() onlyOwner { for(uint i = 0; i < registeredParticipants.length; i++) { uint balance = old.balanceOf(registedParticipants[i]) new.transfer(registeredParticipants[i], balance) } // Add burn here? } }
這將創建舊令牌和新令牌的介面,並創建地址是否已註冊和已註冊地址數組的映射(具有兩個資料結構可節省計算時間和氣體)。
它是在 ClaimTokens() 下啟動的,它只是將介面設置為正確的合約。
然後,使用者可以通過呼叫 registerForAirdrop() 來註冊空投。
然後,當空投發生時(僅由所有者呼叫 airdrop()),它會遍歷所有註冊的參與者,檢查他們的餘額,並轉移新的代幣。如果新的 ERC20 代幣具有 burn() 函式,那麼您應該讓智能合約燒掉所有未在空投中註冊的代幣。
這種方法的好處是它更加去中心化並且不需要你花費那麼多的gas。
希望這可以幫助!