📜 [專欄新文章] Gas Efficient Card Drawing in Solidity
✍️ Ping Chen
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Assign random numbers as the index of newly minted NFTs
Scenario
The fun of generative art NFT projects depends on randomness. The industry standard is “blind box”, where both the images’ serial number and the NFTs’ index are predetermined but will be shifted randomly when the selling period ends. (They call it “reveal”) This approach effectively solves the randomness issue. However, it also requires buyers to wait until the campaign terminates. What if buyers want to know the exact card right away? We’ll need a reliable onchain card drawing solution.
The creator of Astrogator🐊 isn’t a fan of blind boxes; instead, it thinks unpacking cards right after purchase is more interesting.
Spec
When initializing this NFT contract, the creator will determine the total supply of it. And there will be an iterable function that is randomly picking a number from the remaining pool. The number must be in range and must not collide with any existing ones.
Our top priority is accessibility/gas efficiency. Given that gas cost on Ethereum is damn high nowadays, we need an elegant algorithm to control gas expanse at an acceptable range.
Achieving robust randomness isn’t the primary goal here. We assume there’s no strong financial incentive to cheat, so the RNG isn’t specified. Implementers can bring their own source of randomness that they think is good enough.
Implementation
Overview
The implementation is pretty short and straightforward. Imagine there’s an array that contains all remaining(unsold) cards. When drawIndex() is called, it generates a (uniform) random seed to draw a card from the array, shortens the array, and returns the selected card.
Algorithm
Drawing X cards from a deck with the same X amount of cards is equal to shuffling the deck and dealing them sequentially. It’s not a surprise that our algorithm is similar to random shuffling, and the only difference is turning that classic algo into an interactive version.
A typical random shuffle looks like this: for an array with N elements, you randomly pick a number i in (0,N), swap array[0] and array[i], then choose another number i in (1,N), swap array[1] and array[i], and so on. Eventually, you’ll get a mathematically random array in O(N) time.
So, the concept of our random card dealing is the same. When a user mints a new card, the smart contract picks a number in the array as NFT index, then grabs a number from the tail to fill the vacancy, in order to keep the array continuous.
Tweak
Furthermore, as long as the space of the NFT index is known, we don’t need to declare/initialize an array(which is super gas-intensive). Instead, assume there’s such an array that the n-th element is n, we don’t actually initialize it (so it is an array only contains “0”) until the rule is broken.
For the convenience of explanation, let’s call that mapping cache. If cache[i] is empty, it should be interpreted as i instead of 0. On the other hand, when a number is chosen and used, we’ll need to fill it up with another unused number. An intuitive method is to pick a number from the end of the array, since the length of the array is going to decrease by 1.
By doing so, the gas cost in the worst-case scenario is bound to be constant.
Performance and limitation
Comparing with the normal ascending index NFT minting, our random NFT implementation requires two extra SSTORE and one extra SLOAD, which cost 12600 ~ 27600 (5000+20000+2600) excess gas per token minted.
Theoretically, any instantly generated onchain random number is vulnerable. We can restrict contract interaction to mitigate risk. The mitigation is far from perfect, but it is the tradeoff that we have to accept.
ping.eth
Gas Efficient Card Drawing in Solidity was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有587部Youtube影片,追蹤數超過68萬的網紅志銘與狸貓,也在其Youtube影片中提到,加入會員按鈕▶ https://reurl.cc/k5XbNK 訂閱我們吧▶https://goo.gl/9YmnKW --- 志銘與狸貓: 「這是瑪瑪信箱,蒐集阿瑪子民給奴才或後宮貓咪們的信件,可以分享對我們想說的話、對貓咪想說的話、自家貓咪的故事、心情瑣事等等……因為時間比較長,有興趣的人可...
「fun taipei」的推薦目錄:
fun taipei 在 香香之小資旅遊日記 Facebook 的最佳貼文
hotel royal-nikko taipei 台北老爺大酒店 ホテル.ロイヤル.ニッコー.タイペイ
【老爺巴菲特•九月快閃】 限時特惠
• 專案內容: 一泊二食 3998元起
• 入住期間: 2021/10/1-2021/11/30
• 房型房價: 豪華客房$3,988起 *房型免費升等尊爵客房*(週五、週六、週日入住,每晚加價300元)
每房享加碼 ❶ 免費升等至尊爵客房 ❷ 客房迎賓紅酒禮乙瓶。
本活動為台北老爺官網 ❝線上訂房❞限定,電話訂房恕不適用 ◉
⏰ 活動詳情搶先看>> https://bit.ly/3jJi6GG
關西六福莊 Leofoo Resort Guanshi
9月 #平日限定 👉避開假日fun心遊❣️$4,599+10%
【原野輕旅行住房專案】🈶三重好康▶https://bit.ly/3zHu2OR
✅加價升等房型享特惠價
✅加贈一位孩童(12歲以下)免費入住(不含專案內容)
✅入住前一天18:00前🉐免費取消訂房
平日周一~週四入住
🔹訂房洽詢專線 02-6616-6521
▍天成飯店集團明星三不缺一住房專案 ▍
瑞穗天合國際觀光酒店 Grand Cosmos Resort
入住期間~11/30..瑞穗~12/30
📣超值4晚住宿券共9999元
✅可入住台北天成大飯店、台北花園大酒店、天成文旅-華山町雙人房含早餐+平日瑞穗天合國際觀光酒店城堡精緻客房一泊二食
🔍詳細專案內容:https://bit.ly/GC_9999
💛線上購買住宿券:https://cosmosgroup.pse.is/3m46qw
📱聯合訂房中心:02-8978-6688
fun taipei 在 行銷筆記 Facebook 的最讚貼文
今天到 Impact Hub Taipei / 社會影響力製造所為由 慈濟基金會辦理的「Fun大視野 想向未來- 青年創新推動計畫」團隊講行銷通路培力課程,看到每個社會創新團隊們為精神理念努力,由衷佩服每個團隊的堅持,為社會問題付諸改變,想跟大家分享青年創新推動計畫的團隊們:
TriBake 樂芽
協助身心障礙者在餐飲烘焙領域就業,當快樂的播種者,改變愛心消費的型態,讓購買行為的同理成分大於同情的付出。如果有企業禮盒、公益喜餅、彌月禮盒、蛋糕甜點等需求可以找樂芽~
-
Lis情境科學教材
讓孩子們在遊戲與科學實驗中,練習像科學家相似的思考問題並解決,實踐寓教於樂模式,最近有在募資,連結放留言,若家有 9-13 歲孩子,想讓孩子培養獨立思考能力,可以考慮科學實驗解謎遊戲喔!
-
Story Wear
第一次聽到Story Wear是透過唐鳳政委,結合環保跟時尚,以零廢棄時尚為核心,回收牛仔褲與紡織庫存布料,和在地弱勢家庭合作生產,讓時尚能永續發展,最近有募資為海洋發聲故事衣,將回捐齊柏林基金會,持續推廣環境教育,打造永續正向環境,募資連結一樣放留言~
-
奉茶行動:最帥氣的喝水方式
家裡對面剛好就有奉茶站,已關注一陣子。奉茶連結供水及找水的人,讓奉茶文化變的更有溫度,奉茶是一款APP,在APP中可以找水站、記錄自我飲水量,完成任務累積點數,即可兌換友善商品折價券,讓自帶環保杯的人透過地圖找到奉茶站,訴求減少塑膠瓶產生,建議大家都可以下載APP,自己帶瓶子找奉茶點裝水喝,減少碳排放。
-
幸福良食
由一群年齡平均超過70歲農友們與返鄉科技青農組成,建立的青銀共農模式,讓老農安心養老,注入年輕活力,接續愛護土地、友善耕作的方式回饋大自然,從產地到餐桌都能安心享用,喜歡黑豆茶、黑豆乳的朋友們,推薦幸福良食!
-
巨獸綠色科技
傳統廚餘處理方式大部分都送到焚化爐焚燒或掩埋,因之產生很多碳排放。黑水虻是一種腐生性的昆蟲,以廚餘等腐爛有機物為食,號稱地表最強清道夫,巨獸首創黑水虻生物處理系統,解決剩食、廚餘、豆渣等問題,建立綠色友善循環,邁向零碳排環境。
-
Design for Change, Taiwan - DFC 臺灣
DFC,Design for Change,鼓勵孩子透過四步驟:感受(Feel)、想像 (Imagine)、實踐(DO)、分享(Share)培養孩子勇敢精神,讓孩子在面對多變的環境,發現問題、想像解決辦法、執行實踐計畫、擴大分享影響力,培養孩子二心二力(同理心、自信心、創造力與行動力)勇於嘗試並活用知識。如果你也認同,想翻轉教育關係,讓設計思考融入教育環境,省下一次治裝費,就可以幫助一位教師在100位孩子種下改變環境的種子,一起用行動贊助支持吧!
-
小紅帽Little Red Hood
「月經來不能進廟裡!?」以月經權益為主題,執行一場以月經為名的運動,消除月經汙名化、終結月經貧窮等議題,提供弱勢青少女生理用品,讓正值經期的妳,不再為月經所困,打造月經友善環境,贊助支持小紅帽,連結放留言。
-
小人1號:南澳小孩的圖書遊樂場
在宜蘭南澳,有一處圖書遊樂場,為小孩安排免費課程,木工、畫畫、烘焙等技職教育,讓孩子的生活不只有教科書,投注偏鄉教育,讓教育不分都市偏鄉,在教育之前,每位孩子都享有平等權益。
-
好盒器
透過便利的環保杯等容器租借服務,透過APP或LINE官方帳號在店鋪租借容器,擴大至美食外送平台、夜市等,採用甲地租、乙地還得模式,一條龍解決環保容器攜帶不便、租借、清洗不便的問題,加入官方帳號,一起推動一次性容器減量,在購買的流程中,也減少垃圾減量,達到零廢棄的目標。
-
謝謝你看到這裡,如果有想要贊助支持的團隊,我會把每個介紹的連結放在留言處,一起支持青年創新推動計畫!
fun taipei 在 志銘與狸貓 Youtube 的精選貼文
加入會員按鈕▶ https://reurl.cc/k5XbNK
訂閱我們吧▶https://goo.gl/9YmnKW
---
志銘與狸貓:
「這是瑪瑪信箱,蒐集阿瑪子民給奴才或後宮貓咪們的信件,可以分享對我們想說的話、對貓咪想說的話、自家貓咪的故事、心情瑣事等等……因為時間比較長,有興趣的人可以當成錄音檔或非專業廣播來聽聽喔,近期都會在Youtube直播開信喔!」
瑪瑪信箱108:2021/09/14
1285 錢彥澄
1286 阿惠
1287 紫沁
1288 JC
1289 麵包超人
1290 Ru
1291 雯萱
感謝今日贊助:
喵喵我是fumean fans
招弟鐵粉
招弟鐵粉
miss dada#
Ducky
Jsm_use_ Jekyll
傅曉雅
盈盈
yinn 芸蕙yuyinhui
招弟鐵粉
本集信件寄件者編號與時間點:
0:00「閒聊」
1:42「看戲巧遇以前的好友」雯萱 1291
13:07「犀牛盾聯名商品介紹」
22:45「插畫版桌曆商品介紹」
33:10「Q&A時間」
-
【瑪瑪信箱,徵件企劃】https://goo.gl/gjt676
《信封上的收件資訊》重要!
22099 新北市板橋莒光郵局第38號信箱
許志銘 收(一定要寫許志銘收,不然會被退信喔!)
P.O.BOX 38 Banqiao Juguang
New Taipei City 22099
Taiwan (R.O.C)
【瑪瑪信箱各集來信名單】https://goo.gl/UZGXp1
阿瑪的Line:@sbq7719e (一定要包含@)
-
【近期活動】
《黃阿瑪終於出門了?!要跑不跑的路跑》5K FUN RUN
📍台北場
📍高雄場
⚠️因應疫情升溫,為了維護參與跑者的安全、避免疫情傳播風險,路跑活動取消舉辦。
詳情&退費問題,請看【黃阿瑪終於出門了?! 要跑不跑的路跑】粉絲專頁
▶ https://www.facebook.com/ama5krun
《阿瑪x高雄渡輪》
即日起到2021年12月31日止
■旗津鼓山航線:早上05:00至翌日凌晨02:00
■棧貳庫旗津航線:假日與國定假日,下午13:00至晚上19:30
-
第七本年度著作《等我回家的你》
台灣(瑪瑪商行):https://reurl.cc/Kxxa5n
(瑪瑪商行 獨家贈送「後宮出遊趣插畫明信片一張,隨機出貨不挑款」其他通路沒有贈送喔~)
馬新地區:https://reurl.cc/bzzGvr
-
首本圖文漫畫書《貓咪超有事》
台灣:https://reurl.cc/q8zKeg
馬新地區:https://is.gd/x5xwc5
---
【阿瑪 Line貼圖&主題】
《最新上架》https://reurl.cc/Nr24LQ
《更多貼圖》https://reurl.cc/4RY6L2
【阿瑪官網-瑪瑪商行】
▶ https://www.fumeanstore.com/
《最新商品》純棉短T、拼圖、鑰匙圈、珪藻土地墊
fun taipei 在 志銘與狸貓 Youtube 的最佳解答
加入會員按鈕▶ https://reurl.cc/k5XbNK
訂閱我們吧▶https://goo.gl/9YmnKW
---
志銘與狸貓:
「這是瑪瑪信箱,蒐集阿瑪子民給奴才或後宮貓咪們的信件,可以分享對我們想說的話、對貓咪想說的話、自家貓咪的故事、心情瑣事等等……因為時間比較長,有興趣的人可以當成錄音檔或非專業廣播來聽聽喔,近期都會在Youtube直播開信喔!」
瑪瑪信箱108:2021/09/14
1285 錢彥澄
1286 阿惠
1287 紫沁
1288 JC
1289 麵包超人
1290 Ru
1291 雯萱
感謝今日贊助:
喵喵我是fumean fans
招弟鐵粉
招弟鐵粉
miss dada#
Ducky
Jsm_use_ Jekyll
傅曉雅
盈盈
yinn 芸蕙yuyinhui
招弟鐵粉
本集信件寄件者編號與時間點:
0:00「閒聊」
11:41「可怕的夢中夢」錢彥澄 1285
22:56「人生中的轉捩點」阿惠 1286
30:28「慢性病併發更多疾病」紫沁 1287
38:44「研究生的日常」JC 1288
59:45「禁止辨公室戀情的公司」麵包超人 1289
1:07:45「準備國考的壓力」Ru 1290
-
【瑪瑪信箱,徵件企劃】https://goo.gl/gjt676
《信封上的收件資訊》重要!
22099 新北市板橋莒光郵局第38號信箱
許志銘 收(一定要寫許志銘收,不然會被退信喔!)
P.O.BOX 38 Banqiao Juguang
New Taipei City 22099
Taiwan (R.O.C)
【瑪瑪信箱各集來信名單】https://goo.gl/UZGXp1
阿瑪的Line:@sbq7719e (一定要包含@)
-
【近期活動】
《黃阿瑪終於出門了?!要跑不跑的路跑》5K FUN RUN
📍台北場
📍高雄場
⚠️因應疫情升溫,為了維護參與跑者的安全、避免疫情傳播風險,路跑活動取消舉辦。
詳情&退費問題,請看【黃阿瑪終於出門了?! 要跑不跑的路跑】粉絲專頁
▶ https://www.facebook.com/ama5krun
《阿瑪x高雄渡輪》
即日起到2021年12月31日止
■旗津鼓山航線:早上05:00至翌日凌晨02:00
■棧貳庫旗津航線:假日與國定假日,下午13:00至晚上19:30
-
第七本年度著作《等我回家的你》
台灣(瑪瑪商行):https://reurl.cc/Kxxa5n
(瑪瑪商行 獨家贈送「後宮出遊趣插畫明信片一張,隨機出貨不挑款」其他通路沒有贈送喔~)
馬新地區:https://reurl.cc/bzzGvr
-
首本圖文漫畫書《貓咪超有事》
台灣:https://reurl.cc/q8zKeg
馬新地區:https://is.gd/x5xwc5
---
【阿瑪 Line貼圖&主題】
《最新上架》https://reurl.cc/Nr24LQ
《更多貼圖》https://reurl.cc/4RY6L2
【阿瑪官網-瑪瑪商行】
▶ https://www.fumeanstore.com/
《最新商品》純棉短T、拼圖、鑰匙圈、珪藻土地墊
fun taipei 在 志銘與狸貓 Youtube 的最讚貼文
加入會員按鈕▶ https://reurl.cc/k5XbNK
訂閱我們吧▶https://goo.gl/9YmnKW
---
志銘與狸貓:
「這是瑪瑪信箱,蒐集阿瑪子民給奴才或後宮貓咪們的信件,可以分享對我們想說的話、對貓咪想說的話、自家貓咪的故事、心情瑣事等等……因為時間比較長,有興趣的人可以當成錄音檔或非專業廣播來聽聽喔,近期都會在Youtube直播開信喔!」
瑪瑪信箱107:2021/9/7
1276 隱同學
1277 葉芯瑜
1278 瑪民
1279 小F(香港)
1280 莎莎(倫敦)
1281 miss dada(香港)
1282 陳雯萱
1283 錢彥澄
1284 葉芯瑜
感謝今日贊助:
喵喵我是fumean fans
芽芽Vincci
noitamiced
世界女
白萩
miss dada#
傅曉雅
徐瑀希
本集信件寄件者編號與時間點:
0:00「閒聊」
4:19「瑪瑪2022年三件組抽獎-IG留言」
25:14「瑪瑪2022年三件組抽獎-瑪民認證」
37:52「短暫的超商上班經驗」隱同學 1276
1:05:08「留在韓國過年」葉芯瑜 1277
1:08:43「手繪後宮的8隻貓」瑪民 1278
1:11:26「分享喜歡的Vtuber」小F 1279
1:16:56「英國的防疫生活」莎莎 1280
1:25:55「成為瑪民的經過」miss dada 1281
1:36:43「參與台中巡迴店活動」陳雯萱 1282
1:43:09「在高速公路上車子壞掉」錢彥澄 1283
2:04:21「韓語中的敬語和平語」葉芯瑜 1284
2:07:50「阿瑪聯名衛生紙介紹」
2:17:53「Q&A時間」
-
【瑪瑪信箱,徵件企劃】https://goo.gl/gjt676
《信封上的收件資訊》重要!
22099 新北市板橋莒光郵局第38號信箱
許志銘 收(一定要寫許志銘收,不然會被退信喔!)
P.O.BOX 38 Banqiao Juguang
New Taipei City 22099
Taiwan (R.O.C)
【瑪瑪信箱各集來信名單】https://goo.gl/UZGXp1
阿瑪的Line:@sbq7719e (一定要包含@)
-
《2022年曆組》限時預購開跑了!
【預購只到9/6,結束後就絕版囉!】
台灣(瑪瑪商行):https://reurl.cc/YOxzla
新加坡、馬來西亞:https://reurl.cc/3a2dyL
香港、澳門:https://reurl.cc/lRxEG9
其他地區:https://reurl.cc/YOxzla
-
【限時預購】
到2021/9/6(一)23:59 截止
(網路限定,結束後不會在書店及其他實體店販售喔!)
-
【付款方式】
台灣(瑪瑪商行):超商代碼繳款、信用卡、ATM轉帳
海外:請參閱各大網路書店結帳方式
*中國、香港、澳門僅提供順豐到付,無城邦門市取貨。
*中國可派送地區將依照順豐公告為準。
-
【出貨時間!注意!】
台灣預計 2021年10月下旬開始出貨(依據訂單先後順序)
香港預計 2021年11月上旬開始出貨(依據訂單先後順序)
新馬地區「空運直達」預計2021年10月下旬開始出貨(依據訂單先後順序)
新馬地區「海運」預計2021年11月下旬開始出貨(依據訂單先後順序)
其他地區 預計2021年11月中旬開始出貨(依據訂單先後順序)
-
【任何訂單、出貨及運費問題請聯繫】
瑪瑪商行官網:請透過「賣場的聊聊功能」私訊詢問,會有專人解答喔!
海外客服聯繫信箱:
新加坡、馬來西亞:services@cite.my
香港、澳門:citebkshop@biznetvigator.com
其他地區:請透過瑪瑪商行官網「賣場的聊聊功能」私訊詢問。
-
【近期活動】
《黃阿瑪終於出門了?!要跑不跑的路跑》5K FUN RUN
📍台北場
📍高雄場
⚠️因應疫情升溫,為了維護參與跑者的安全、避免疫情傳播風險,路跑活動延期舉辦。
主辦單位正與場地主管機關協調秋季活動場地檔期,並同步公告延期的配套措施。
詳情請看【黃阿瑪終於出門了?! 要跑不跑的路跑】粉絲專頁
▶ https://www.facebook.com/ama5krun
《阿瑪x高雄渡輪》
即日起到2021年8月30日止
■旗津鼓山航線:早上05:00至翌日凌晨02:00
■棧貳庫旗津航線:假日與國定假日,下午13:00至晚上19:30
-
第七本年度著作《等我回家的你》
台灣(瑪瑪商行):https://reurl.cc/Kxxa5n
(瑪瑪商行 獨家贈送「後宮出遊趣插畫明信片一張,隨機出貨不挑款」其他通路沒有贈送喔~)
馬新地區:https://reurl.cc/bzzGvr
-
首本圖文漫畫書《貓咪超有事》
台灣:https://reurl.cc/q8zKeg
馬新地區:https://is.gd/x5xwc5
---
【阿瑪 Line貼圖&主題】
《最新上架》https://reurl.cc/Nr24LQ
《更多貼圖》https://reurl.cc/4RY6L2
【阿瑪官網-瑪瑪商行】
▶ https://www.fumeanstore.com/
《最新商品》純棉短T、拼圖、鑰匙圈、珪藻土地墊
fun taipei 在 Fun Taipei Hostel - Home | Facebook 的推薦與評價
Fun Taipei Hostel, Taipei, Taiwan. 3400 likes · 1 talking about this · 454 were here. 樂趣台北共居。床位月租及年租。 ... <看更多>