Hello!
เมื่อเร็วๆ นี้ Waves Labs
เราเลือกกรณี DAO เพราะ
เราเริ่มต้นด้วยตัวอย่างง่ายๆค่ะ
ลองดูตัวอย่างนี้ ทดสอบสมมติฐาน และดูสิ่งแปลกประหลาด:
ให้เรามี Alice - เจ้าของ dApp
Boob และ Cooper เป็นหุ้นส่วนของ Alice ซึ่งเป็นผู้ร่วมก่อตั้ง Alice-BC DAO
เนลีเป็นเจ้าของธุรกิจที่ต้องการเงินทุน
Bank - ธนาคารที่จำหน่ายโทเค็น
ขั้นตอนที่ 1 การเริ่มต้นของยอดคงเหลือ
คุณต้องติดต่อเพื่อรับโทเค็นบนเครือข่ายทดสอบคลื่น
คุณสามารถค้นหาที่อยู่ใน IDE ได้โดยเปิดรายละเอียดบัญชีของคุณ
เราเน้น Bank 10 WAVES จากนั้นเราตรวจสอบว่าพวกเขามาถึงผ่านบล็อกและเบราว์เซอร์ธุรกรรม:
ตอนนี้เรามาแจกจ่ายโทเค็นจากธนาคารให้กับผู้เข้าร่วมที่เหลือกันดีกว่า (หมายเหตุ: ธุรกรรมทั้งหมดบนเครือข่าย Wave นั้นไม่ฟรี ดังนั้นผู้เข้าร่วมทุกคนจึงจำเป็นต้องมียอดคงเหลือเป็นบวกขั้นต่ำในการทำธุรกรรม)
1 WAVES = 100000000 หน่วย (เวฟเล็ต) เนื่องจากจำนวนต้องเป็นจำนวนเต็มเท่านั้น
0.01 WAVES (ค่าธรรมเนียมการทำธุรกรรม) = 1000000
ธนาคาร -> [3 WAVES] -> อลิซ ผ่านการโอนเงิน (ประเภท: 4)
เราตรวจสอบว่า env.SEED ที่ใช้ลงนามธุรกรรมตรงกับธนาคารของเรา:

