執行代幣空投的最具成本效益的方式
我正在做一個項目,我創建一個代幣並嘗試將它空投給盡可能多的人。挑戰在於找出最具成本效益的方法來做到這一點。
我有兩個選擇:
- 創建一個“Token Vault”類型的智能合約,向其發送代幣並將一組地址和余額傳遞給某個函式。
- 只需在部署前在我的令牌程式碼中創建一個新函式,該函式類似於批准(),但有一個地址數組作為輸入。然後讓人們執行 transferFrom() 。
如您所知,這兩個選項非常相似,我主要擔心的是它們都需要我傳遞一組地址。據我了解,如果我想傳遞 1000 個地址的數組,我將花費 21000 個氣體 + 1000 個 SSTORE 操作(20000 個氣體 id _spender 不在映射中)總計20021000 個氣體(如果確實有可能一次通過 1000 個並且不分批)。計算此時的成本給我們 0.02 ETH 或 16.297 美元,但這只是因為天然氣價格為 1 wei atm。
好吧,想像一下,如果我對數千人進行了一次成功的空投活動,並且由於另一個 CryptoKitties 讓我們的平均 gas 價格在幾週內保持在 20 到 30 wei 之間,網路將會變得擁擠。是的,部署此類合約的價格將飆升至 0.5 ETH 左右。
這不是一個商業項目,所以進行眾籌(與我計劃做的相比,這將花費我很少的錢)是不可能的。該項目的主要目標是讓普通的非技術/加密技術人員熟悉乙太坊平台,並讓他們第一次做簡單的事情:比如創建錢包、購買 ETH、與智能合約互動等……
你可能會問,為什麼在這種情況下我不創建一個人們可以自己鑄造的可鑄造代幣,在我部署我的代幣合約後實際上花費了我 0 eth?好吧,我相信為了讓更多人受益,令牌應該具有某種形式的假設價值,否則,沒有人會經歷甚至設置錢包並用 ETH 載入它的鬥爭。當代幣可以自由鑄造時,即使每個地址有代幣限制,也不會阻止一些人通過創建多個帳戶並為自己積累大量資金來濫用它。換句話說,我希望有能力調節總供應量,這樣人們就不能濫用空投過程並使代幣變得一文不值(無論如何,
我相信應該有一種方法可以在沒有昂貴的地址數組的情況下做到這一點。但是,由於我有零到零的程式經驗,所以並不那麼明顯。也許有一種方法可以使用我可以在人們之間分發的一些唯一程式碼,他們必須輸入這些程式碼才能解鎖他們的空投代幣?但是我必須以一種不需要我傳遞一系列這樣的程式碼來記住在契約中的方式來做這件事。而且,例如,這些程式碼將滿足某些數學函式,但對於除我之外的任何人來說都很難或不可能生成。
我會很感激你的意見!感謝您閱讀並為這麼長的文章感到抱歉!
TLDR;
尋找公平分配代幣的最佳成本效益方式,而無需將一系列地址傳遞給代幣合約。
所以這個選項需要一些不錯的設置,但它確實是最便宜的。你可以通過向智能合約送出大量代幣來創建各種支付渠道。您可以設置智能合約,以便只有獲得許可的地址才能請求空投。為了請求空投,他們必須送出由您簽名的消息。
這將非常便宜,因為每個使用者都將支付自己發送硬幣的交易成本。
範例(更新):
每個使用者都會收到一條特定的消息
h
,該消息是您已簽名的\x19Ethereum Signed Message\n32
+keccak256('user-address', 'airdrop-value')
以及簽名部分的組合vrs
。當他們發佈到您的合約以提取資金時,他們會提供必要的簽名數據(h、v、r、s)以及構成消息的值,h
以便他們可以驗證給他們的唯一消息,但也可以驗證它是由你簽名的。我最近不得不自己解決這個問題,並製作了一個用於簽署數據和提取必要部分的快速 python 程序:
https://github.com/postables/Postables-Payment-Channel/blob/develop/python/signer.py