Any luck with winning at least NT$200 this time? A total of four uniform invoices issued in July and August had the winning serial number drawn Saturday in the bimonthly lottery draw for the top prize of NT$10 million (US$359,912).
https://focustaiwan.tw/business/202109260007
同時也有1270部Youtube影片,追蹤數超過14萬的網紅旭文日本語學院,也在其Youtube影片中提到,到郊外走走是很棒的休閒,能到人少的地方放鬆身心更是對身體健康很有幫助的活動呢! 本月焦點會複習登山活動,出門遠行等常見到的實用語彙,讓大家在出門踏青之餘也能複習日語喔~ 更多資訊↓ ↓ ↓ 旭文日本語學院官網 https://www.shuwoon.com.tw/ 線上日語教學平台 https...
serial 1 在 Taipei Ethereum Meetup Facebook 的精選貼文
📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
serial 1 在 MenClub Facebook 的精選貼文
【科技】Harley-Davidson 電.單車 今年尾正式開售
Mosh/Tribute最大分別其實在於個樣,參照Harley-Davidson最早嘅電單車Serial Number 1,用上黑色漆面車架配金色字樣,手造蜜糖色皮製座椅及襯色皮手柄,再加上白色嘅Schwalbe Super Moto-X輪胎。
#科技 #電單車 #HarleyDavidson #Serial1
serial 1 在 旭文日本語學院 Youtube 的最佳貼文
到郊外走走是很棒的休閒,能到人少的地方放鬆身心更是對身體健康很有幫助的活動呢!
本月焦點會複習登山活動,出門遠行等常見到的實用語彙,讓大家在出門踏青之餘也能複習日語喔~
更多資訊↓ ↓ ↓
旭文日本語學院官網
https://www.shuwoon.com.tw/
線上日語教學平台
https://academy.shuwoon.com.tw/bookshelf
宣傳資訊↓ ↓ ↓
想增進日文聽力嗎?新系列【聽力達人】已經上市囉!
內容陸續新增中!
N3檢定課程+聽力達人組合包優惠資訊
https://academy.shuwoon.com.tw/bookshelf/serial/227
#日語 #日語學習 #生活會話
serial 1 在 旭文日本語學院 Youtube 的最讚貼文
五十嵐?西園寺?聽起來好像很厲害!
日本有些姓氏聽起來給人名門望族的印象,本篇聽力達人會聊聊有關日本姓氏的有趣文化及由來,大家可以藉著練習聽力的機會來認識看看,以後遇到特別的姓氏就不會唸不出來囉!
N3檢定課程+聽力達人組合包優惠中~
https://academy.shuwoon.com.tw/bookshelf/serial/227
旭文日本語學院官網
https://www.shuwoon.com.tw/
線上日語教學平台
https://academy.shuwoon.com.tw/bookshelf
0:00 文章內容
1:46 中文講解
14:32 文章內容複習
#姓氏 #五十嵐 #西園寺 #日語 #日文
serial 1 在 旭文日本語學院 Youtube 的精選貼文
不管是對日本人,還是其他喜愛日本文化的朋友們,
關東與關西的差異總是為人津津樂道的話題
關東與關西地區有哪些料理上的差異呢?來聽聽看本次的內容吧!
不只能練習聽力,也能增進對日式文化的了解喔!
N3檢定課程+聽力達人組合包優惠中~
https://academy.shuwoon.com.tw/bookshelf/serial/227
旭文日本語學院官網
https://www.shuwoon.com.tw/
線上日語教學平台
https://academy.shuwoon.com.tw/bookshelf
0:00 文章內容
1:50 中文講解
16:32 文章內容複習
#關東 #關西 #差異性 #日語 #日文