หากคุณไม่มีวลีเริ่มต้นที่ตรงกัน เพียงเปลี่ยนไปใช้วลีดังกล่าวในแท็บบัญชีแล้วตรวจสอบอีกครั้ง
หลังจากนี้เราจะสร้าง ประกาศ และลงนามในธุรกรรมการโอน 3 WAVES Alice
คุณยังสามารถค้นหาข้อมูลของ Alice ผ่านตัวแปร env.accounts การกำหนดหมายเลขเริ่มต้นจาก 0 ดังนั้น Alice จึงเป็น env.accounts[1]
broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))
นอกจากนี้ยังสามารถสังเกตผลลัพธ์ได้ในเบราว์เซอร์ โดยลิงก์ไปยังผลลัพธ์จะถูกส่งกลับมาให้เราทันทีหลังจากดำเนินการ
เราตรวจสอบให้แน่ใจว่ายอดคงเหลือของ Alice ได้รับการเติมเต็มด้วย 3 WAVES และยอดคงเหลือของธนาคารยังคงอยู่ที่ 10 - 3 - 0.01 = 0.699
เราส่ง Boob และ Cooper 3 WAVES อย่างละ 0.2 WAVES และ Neli, Xena และ Mark XNUMX WAVES อย่างละ XNUMX WAVES ด้วยวิธีเดียวกัน
(หมายเหตุ: เราทำข้อผิดพลาดหนึ่งอักขระและส่ง Neli 0.02 WAVES ระวัง!)
broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))
หลังจากเติมเต็มยอดคงเหลือของผู้เข้าร่วมทั้งหมดแล้ว เราจะเห็น:
ขั้นตอนที่ 2 สร้างบัญชี dApp
เราตกลงกันว่าอลิซจะเป็นผู้สร้างและเป็นเจ้าของแอปพลิเคชันแบบกระจายอำนาจ
ไปที่บัญชี ตั้งเป็น SEED และตรวจสอบ env.SEED ตรงกับ Alice
มาลองติดตั้งสคริปต์ (สัญญา) ที่ง่ายที่สุดที่เป็นไปได้ในบัญชีของ Alice
ผู้ติดต่ออัจฉริยะใน Waves เป็นเพรดิเคตที่ห้ามหรืออนุญาตให้ธุรกรรมขาออกประเภทใดก็ตามเกิดขึ้นภายใต้เงื่อนไขบางประการ ในกรณีนี้ เงื่อนไขนี้จะเป็น ALWAYS รหัสสัญญาเป็นจริง โทรปรับใช้ ()
ค่าธรรมเนียมต่อธุรกรรม setScript 1400000/100000000 = 0.014 WAVES อลิซมี WAVES เหลืออยู่ 2.986 WAVES บนยอดเงินของเธอ
ตอนนี้เรามาลองติดตั้งตรรกะสัญญาอัจฉริยะที่ซับซ้อนมากขึ้นในบัญชี Alice ดังที่อธิบายไว้ใน
Ride4DApps ขณะนี้มีคำอธิบายประกอบใหม่ 2 ประเภท:
- @โทรได้(i) — ใช้เป็นพารามิเตอร์ i ซึ่งเป็นข้อมูลเกี่ยวกับบัญชีที่เรียก/ลงนามในธุรกรรม มันเป็นผลลัพธ์ของฟังก์ชันนี้ที่กำหนดการเปลี่ยนแปลงสถานะของบัญชี dApp บัญชีอื่นๆ สามารถสร้างธุรกรรมและดำเนินการฟังก์ชันต่างๆ ด้วยคำอธิบายประกอบนี้ และเปลี่ยนสถานะของบัญชี dApp ได้
- @ผู้ตรวจสอบ(tx) — ตัวตรวจสอบธุรกรรมพร้อมพารามิเตอร์ธุรกรรม tx สอดคล้องกับตรรกะภาคแสดงจาก RIDE ในสำนวนนี้คุณสามารถอนุญาตหรือห้ามการเปลี่ยนแปลงเพิ่มเติมในตรรกะของสัญญาอัจฉริยะในบัญชี dApp
มาทำกัน Dapp บัญชีเป็นกระเป๋าเงินทั่วไปสำหรับผู้เข้าร่วมทุกคน
หากต้องการตรวจสอบว่าสัญญาใดที่ใช้งานอยู่ในบัญชีของคุณในปัจจุบัน คุณสามารถคัดลอกรหัส base64 ของสัญญาอัจฉริยะใน Block Explorer และจดจำได้โดยใช้ตัวถอดรหัส (
เราตรวจสอบให้แน่ใจว่าตรรกะของสัญญาอัจฉริยะตรงกับที่เราคาดหวัง
อลิซมี WAVES เหลืออยู่ 2.972 WAVES บนยอดเงินของเธอ
dApp นี้ติดตามจำนวนเงินที่ผู้เข้าร่วมแต่ละคนบริจาคให้กับกองทุนทั่วไปผ่านกลไก ธุรกรรมข้อมูล - DataEntry (currentKey, newAmount)โดยที่ currentKey คือบัญชีที่เรียกใช้ฟังก์ชันการฝากเงิน และ newAmount คือมูลค่าของยอดคงเหลือที่เติม
Boob และ Cooper ฝากเงินเข้าบัญชี dApp ด้วย 1 WAVES
เราทำผิดพลาดและการทำธุรกรรมไม่ผ่าน เนื่องจากแม้ว่าเราจะเชื่อมั่นว่าเรากำลังทำธุรกรรมในนามของ Bob แต่เราได้ทำผิดพลาดในดัชนีและระบุบัญชีธนาคารที่ไม่มีสัญญาอัจฉริยะ ประเด็นสำคัญที่ควรทราบที่นี่ - มีค่าธรรมเนียมสำหรับความพยายามในการทำธุรกรรมไม่สำเร็จ ลบไม่ได้! อลิซมี WAVES เหลืออยู่ 2.972 WAVES บนยอดเงินของเธอ บ๊อบมี 3 WAVES
Bob ส่ง 1 WAVES ไปยังบัญชี dApp
broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))
Bob เหลือ 1.99 WAVES นั่นคือ Bob จ่ายค่าคอมมิชชั่น WAVES 0.01
อลิซมี WAVES 2.972 บนยอดคงเหลือของเธอ ตอนนี้เป็น 3.972 ธุรกรรมได้รับการลงทะเบียนในบัญชี Alice ด้วย แต่ไม่มีการเรียกเก็บค่าคอมมิชชันจากบัญชี dApp (Alice)
หลังจากที่คูเปอร์เติมเงินในบัญชี ยอดคงเหลือของอลิซก็กลายเป็น 4.972 WAVES
คุณสามารถค้นหาว่าใครเป็นเจ้าของ WAVES จำนวนเท่าใดในกระเป๋าเงินทั่วไปได้ใน Block Explorer ในแท็บ Data
Cooper เปลี่ยนใจที่จะทิ้งจำนวน 1 WAVES ไว้ในกระเป๋าเงินทั่วไป และตัดสินใจถอนความสัมพันธ์ครึ่งหนึ่ง เมื่อต้องการทำเช่นนี้ เขาต้องเรียกใช้ฟังก์ชันการถอน
อย่างไรก็ตาม เราคิดผิดอีกครั้ง เนื่องจากฟังก์ชันการถอนมีพารามิเตอร์ที่แตกต่างกันโดยสิ้นเชิงและมีลายเซ็นที่แตกต่างกัน เมื่อคุณออกแบบสัญญาอัจฉริยะบน RIDE4DAPPS คุณควรคำนึงถึงประเด็นนี้
ตอนนี้ Cooper มี 2.48 WAVES ในงบดุล ดังนั้น 3 WAVES - 1 - 0.01 และ + 0.5 - 0.01 ดังนั้นการโทรฝากและถอนแต่ละครั้งมีค่าใช้จ่าย 0.01 WAVES ด้วยเหตุนี้ รายการในตารางเจ้าของ dApps จึงมีการเปลี่ยนแปลงดังนี้
Bob ยังตัดสินใจถอนเงินบางส่วนจากกระเป๋าเงินที่ใช้ร่วมกัน แต่ทำผิดพลาดและพยายามถอน 1.5 WAVES
อย่างไรก็ตาม สัญญาอัจฉริยะได้ตรวจสอบสถานการณ์นี้แล้ว
Xena เป็นนักต้มตุ๋น เธอพยายามถอน 1 WAVES ออกจากบัญชีทั้งหมด
มันไม่ได้ผลสำหรับเธอเช่นกัน
ในส่วนถัดไป เราจะดูปัญหาที่ซับซ้อนมากขึ้นที่เกี่ยวข้องกับความไม่สมบูรณ์ของบัญชี Alice dApp
ที่มา: will.com