📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「what is smart contract」的推薦目錄:
- 關於what is smart contract 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於what is smart contract 在 ลงทุนแมน Facebook 的最佳解答
- 關於what is smart contract 在 Facebook 的最佳解答
- 關於what is smart contract 在 コバにゃんチャンネル Youtube 的精選貼文
- 關於what is smart contract 在 大象中醫 Youtube 的最讚貼文
- 關於what is smart contract 在 大象中醫 Youtube 的精選貼文
what is smart contract 在 ลงทุนแมน Facebook 的最佳解答
Flash Loan ระบบการกู้แบบใหม่ ในโลกคริปโท ที่เราควรรู้จัก /โดย ลงทุนแมน
ในช่วงกลางปีนี้ หนึ่งในแพลตฟอร์มระบบการเงินไร้ตัวกลาง หรือที่รู้จักในชื่อ DeFi
ที่ชื่อว่า “Pancake Bunny” ถูกรายงานว่าโดนโจมตีจาก Flash Loan
ซึ่งความเสียหายที่เกิดขึ้น คิดเป็นมูลค่าราว 1,500 ล้านบาท
ในขณะที่ไม่กี่วันที่ผ่านมา Cream Finance แพลตฟอร์ม DeFi อีกแห่ง
ก็โดนโจมตีจาก Flash Loan เช่นกัน มูลค่าความเสียหายอยู่ที่ 620 ล้านบาท
นอกจากแพลตฟอร์ม DeFi ที่พูดถึงไป ก็มีอีกหลายแห่ง ที่เป็นเหยื่อจาก Flash Loan เหมือนกัน
เช่น bEarn Fi มูลค่าความเสียหาย 360 ล้านบาท
BurgerSwap มูลค่าความเสียหาย 240 ล้านบาท
Value DeFi มูลค่าความเสียหาย 200 ล้านบาท
แล้ว Flash Loan คืออะไร ? ทำไมถึงมีเรื่องราวของ Flash Loan เกิดขึ้นมากมายในโลกคริปโทเคอร์เรนซี
ลงทุนแมนจะเล่าให้ฟัง
╔═══════════╗
Blockdit เป็นแพลตฟอร์ม สำหรับนักอ่าน และนักเขียน
ที่มีผู้ใช้งาน 1 ล้านคน ลองใช้แพลตฟอร์มนี้เพื่อได้ไอเดียใหม่ๆ
แล้วอาจพบว่าสังคมนี้เหมาะกับคนเช่นคุณ
Blockdit. Ideas Happen. Blockdit.com/download
╚═══════════╝
เพื่อเป็นการอธิบาย Flash Loan ให้เข้าใจได้อย่างง่าย
ลงทุนแมนจะขอสมมติตัวอย่างจากชีวิตประจำวันของเรา
ถ้าให้ตลาดสด 2 แห่ง ขายสินค้าเดียวกัน แต่ราคาแตกต่างกัน
ตลาด A ขายหมูบด กิโลกรัมละ 55 บาท
ตลาด B ขายหมูบด กิโลกรัมละ 50 บาท
จะเห็นได้ว่า เราสามารถทำกำไรจากการซื้อหมูบด
จากตลาด B มาขายต่อที่ตลาด A จะได้กำไร 5 บาท ได้ทันที
ซึ่งหากเรารู้ก่อนและมีเพียงแค่เงินทุนของตัวเอง ก็ดูเหมือนว่าจะได้กำไรไม่เต็มที่
หากอยากเพิ่มกำไรให้มาก เราจำเป็นต้องกู้เงินมาเพื่อซื้อหมูบดเพิ่มขึ้น
โดยปกติแล้ว การกู้ยืมเงินไม่ใช่เรื่องที่ง่ายดายเลย เพราะผู้ให้กู้มักต้องการหลักประกันสำหรับเงินที่กู้ยืมเสมอและยังต้องใช้เวลาในกระบวนการต่าง ๆ เช่น การตรวจสอบหลักฐาน การอนุมัติปล่อยเงินกู้ และอื่น ๆ อีกมากมาย
สุดท้ายกว่าจะกู้เงินมาได้นั้น สินค้าทั้ง 2 ตลาดก็จะปรับไปมีราคาที่ใกล้เคียงกันแล้ว
เพราะคนอื่น ๆ ที่มีเงินทุนทำเช่นเดียวกันกับเรา ทำให้โอกาสทำกำไรหายไปในที่สุด
อย่างไรก็ตาม ด้วยไอเดียการกู้แบบใหม่ ที่เรียกว่า “Flash Loan” สามารถทำให้เรากู้เงินได้ทันที โดยไม่จำเป็นต้องมีหลักประกัน แต่ต้องแลกด้วยการคืนเงินต้นพร้อมดอกเบี้ยหลังจากได้รับเงินภายในเวลาเสี้ยววินาที
ซึ่งเมื่อมองมาที่โลกความเป็นจริงอาจจะทำไม่ได้
แต่มันเป็นไปได้ในโลกของคริปโทเคอร์เรนซี..
ด้วยแพลตฟอร์ม DeFi และ Smart Contract หรือสัญญาอัจฉริยะ
สามารถทำให้เราส่งคำสั่งกู้ยืมและซื้อขายภายในธุรกรรมเดียวเลย
เพียงแค่เราเขียนเงื่อนไขและการทำธุรกรรมที่ต้องการลง Smart Contract
หลังจากนั้นระบบของผู้ให้กู้จะเป็นคนตรวจสอบ ถ้าอนุมัติแล้ว ธุรกรรมก็จะเกิดขึ้นทันที
กลับกันหากผู้ให้กู้เห็นแล้วว่า ผู้ยืมไม่สามารถคืนเงินได้ หรือทำกำไรจากการเทรดได้
Smart Contract จะไม่ทำงาน และธุรกรรมที่ส่งไปก็จะไม่เกิดขึ้น
แล้ว Flash Loan มีจุดเด่นอะไรบ้าง ?
1. สามารถทำ Arbitrage หรือการเก็งกำไรโดยปราศจากความเสี่ยงได้
คล้ายกับตัวอย่างหมูบดที่ได้สมมติมา ในโลกคริปโทเคอร์เรนซี
ก็มีบ้างที่บางครั้งที่มูลค่าคริปโทเคอร์เรนซีแต่ละ Exchange จะไม่เท่ากัน
เช่น แพลตฟอร์ม A มีเหรียญ X ราคา 10 บาท
แพลตฟอร์ม B มีเหรียญ X ราคา 10.2 บาท
ซึ่งต่อให้ราคาเหรียญแต่ละแห่งจะแตกต่างกัน เพียงไม่กี่เปอร์เซ็นต์
แต่ด้วย “Flash Loan” จะทำให้เราสามารถกู้เงินมาเทรดได้อย่างมหาศาล
โดยปราศจากความเสี่ยงที่เราจะเสียเงินต้น
และการกระทำแบบนี้ ไม่ใช่เรื่องผิดอะไร เป็นเรื่องดีด้วยซ้ำ
เพราะทำให้ส่วนต่างราคาของสินทรัพย์คริปโทเคอร์เรนซีแต่ละแห่งนั้นหายไป
ทำให้ทุกตลาดมีความสมบูรณ์มากขึ้น
นักลงทุนจึงนิยมใช้ Flash Loan ในการ Arbitrage
2. สามารถทำ Collateral Swaps หรือการเปลี่ยนสินทรัพย์ค้ำประกัน
ยกตัวอย่างคือเรากู้เงินจากแพลตฟอร์มแรกโดยมีหลักประกันอันแรก
ต่อมาเราไปกู้ยืมเงินจากอีกแพลตฟอร์มหนึ่งโดยใช้ Flash Loan เพื่อนำเงินที่กู้นี้ไปแลกกับสินทรัพย์ที่เป็นหลักประกันในแพลตฟอร์มแรก เพื่อนำหลักประกันนี้ไปใช้ประโยชน์ในด้านอื่นต่อไป
3. ค่าทำธุรกรรมที่ต่ำ
เนื่องจาก Flash Loan สามารถทำได้หลายรายการในเพียงธุรกรรมเดียว
ซึ่งปกติการทำธุรกรรมแต่ละครั้งมีค่าธรรมเนียม นักลงทุนหลายรายจึงนิยมใช้ Flash Loan เพราะเสียค่าธรรมเนียมเพียงครั้งเดียว
แต่นอกจากผู้คนจะนำ Flash Loan ไปใช้ประโยชน์แล้ว
ด้วยอำนาจในการกู้เงินได้อย่างมหาศาล ก็มีกลุ่มคนบางส่วนใช้ในทางที่ไม่ดี เช่นกัน
เพื่อโจมตีช่องโหว่ของระบบแต่ละแพลตฟอร์มให้ขยายใหญ่ขึ้น และกอบโกยผลประโยชน์
ยกตัวอย่างขั้นตอนการใช้ Flash Loan ในทางที่ไม่ดี
1. กู้เหรียญ X มาจำนวนมาก ๆ จากแพลตฟอร์มที่ปล่อยให้ใช้ Flash Loan
2. นำเหรียญ X ไปเทแลกเหรียญ Y ที่แพลตฟอร์มใดแพลตฟอร์มหนึ่ง
3. เหรียญ X จะราคาตก ขณะที่ราคาเหรียญ Y จะสูงขึ้นอย่างรวดเร็ว
4. นำเหรียญ Y ไปค้ำประกัน เพื่อกู้เหรียญ X ได้ในจำนวนที่มากกว่าเดิม
5. นำเหรียญ X ไปคืนแพลตฟอร์มแรก ที่เหลือคือกำไร
จากตัวอย่างที่ว่ามาสามารถทำได้แบบรวดเร็วในเสี้ยววินาที จึงทำให้เกิดเคสต่าง ๆ ที่กล่าวมาตั้งแต่ต้น ซึ่งแม้รายละเอียดวิธีการจะแตกต่างกัน แต่รูปแบบวิธีการโดยรวมเหมือน ๆ กัน
อย่างไรก็ตาม เห็นได้ว่าจริง ๆ แล้ว
Flash Loan อาจไม่ได้เป็นตัวการหลักที่ทำให้เกิดปัญหา
แต่เป็นเพราะช่องโหว่ของระบบ DeFi ในแต่ละแพลตฟอร์มที่ทำให้คนมาเห็นช่องในการทำกำไรได้
ซึ่งส่วนใหญ่ ช่องโหว่เหล่านี้จะเกิดจากความไม่รอบคอบจากผู้พัฒนาแพลตฟอร์มเอง
จากเรื่องนี้ก็ทำให้เห็นว่า
นักลงทุนไม่ควรเลือกลงทุนในแพลตฟอร์ม DeFi หรือเหรียญบางกลุ่มเพียงเพราะแค่ผลตอบแทนที่สูงเท่านั้น แต่เรายังต้องพิจารณาเรื่องความน่าเชื่อถือและความปลอดภัยควบคู่ไปด้วย
เพราะทุกการลงทุนมีความเสี่ยง ไม่เว้นแม้แต่โลกคริปโทเคอร์เรนซี
เราจึงควรเริ่มจากลงทุนในความรู้ให้มากที่สุด
ไม่ว่าสินทรัพย์ที่เรากำลังจะลงทุนจะเป็นอะไร เพื่อให้เราพร้อม เรามีภูมิต้านทาน
ที่จะสามารถอยู่รอดในตลาดนั้น ๆ ต่อไปได้ ในระยะยาว..
╔═══════════╗
Blockdit เป็นแพลตฟอร์ม สำหรับนักอ่าน และนักเขียน
ที่มีผู้ใช้งาน 1 ล้านคน ลองใช้แพลตฟอร์มนี้เพื่อได้ไอเดียใหม่ๆ
แล้วอาจพบว่าสังคมนี้เหมาะกับคนเช่นคุณ
Blockdit. Ideas Happen. Blockdit.com/download
╚═══════════╝
ติดตามลงทุนแมนได้ที่
Website - longtunman.com
Blockdit - blockdit.com/longtunman
Facebook - facebook.com/longtunman
Twitter - twitter.com/longtunman
Instagram - instagram.com/longtunman
Line - page.line.me/longtunman
YouTube - youtube.com/longtunman
Spotify - open.spotify.com/show/4jz0qVn1AL7tRMHiTvMbZH
Apple Podcasts - podcasts.apple.com/th/podcast/ลงท-นแมน/id1543162829
Soundcloud - soundcloud.com/longtunman
References:
-https://www.coindesk.com/tech/2021/02/17/what-is-a-flash-loan/
-https://decrypt.co/resources/what-are-flash-loans-the-defi-lending-phenomenon-explained
-https://polkacover.medium.com/what-are-flash-loans-8eb492d39d02
-https://www.coindesk.com/markets/2021/05/20/flash-loan-attack-causes-defi-token-bunny-to-crash-over-95/
-https://www.theblockcrypto.com/linked/116055/creamfinance-exploited-in-18-8-million-flash-loan-attack
-https://www.coindesk.com/markets/2021/05/28/burgerswap-hit-by-flash-loan-attack-netting-over-7m/
-https://www.coindesk.com/markets/2020/11/14/value-defi-suffers-6m-flash-loan-attack/
what is smart contract 在 Facebook 的最佳解答
I spoke to a doc friend of mine, and he echoes the sentiments that there is an insufficient number of posts available for housemanship in our country.
If you recall many years back , there was a glut of medical graduates - I remember during my Uni days, when the quota for students applying for courses in medicine was capped to a certain number. That was back in the late 90s early 2000s.
But with the introduction of private institutions which offer medical courses , we saw an increase of medical graduates.
“Over the years, private medical schools have become convenient scapegoats for what is claimed to be an excessive number of medical graduates in this country, when it is self-evident that this is only part of the story,” ~ Prof. Dr Pravdeep Nair.
Obstetrician and Gynaecologist senior consultant Prof Dr Zaleha Abdullah Mahdy pointed out that the country’s doctor to population ratio was alarmingly imbalanced.
“The problem now is that there aren’t enough posts for doctors to fill in the public health service sector; it has not expanded in line with the population’s needs.”
Prof Pradeep suggested ramping up our healthcare expenditure to ease the gridlock in available posts in the medium and long term, as Malaysia currently spends 4.4% of its gross domestic product on healthcare, compared to the recommended 7% by WHO.
“Another solution is to explore the possibility of smart partnerships with private medical centres and medical schools by allowing housemanship training in the private sector.
“This is in place in Australia under the Commonwealth Medical Internships Initiative,” he said.
He said with a moratorium currently placed on the number of medical programmes in the country as well as limits on intakes, the next steps to consider are a phased reduction in the number of overseas schools Malaysia recognises; a scheduled discontinuance of the provisional registration examination for unrecognised graduates; the introduction of a common competencies checklist for all Malaysian medical undergraduates studying locally or abroad; and the introduction of a common exit examination for all Malaysians who are medical graduates intending to work in Malaysia.
While calling for the current contract doctors to be absorbed into permanent positions, Medical Practitioners Coalition Association of Malaysia president Dr Raj Kumar Maharajah said the number of medical colleges in the country must be controlled.
“Cut down student intakes in private medical colleges by at least 70% and by 50% in public institutions until the situation is normalised,” he said.
.
.
.
Do you think it’s fair that these contract doctors decided to do a boikot when the country needs them most?
1. Hell yeah!
2. No. It’s an opportunist move.
Would love to hear your views.