📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
同時也有5部Youtube影片,追蹤數超過7萬的網紅燕秋老師教學頻道,也在其Youtube影片中提到,📕關於電子書閱讀器的作業系統 以廣義來說電子書閱讀器分成「開放式」及「封閉式」二類作業系統 📚開放式 說穿了就是具有E-ink螢幕的Android平板,例如hyread, 文石boox... 為androdi或自行開發之作業系統,可另外安裝APP,所以除了購買專屬的電子書廠商的書籍之外,也可以再安裝...
「歡迎轉載分享」的推薦目錄:
- 關於歡迎轉載分享 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於歡迎轉載分享 在 劉怡里粉絲團 Facebook 的最佳解答
- 關於歡迎轉載分享 在 鼠寶發電廠No.4 CLUB Facebook 的最佳解答
- 關於歡迎轉載分享 在 燕秋老師教學頻道 Youtube 的精選貼文
- 關於歡迎轉載分享 在 加點吉拿棒 Youtube 的最佳貼文
- 關於歡迎轉載分享 在 水深之處 Youtube 的最佳解答
- 關於歡迎轉載分享 在 #歡迎轉載分享- YouTube 的評價
- 關於歡迎轉載分享 在 #歡迎轉載分享 - Explore | Facebook 的評價
- 關於歡迎轉載分享 在 【健康生活】--歡迎轉載分享 - Facebook 的評價
- 關於歡迎轉載分享 在 【你知道隨便分享或轉載網路上的文章或影片,會因為侵害 ... 的評價
- 關於歡迎轉載分享 在 讓我們學會圓融,懂得感恩!——慈悲的龍德上師We could ... 的評價
- 關於歡迎轉載分享 在 青創學院(全國創新創業總會)Youtube影音行銷實務實戰班,2月 ... 的評價
- 關於歡迎轉載分享 在 附近的美食餐廳景點加油站- 歡迎分享轉載的在哪裡,FACEBOOK 的評價
歡迎轉載分享 在 劉怡里粉絲團 Facebook 的最佳解答
#負重前行又豈能歲月靜好#
在我的門診裡最不缺的是體重管理的病人,通常這樣高血糖、血脂、血壓,總是容易伴隨而行!是的呀,倘若體重管理一直讓我們負重前行,那接下來的歲月如何能靜好呢!
在這幾年,糖尿病一直出現在衛福部調查的國人十大死因的排行榜裡面,說穿了看似大家耳熟能詳的疾病,事實上糖尿病在臨床上的控制必須透過👉『飲食、運動和藥物』三者缺一不可,而在飲食上面的對食物分類及份數的了解更是重要。
然而,特別是第2型的糖尿病,控制好血糖也要控制好體重,因為肥胖會造成血管疾病的風險增加,特別提醒,腰圍過粗會增加代謝症候群的發生率,更是提高未來得到糖尿病與心血管疾病的風險。
如果血糖控制不好的病人,我們擔心的是大小血管病變的高風險族群,大血管病變,例如:心肌梗塞、腦中風等,小血管病變,例如腎臟病變、視網膜病變等,而且一般民眾會以為得到糖尿病,往後飲食方面只要控制好糖份就可以了,其實為了預防往後更可怕的大小血管病變,更要控制油脂與鹽份的攝取。當然糖尿病飲食是會針對『個人化』的生活作息和生化數據等去設計,才能調整出適合糖尿病人最佳的飲食建議。
✅針對糖尿病飲食/生活的建議:
● 維持理想體重,特別是『腰圍健康』,建議男生控制在90公分(35吋),女性控制在80公分(31吋)。
● 糖尿病飲食跟健康飲食相似,豐富且多元性變化,但是糖尿病病友飲食習慣和份數,要搭配藥物遵守『定時定量』原則。
● 直接影響血糖的三大類食物,⚠️『水果類、全穀雜糧類、乳品類』,特別提醒,通常病人會忽略乳品和乳製品,例如:鮮奶、奶粉、起司、優酪乳、優格,這些看似蛋白質類的食物,其實含有乳糖,過量攝取,依然會影響血糖。
● 俗稱澱粉類的食物,建議可以選擇高纖類全榖雜糧,高纖有助於餐後血糖控制,例如:糙米飯、地瓜、南瓜、燕麥、蕎麥麵等,但是要注意的是,臨床上常常有病友以為換成高纖澱粉就可以放寬鬆份數,⚠️事實上『半碗白飯的含醣量和半碗糙米飯的含醣量是一樣的』,如果將原本吃的半碗白飯換成一碗糙米飯,那當然血糖就會控制不好,所以不要以為健康的澱粉就可以過量攝取。
● 水果『口感上的酸甜度』,不是判斷糖份多寡的標準,臨床上也常常看到病人以為很酸的檸檬汁是排毒降血糖的聖品,⚠️事實上,220西西的檸檬汁等於一份水果的含醣量,如果每天多一杯,容易造成過量影響血糖控制,而口感上甜甜的水梨、木瓜,卻是血糖不易波動的低GI水果,每天控制在2份(2碗=200克),其實是可以開心享用的。
● 特別建議,『水溶性纖維』豐富的食物,具有延緩血糖上升速度與改善胰島素敏感性的好處,對降膽固醇也有幫助,尤其蔬菜類不限制份量,可以多選擇口感黏黏滑滑稠稠的種類,例如:秋葵、木耳、海藻類。另外豆類、馬鈴薯、寒天、仙草、愛玉都是很好的食物。
● 適量油脂攝取,選擇不飽和脂肪酸高的油脂,例如:橄欖油、苦茶油、堅果等,烹煮方式盡量採用燉、烤、燒、清 蒸、水煮、涼拌方式,降低飽和脂肪酸,從減少紅肉、加工肉品、內臟類食材開始。
● 善用辛香料,蔥、薑、蒜、九層塔、肉桂、薑黃和香草等,來增加餐點的風味,減少用鹽量,當糖尿病友血管健康,也會降低心血管疾病的發生率。
● 外食儘量避免攝食糖漬、蜜汁、醋溜、茄汁、糖醋、勾芡等加多量蔗糖或蜂蜜的菜餚,建議血糖控制不好的病人盡量不要飲酒,尤其空腹飲酒易造成低血糖風險。
● 糖尿病友建議每星期運動150分鐘以上,每天運動至少30分鐘;也可採用分散性累積的運動,達到有效的運動,例如:快走走到會喘、早中晚爬樓梯。
● 定期監測血糖、血脂、血壓,並且記錄飲食日記與營養師討論個人化建議,每年定期的健康檢查也都是糖尿病病友要注意追蹤的重要事項。
糖尿病友,如果好好控制血糖,可以預防危險的大小血管病變,外出旅遊其實可以跟正常人一樣,但是要記得,飲食控制份量多樣性變化才是最健康的糖尿病飲食建議。
#糖尿病
#心血管疾病
#體重管理
#營養師
#歡迎轉載分享請註明出處喔
劉怡里
歡迎轉載分享 在 鼠寶發電廠No.4 CLUB Facebook 的最佳解答
眼看著中秋節要到拉!
常常這時候看到鼠友分享鼠寶在柚子裡或旁邊可愛(但實際驚悚)的照片
鼠寶發電廠溫柔提醒大家(笑):
❌ 請記得鼠寶不能吃柑橘類(文旦、 柚子、葡萄柚、橘子、柳丁:、檸檬都算拉),柑橘類的容易導致鼠皮膚過敏、拉肚子!
❌請不要給鼠吃也不要把他們放在皮裡拍照,這氣味對他們而言是不舒服的!
(沒拍沒吃是會鼠膩)(再笑)
祝大家 中秋節快樂 鼠圓人團圓
#歡迎轉載分享
插圖by @哈姆湘
設計:鼠寶發電廠
模特兒:可樂餅
歡迎轉載分享 在 燕秋老師教學頻道 Youtube 的精選貼文
📕關於電子書閱讀器的作業系統
以廣義來說電子書閱讀器分成「開放式」及「封閉式」二類作業系統
📚開放式
說穿了就是具有E-ink螢幕的Android平板,例如hyread, 文石boox...
為androdi或自行開發之作業系統,可另外安裝APP,所以除了購買專屬的電子書廠商的書籍之外,也可以再安裝像是kindle, readmoo, kobo等多家書商的電子書APP,亦即可以在此閱讀器中看到其他的書.
優點
喜好購買不同家平台的書籍者(哪有優惠哪裡去),那就很適合此設備.
缺點
因不同家的戴具,在APP使用上的優化並不如專屬的閱讀器來的好,例如顏色對比,速度較延遲,介面比例過小等等.
📚封閉式
亦即為專屬的閱讀器,只能看同一個平台的書籍,也無法下載安裝任何的其他APP(就是台單純的閱讀器),例如:kindle, kobo, mooink...
專為自家平台所開發的電子書閱讀器,各家有各自的優點及特色,在介面上會更優化閱讀時的介面.
優點
專為自家開發故更能凸顯各家優點,
缺點
綁定特定書庫,並不是所有書庫都有所需的書籍,若喜歡在不同平台上購買書籍就無法觀看
則針對自行上傳文件(PDF)則是目前電子書閱讀器都有的功能哦!(每一台都有,只是上傳方式的不同)
心得
幾乎各家的閱讀器,燕秋老師都有購買及使用,但我的書大多以readmoo讀墨的平台為主(目前約莫1百多本,持續成長中)
使用策略是
✍外出時
是攜帶mooink 6吋 or kobo 6吋,因為外出的需求大多是零碎時間觀看,所以以小說為主,不需要大螢設備,工作需要則以ipad mini來處理
✍辦公室/家裡
🔖若要看小說,則使用7.8吋(減少翻頁次數),螢幕也比較大
🔖若要看圖書館的書,可利用學校或公共圖書館帳號借書,則會使用hyread gaze x, 因為這平台有與圖書館合作,可以使用借閱電子書,但這台只會拿來看圖書館的書,因為使用了其他的APP(例如readmoo), app的介面有點慘不忍賭(我個人認為啦!)
🔖若要看電腦書籍/文件/論文,則是使用mooink的13.3吋,因為閱讀效果不輸A4紙張,看起來又舒服又方便,亦可同時書寫筆記再匯出至電腦中,偶爾也會用這台來觀看小說,真的超讚的(回不去了)
以上是燕秋老師的心得分享
每個人的需求不同,所以也不會像我一樣買了一大堆,
但是能夠讓家裡空間變大,書籍永久留存,分享給家人觀看,文件註解都能留下,外出也不用帶一堆書.....
雖然也是有買實體書,但每一年會固定清書/裁書/掃描/電子化,將最喜歡的書永久留存,
我還是會持續支持電子書😎
#燕秋老師教學頻道
#歡迎轉載分享
#不論實體書或電子書
#知識就是力量
歡迎轉載分享 在 加點吉拿棒 Youtube 的最佳貼文
看新影片: "好興奮 ! 權力遊戲終於要來了 | 春季還有哪些必追影集? | 美劇吃飽飽"
https://www.youtube.com/watch?v=9Y3K5VJ2VlM --~--
內容在陸地方面的死亡人員有誤
大圖已更新!影片因為無法標記,就麻煩大家以圖片下面的連結為準唷!
《敦克爾克大行動》故事時間線圖解(大圖):
http://i.imgur.com/0hH3xQb.jpg
(歡迎轉載分享,並請註明作者出處)
***********************************************************
►專屬於你的推薦電影都在我們的Pressplay專案!
https://goo.gl/nsRrEB
►訂閱加點吉拿棒: https://goo.gl/PXHi3g
►吉拿棒臉書粉專連結:https://www.facebook.com/ExtraChurros/
===================
也支持一下吉拿棒成員們的唷!
太郎:https://www.facebook.com/tentarou
部長:https://goo.gl/sWVCmI
XXY:https://goo.gl/y3MknN
歡迎轉載分享 在 水深之處 Youtube 的最佳解答
約翰福音『九種人的需要』動畫
9-1乾渴人的需要:阿塔達爾的狂歡
2016年重新配音版,
以高水準音質呈現高品質內容,
歡迎轉載分享,總有一種人適合您的需要。
更多福音動畫:
https://www.youtube.com/playlist?list=PL37FC127D73B11F1D Music by Aaron Wang
水深・火熱直播頻道:https://www.youtube.com/channel/UCnj-ZkH_jfeJLoCdxG0e1Uw?fbclid=IwAR3Fo48cROugVIO9jHV0FOj2AmeHIqmeVubVXS5JqLWNqJoJDtZruoTydJM
水深之處官方網站:http://www.luke54.org
水深之處Facebook:https://www.facebook.com/luke54.org/
水深之處Instagram:https://www.instagram.com/luke54.taiwan/
歡迎轉載分享 在 #歡迎轉載分享 - Explore | Facebook 的美食出口停車場
explore #歡迎轉載分享at Facebook. ... <看更多>
歡迎轉載分享 在 【健康生活】--歡迎轉載分享 - Facebook 的美食出口停車場
See More Photos… 【健康生活】--歡迎轉載分享 by 梵宇創意小舖. 43 Likes. 禎健康 and 42 others like this. 19 Shares. Loading... Try Again. Cancel. Loading. ... <看更多>
歡迎轉載分享 在 #歡迎轉載分享- YouTube 的美食出口停車場
You're offline. Check your connection. Retry ... ... <看更多>