📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
同時也有11部Youtube影片,追蹤數超過21萬的網紅屯門畫室 Tuen Mun Studio,也在其Youtube影片中提到,【屯門畫室Patreon 頻道】▶https://www.patreon.com/tuenmunstudio 屯門畫室已經在 patreon.com開設了頻道,內容包括更深入的實時專屬繪畫教學影片、心得文章、實用教材,想在網上自學畫畫的你,千萬不要錯過! 【我親自教授的畫班, 畫室電話 810...
「algorithm art」的推薦目錄:
algorithm art 在 Sharmaine Kwan - Artist Facebook 的最佳解答
Alice R50 testing in progress~ 🔊 Come visit and feed her words! As an interactive installation she will generate and recite original poems from your input~
'Poems from the eternal hoop'
In her heydays, Alice R50 eased people’s loneliness. Today, she is stripped down to a court jester’s head, saying poems from user input as if they were religious chants. She does so by means of The Hoop Sayer, an algorithm written by Johan F. Hoorn and implemented in Ruby by Giovanni Lion.
The generative loop that creates ‘variations on a theme’ is like a banquet of liberal arts in which poets work together on a solitary sequence. The rule of poetry the algorithm uses is the rhetorical and writing technique of Anadiplosis, repeating the last word of the preceding line. In Chinese, this stylistic device is known as 頂真 (dingzhen). As an algorithm that dynamically interacts with the visitors, the robot and the people work together to create never-before-heard verses, which then form new and original poems within the constraints of the designed rules. The process itself is a beautiful open and collaborative art in itself.
algorithm art 在 Engadget Facebook 的最佳貼文
“Why would you build an expensive algorithm if you can’t bias it in your favor?” - former American Airlines president, Robert Crandall
algorithm art 在 屯門畫室 Tuen Mun Studio Youtube 的精選貼文
【屯門畫室Patreon 頻道】▶https://www.patreon.com/tuenmunstudio
屯門畫室已經在 patreon.com開設了頻道,內容包括更深入的實時專屬繪畫教學影片、心得文章、實用教材,想在網上自學畫畫的你,千萬不要錯過!
【我親自教授的畫班, 畫室電話 8101 3600】
簡易水彩入門班 ▶ http://tuenmunstudio.com/watercolour/
簡易油畫入門班 ▶ http://tuenmunstudio.com/oilpainting/
簡易素描入門班 ▶ http://tuenmunstudio.com/drawing/
【日本歐美畫材用品綱上店】
▶ http://www.minipetit.com
【訂閱】
YouTube ▶ http://goo.gl/mmzxEk
Facebook▶ 屯門畫室 Tuenmunstudio.com →http://goo.gl/QBKkww
Facebook▶ Minipetit.com日本歐美畫材專門店 → http://goo.gl/2c2EFo
Instagram▶ tmstudio_mini
【成為YouTube專屬會員】
連結▶ https://www.youtube.com/channel/UCLwTcif0ooLQ7X6uctZcnOg/join
【屯門畫室字幕小組幕集中!】
選擇英文字幕▶ http://goo.gl/d4UAsP
【繪畫教學】
水彩教學 Watercolour Tutorial ▶ http://goo.gl/33NXP1
素描教學 Drawing Tutorial ▶ http://goo.gl/6n9EJa
畫材介紹 www.minipetit.com ▶ http://goo.gl/vMHGGo
油畫教學 Oil Painting Tutorial ▶ http://goo.gl/FL1bJN
粉彩教學 Pastel Tutorial ▶ http://goo.gl/WfWQAe
英文書法 Calligraphy Tutorial ▶ http://goo.gl/dzkqPE
塑膠彩教學 Acrylic Tutorial ▶ http://goo.gl/mMG2Vt
藝術雜記 Art in Life ▶ http://goo.gl/yW9eWV
YouTube Live 直播 ▶ http://goo.gl/UCQQ1L
#演算法 #algorithm
algorithm art 在 Laura Ribeiro Youtube 的最佳貼文
Subscribe & don't forget to LIKE this video to help my algorithm, thank you!
––––––––––––––––––––––––––––––
Modeling in Japan: https://bit.ly/3toFc8r
My Japanese Apartment Series: https://bit.ly/3cJ3Muu
Tokyo Vlog Series: https://bit.ly/2YEe6Mj
Life in Japan Diaries: https://bit.ly/3oIAyyk
––––––––––––––––––––––––––––––
▹Instagram - http://instagram.com/lauraribeiro.x
––––––––––––––––––––––––––––––
Hey lovelies, so .... we are adopting a cat! Here's a video of how we are getting ready to welcome this new family member! I hope you enjoy our little vlog and haul of things we bought! We have a few things still coming later this week, but wanted to share the essentials
Introduction Drawing Art by http://instagram.com/studioalisi
––––––––––––––––––––––––––––––
●LISTEN TO MY MUSIC●
▹Spotify - https://spoti.fi/32gT32B
▹Soundcloud - https://soundcloud.com/lauraribeiro-x
––––––––––––––––––––––––––––––
Hey, I’m Laura Ribeiro. I am Brazilian-Portuguese, raised in London. I moved to Tokyo in 2014.
I work as a full-time model, and a singer-songwriter musician. My channel is based on lifestyle, beauty & fashion videos. I have always loved documenting everything, and being able to look back.
thanks for watching, don't forget to subscribe ♡
––––––––––––––––––––––––––––––
●MUSIC IN THIS VIDEO●
#TokyoVlog #Japan #cat
🐾 Adopting a cat / getting ready essentials + haul | Lesbian Couple
algorithm art 在 Laura Ribeiro Youtube 的精選貼文
Subscribe to my channel: http://youtube.com/lauraribeirotv
Don't forget to LIKE this video to help my algorithm, thank you!
––––––––––––––––––––––––––––––
✨Hey lovelies! How was your january? Here's a little summary of my entire month. A few of my daily routines in january! If some of you don't know, I started up my small business it's jewelry and art for now, a little space to put out my creative self.
I also cooked a lot this month! Me and my girlfriend really enjoy making delicious japanese homefood :))
love lauraaaaaa x
My Store: www.bambeeluna.com
––––––––––––––––––––––––––––––
●FOLLOW MY SOCIAL MEDIA●
▹Laura’s Instagram - http://instagram.com/lauraribeiro.x
▹Laura’s Twitter - http://twitter.com/lauraribeiro_x
––––––––––––––––––––––––––––––
●LISTEN TO MY MUSIC●
▹Spotify - https://spoti.fi/32gT32B
▹Soundcloud - https://soundcloud.com/lauraribeiro-x
––––––––––––––––––––––––––––––
Hey, I’m Laura Ribeiro. I am Brazilian-Portuguese, raised in London. I moved to Tokyo in 2014.
I work as a full-time model, and a singer-songwriter musician. My channel is based on lifestyle, beauty & fashion videos. I have always loved documenting everything, and being able to look back.
Love xox
thanks for watching, don't forget to subscribe ♡
––––––––––––––––––––––––––––––
#TokyoVlog #Japan
vlog | daily routines in january - small business set up, japanese food & cooking at home
sub count: 21,711