📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
同時也有25部Youtube影片,追蹤數超過193萬的網紅dP Art Drawing,也在其Youtube影片中提到,I drew and counted the dots in my drawing. It took me more than 7 days to mark 182336 and finish this drawing . I use click software to count the nu...
「number drawing」的推薦目錄:
- 關於number drawing 在 Taipei Ethereum Meetup Facebook 的最讚貼文
- 關於number drawing 在 AllRightsReserved Facebook 的最讚貼文
- 關於number drawing 在 AllRightsReserved Facebook 的最佳貼文
- 關於number drawing 在 dP Art Drawing Youtube 的最佳貼文
- 關於number drawing 在 MakeLearningFun Youtube 的最讚貼文
- 關於number drawing 在 MakeLearningFun Youtube 的最佳解答
- 關於number drawing 在 140 Number drawing ideas - Pinterest 的評價
- 關於number drawing 在 How to draw using Numbers 1-10 | numbers drawing for kids 的評價
- 關於number drawing 在 How to turn numbers into drawings - Number drawing 1 to 10 的評價
- 關於number drawing 在 How to draw pictures using numbers 1 to 10 - YouTube 的評價
- 關於number drawing 在 How To Draw A Monkey From Number 123 - YouTube 的評價
- 關於number drawing 在 Very easy !! Number drawing for kids 1-9 - YouTube 的評價
- 關於number drawing 在 Easy Drawing ! How To turn 100 Number into cute girl step by ... 的評價
- 關於number drawing 在 How to reduce the number of drawing calls to a large number ... 的評價
number drawing 在 AllRightsReserved Facebook 的最讚貼文
To celebrate Yusuke Hanai largest overseas solo exhibition in HK, we present to you “FACING THE CURRENT” limited figure, in collaboration with AllRightsReserved.
Now exclusively available on DDT STORE for online drawing.
“FACING THE CURRENT” limited figure
Edition of 500
Material : PU and stainless steel
Dimension: W11 inch
Printed signature and number under the boat
Packaged in wooden box with numbered certificate of authenticity
Enter Draw NOW on DDTStore.com
ENDS ON: 12 Aug 12am (EDT) / 12pm (HKT) / 1pm (JST)
Shipping begins from September 2021, subject to delay due to COVID-19.
【《FACING THE CURRENT》人偶雕塑 DDT Store接受網上抽籤登記】
為紀念花井祐介(Yusuke Hanai)歷年最大型海外個人展覽登陸香港,特別推出以《FACING THE CURRENT》巨型雕塑作藍本的《FACING THE CURRENT》11吋長人偶雕塑,於DDT Store以網上抽籤形式發售,登記時段為即時(香港時間8月9日早上11時)起至8月12日中午12時,中籤者將於香港時間8月12日收到電郵通知購買安排。
《FACING THE CURRENT》人偶雕塑
限量500枚
材質:PU樹脂 及 不鏽鋼
尺寸:長11吋
船底印有藝術家簽名及編號
附木箱包裝及獨立認證卡
售價:港元 11,700 / 美金 1500
- - -
Download ARR Authentication App on App Store or Google Play Store now to verify product authenticity.
立即於App Store或Google Play商店下載ARR認證應用程式,以認證商品真偽。
iOS: https://bit.ly/ARRios
Android: https://bit.ly/ARRandroid
#花井祐介 #YusukeHanai #AllRightsReserved #DDTStore #FACINGTHECURRENT
number drawing 在 AllRightsReserved Facebook 的最佳貼文
Our latest collaboration with Netflix and FACE Oka X “The Naked Director” Series: NICE DIRECTOR Vinyl Figure, will be exclusively available at DDT STORE for online drawing.
Enter draw on: DDTStore.com
From: 25 Jun 12am EDT / 12pm HKT / 1pm JST
To: 28 Jun 12am EDT / 12pm HKT / 1pm JST
NICE DIRECTOR Vinyl Figure
Dimensions: H7.5 inch
Edition of 624
Printed signature and number under feet
Certificated NFC chip of authenticity
Shipping begins from October 2021
Successful entrants will be notified via email by 28 Jun with purchase details.
Stay tuned for other collectibles of this collection!
【Netflix「FACE Oka X 全裸監督」全球發佈 !DDT Store開放抽籤登記】
Netflix原創系列《全裸監督2》明日全球首播,AllRightsReserved與Netflix全球矚目原創日劇《全裸監督》攜手呈獻「FACE Oka X 全裸監督」系列,首度邀請日本藝術家FACE Oka合作,創作全球限量發行624個「NICE DIRECTOR」公仔,是今年推出的同系收藏系列的首個作品。
「NICE DIRECTOR」公仔高7吋半,作品頭部有兩款造型可替換,全球限量624枚,腳底印有藝術家簽名及編號,於香港時間2021年6月25日中午12時起以網上抽籤*形式公開發售,中籤者將於6月28日以電郵收到購買詳情。作品將於2021年10月起出貨配送。
抽籤登記日期及時間:香港時間6月25日(星期五)中午12時 至 6月28日(星期一)中午12時
抽籤登記平台:DDTStore.com
*請提前通知您的發卡銀行,以確認您有足夠的信用額度以登記抽籤。
- - -
Download ARR Authentication App on App Store or Google Play Store now to verify product authenticity.
立即於App Store或Google Play商店下載ARR認證應用程式,以認證商品真偽。
iOS: https://bit.ly/ARRios
Android: https://bit.ly/ARRandroid
#AllRightsReserved #Netflix #TheNakedDirector #FACEOka #DDTStore #FWENCLUB
#全裸監督 #ネットフリックス #ネトフリ #NICEDIRECTOR
number drawing 在 dP Art Drawing Youtube 的最佳貼文
I drew and counted the dots in my drawing.
It took me more than 7 days to mark 182336 and finish this drawing .
I use click software to count the number of dots.
My right hand is drawing and my left hand is clicking at the same time, to accurately count the number of dots on a drawing .
#DotsDrawing #DPARTDRAWING #182336Dots
follow me :
YOUTUBE : https://www.youtube.com/dpARTDRAWING
FACEBOOK : https://www.facebook.com/DPartDrawing
INSTAGRAM : https://www.instagram.com/dp_art_Drawing
number drawing 在 MakeLearningFun Youtube 的最讚貼文
In this video, we will teach shapes to your kids with usual objects such as broom, buttefly, crab, cup...etc
Doodle Studio reinvents the classic magnet doodle with a huge drawing surface and a bundle of activity cards. Your baby can learn to draw different shapes, do matching, learn to draw different animals and objects, and learn to tell time! Equipped with a Patrick stylus that is tailored for a baby's grip, Doodle Studio will become the best pal for your baby's burgeoning creativity!
If you want to watch more video from us, please
-do subscribe us!
http://www.youtube.com/channel/UC7pL7eH9oa4Ul05Slu2uUWw?sub_confirmation=1
-like the video and share to you friend who have kid on the facebook, tweeter, google+....etc
Learn shapes playlist:
https://www.youtube.com/watch?v=zfMGbZYo1xw&list=PLDQjcD7DJPwkz11nuQJ6TNGGclAXUt4zu&index=5
Music: http://www.bensound.com
Learn names of animal with sound playlist:
https://www.youtube.com/playlist?list=PLDQjcD7DJPwmpnepbnrgxL5TJY5NqIRJ4
Learn names of street vehicle and its sound playlist
https://www.youtube.com/playlist?list=PLDQjcD7DJPwkk7wqGzd0qV9XCc8PTndDM
Learn names of fruits and vegetables
https://www.youtube.com/playlist?list=PLDQjcD7DJPwkcfWoKnQXBvpvTriMF5L7i
Learn number and counting playlist:
https://www.youtube.com/playlist?list=PLDQjcD7DJPwk05uDW8MNPGdIrY8tHvNz5
number drawing 在 MakeLearningFun Youtube 的最佳解答
In this video, we will teach shapes to your kids with usual objects such as basketball, cow horn, rainbow, ring...etc.
Doodle Studio reinvents the classic magnet doodle with a huge drawing surface and a bundle of activity cards. Your baby can learn to draw different shapes, do matching, learn to draw different animals and objects, and learn to tell time! Equipped with a Patrick stylus that is tailored for a baby's grip, Doodle Studio will become the best pal for your baby's burgeoning creativity!
If you want to watch more video from us, please
-do subscribe us!
http://www.youtube.com/channel/UC7pL7eH9oa4Ul05Slu2uUWw?sub_confirmation=1
-like the video and share to you friend who have kid on the facebook, tweeter, google+....etc
Learn shapes playlist:
https://www.youtube.com/watch?v=zfMGbZYo1xw&list=PLDQjcD7DJPwkz11nuQJ6TNGGclAXUt4zu&index=5
Music: http://www.bensound.com
Learn names of animal with sound playlist:
https://www.youtube.com/playlist?list=PLDQjcD7DJPwmpnepbnrgxL5TJY5NqIRJ4
Learn names of street vehicle and its sound playlist
https://www.youtube.com/playlist?list=PLDQjcD7DJPwkk7wqGzd0qV9XCc8PTndDM
Learn names of fruits and vegetables
https://www.youtube.com/playlist?list=PLDQjcD7DJPwkcfWoKnQXBvpvTriMF5L7i
Learn number and counting playlist:
https://www.youtube.com/playlist?list=PLDQjcD7DJPwk05uDW8MNPGdIrY8tHvNz5
number drawing 在 140 Number drawing ideas - Pinterest 的推薦與評價
May 9, 2020 - Explore Fionas Art Class's board "Number drawing" on Pinterest. See more ideas about number drawing, drawing for kids, easy drawings. ... <看更多>