📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
同時也有54部Youtube影片,追蹤數超過2萬的網紅EDEN KAI,也在其Youtube影片中提到,遅くなりましたが…登録者2万人突破いたしました! 本当にありがとうございます。。! 物凄く短い動画となりましたが、良ければ是非ご覧ください! まだまだ未熟ですが、これからも引き続きコツコツ頑張っていきます。何卒宜しくお願いいたします! Just wanna say… we reached 20K...
「doing projects」的推薦目錄:
- 關於doing projects 在 Taipei Ethereum Meetup Facebook 的最佳解答
- 關於doing projects 在 Facebook 的最佳解答
- 關於doing projects 在 Anchor Taiwan Facebook 的最佳貼文
- 關於doing projects 在 EDEN KAI Youtube 的精選貼文
- 關於doing projects 在 WenWei彣蔚 Youtube 的最佳解答
- 關於doing projects 在 Ray Mak Youtube 的最佳貼文
- 關於doing projects 在 Project Based Learning: Am I Doing it Right? How Do I know? 的評價
- 關於doing projects 在 Doing projects and activities with our kids - Home | Facebook 的評價
- 關於doing projects 在 practical-tutorials/project-based-learning - GitHub 的評價
doing projects 在 Facebook 的最佳解答
Thank you @generationt_asia for your recognition of Asia’s “Leaders of Tomorrow” for 2021. I’m honoured to be a part of this list and encouraged even more to create art that tell stories through an Asian lens. I hope to be able to do this for as long as I can lift a brush/basketball/teabag/matchstick/coffee cup or whatever comes my way. My hope is that the projects I’ve worked on will help inspire and map a path for aspiring creatives out there – especially Asian female creatives. I believe that art can make a difference, and that artists have the superpower of presenting a subject and helping people to feel it emotionally and physically, and ultimately to turn thinking into doing.
Big hugs to @tatlerasia for believing in artists and creatives across Asia.
[ps: very special to be sharing this moment with @annicelyn who made the list too! Here’s a photo of us and how we first met: we both coincidentally displayed our works (her photos, my paintings) in the same space last July at Zhongshan Building. Since then, we’ve combined forces to work on a few projects and we look forward to doing more together…and with other fellow creatives too!] #generationtasia
doing projects 在 Anchor Taiwan Facebook 的最佳貼文
What does the biggest bike manufacturer in the world, Giant Bicycles (#捷安特) view corporate innovation, M&A, and #ESG? Check out this interview with Marcel Yang! He will be joined by Gulshan Kumar from lululemon and Rachel Lau from RHL Ventures at our next Asia Venturing session!
.
"Nowadays when people talk about innovation and ecosystems, most think of tech firms and startups. But in traditional manufacturing, we have been doing that with existing suppliers through projects or products... Connecting upstream innovators with downstream consumers, we end up being partially a platform for others and partially an innovation instigator."
.
📍 RSVP: https://forms.gle/dAsa9eqPrbJ3h7rF6
-
#AsiaVenturing: Anchor Taiwan x DIGITIMESAsia #giant #cvc #corporateinnovation #corporateventuring #ebikes #巨大集團 #anchortaiwan #SDGs #manufacturing #supplychain
doing projects 在 EDEN KAI Youtube 的精選貼文
遅くなりましたが…登録者2万人突破いたしました!
本当にありがとうございます。。!
物凄く短い動画となりましたが、良ければ是非ご覧ください!
まだまだ未熟ですが、これからも引き続きコツコツ頑張っていきます。何卒宜しくお願いいたします!
Just wanna say… we reached 20K subs!:-D Thank you so much!!
I’m excited for more future projects…!
As always...stay safe, hydrated / healthy, and Keep Doing What You Love!
CONTACT/BOOKING(連絡): imagine@edenkai.com
ウクレレコース (My Japanese ukulele course) : https://class101.jp/products/edenkai
Personalized video shoutouts, online events booking, 1on1 online live lessons and others (個人宛のビデオメッセージ・オンラインイベントのご連絡・オンラインプライベートレッスン・その他) : https://jemi.app/edenkai/shop
Let's Connect!(SNSやってますー!):
WEBSITE(WEBサイト): https://edenkai.com/
INSTAGRAM(インスタ): https://instagram.com/edenkai_official
TWITTER (ツイッター): https://twitter.com/edenkaiofficial
FACEBOOK(フェイスブック): https://www.facebook.com/EdenKaiOffic...
***CLICK "SUBSCRIBE" NOW*** FOR THE NEWEST VIDEOS!!!
チャンネル登録、宜しく御願いします!
#登録者2万人ありがとうございます #ThankYou20kSubs #EdenKai
doing projects 在 WenWei彣蔚 Youtube 的最佳解答
Shop Honeycare diapers on lazada here :
Lazada: https://s.lazada.com.my/s.XwGUY
Shopee: https://my.xiapibuy.com/product/352989363/8608836367/
Hope yall are doing well
Follow me !
Instagram : @wenweiyy
Twitter : @wenweiyy
Youtube : @wenwei彣蔚
Hello from Malaysia !
KON WEN WEI 官彣蔚 (known as wen wei in Malaysia) started her career at 16 as a youtuber and her work paved the way to numerous projects. She released her debut single “teenage dream” about her teenage love story ! A Chinese living in Malaysia, fluent in Mandarin, English & Bahasa Melayu. She wishes to share her personal stories, highschool, challenges she faced, about mental health, her passions & stories — through music and her platform. Thanks for watching :)
Camera / Sony zv-1 (PP3 + beauty settings)
Edited by / Jo
Business Enquiries ?
wenwei@gushcloudtalent.com
———————————————————
Music by Dylan Joshua - Roaming - https://thmatc.co/?l=78C78A6C
Music by Garrett Becker - Breathing - https://thmatc.co/?l=9F0AF001
Music by Mr. Jello - Love Bug - https://thmatc.co/?l=B3645F35
Music by Fiji Blue - How Can I Tell You? - https://thmatc.co/?l=FBBD46C4
Music by Juju B. Goode - Time Machine - https://thmatc.co/?l=E75070C1
doing projects 在 Ray Mak Youtube 的最佳貼文
Back in the days, around the time when YouTube was founded, before most of you were born, I used to Vlog a lot. I was a little ahead of my time because video sharing platforms were premature back then. I Vlogged so that I can remember my experiences back then. You'll get to know me better if you actually spend the time to watch this. If you do have the patience.
Episode 13 - Winter 2005, Amherst, Massachusetts
Just my typical college life during the winter. Chilling with friends, doing some school projects. I hang out with people who loves music a lot and none of us were music majors. We all just sneaked into piano rooms to have fun.
There was a fire in my dorm so the fire trucks came.
I spoke a few languages in this video, be sure to turn on captions.
Year : 2005
Location : Amherst, Massachusetts
Fan-Made Intro by Daniel Such
https://www.youtube.com/channel/UCRy-JftlpRvSP49jH81ZTBQ
(Make me a nice short intro using the same audio and I'll feature you next)
This is my one remaining way to promote small channels as I've maxed out my Sub Counts trying to help out small YouTube channels (And getting hate at the same time)
?SHEET MUSIC & Mp3 ▸ http://www.makhonkit.com
?LEARN MY SONGS ▸ https://tinyurl.com/RayMak-flowkey
?Listen on Spotify ▸ https://sptfy.com/raymak
?Listen on Apple Music ▸ https://music.apple.com/sg/artist/ray-mak/1498802526
?Full Song List ▸ http://www.redefiningpiano.com
Talk to me :
? Instagram ▸ http://instagram.com/makhonkit
? Facebook ▸ http://facebook.com/raymakpiano
? Twitter ▸ http://twitter.com/makhonkit
#Vlog #Winter #USA
doing projects 在 Doing projects and activities with our kids - Home | Facebook 的推薦與評價
Doing projects and activities with our kids. 349 likes. Photos, ideas, suggestions for projects parents can do with kids. ... <看更多>
doing projects 在 practical-tutorials/project-based-learning - GitHub 的推薦與評價
Contribute to practical-tutorials/project-based-learning development by creating an ... Learn Python For Data Science by Doing Several Projects (video):. ... <看更多>
doing projects 在 Project Based Learning: Am I Doing it Right? How Do I know? 的推薦與評價
... <看更多>