การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

Hello!

เมื่อเร็วๆ นี้ Waves Labs ประกาศ การแข่งขันสำหรับนักพัฒนาที่ทุ่มเทให้กับการเปิดตัวส่วนขยายภาษาสัญญาอัจฉริยะ RIDE สำหรับแอปพลิเคชันแบบกระจายอำนาจ Ride4Dapps เข้าสู่เครือข่ายทดสอบ!

เราเลือกกรณี DAO เพราะ เวนทัวรี วางแผนที่จะพัฒนา dApps ด้วยฟังก์ชันโซเชียล เช่น การลงคะแนน การระดมทุน การจัดการความน่าเชื่อถือ ฯลฯ
เราเริ่มต้นด้วยตัวอย่างง่ายๆค่ะ ช่วงถามตอบ และ ขี่ IDE - ตัวอย่างด้วย กระเป๋าเงินที่ใช้ร่วมกัน.

ลองดูตัวอย่างนี้ ทดสอบสมมติฐาน และดูสิ่งแปลกประหลาด:

ให้เรามี 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 ที่ใช้ลงนามธุรกรรมตรงกับธนาคารของเรา:
การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

หากคุณไม่มีวลีเริ่มต้นที่ตรงกัน เพียงเปลี่ยนไปใช้วลีดังกล่าวในแท็บบัญชีแล้วตรวจสอบอีกครั้ง
หลังจากนี้เราจะสร้าง ประกาศ และลงนามในธุรกรรมการโอน 3 WAVES Alice
คุณยังสามารถค้นหาข้อมูลของ Alice ผ่านตัวแปร env.accounts การกำหนดหมายเลขเริ่มต้นจาก 0 ดังนั้น Alice จึงเป็น env.accounts[1]
การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))

นอกจากนี้ยังสามารถสังเกตผลลัพธ์ได้ในเบราว์เซอร์ โดยลิงก์ไปยังผลลัพธ์จะถูกส่งกลับมาให้เราทันทีหลังจากดำเนินการ ธุรกรรม.

เราตรวจสอบให้แน่ใจว่ายอดคงเหลือของ Alice ได้รับการเติมเต็มด้วย 3 WAVES และยอดคงเหลือของธนาคารยังคงอยู่ที่ 10 - 3 - 0.01 = 0.699
การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

เราส่ง 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}))

หลังจากเติมเต็มยอดคงเหลือของผู้เข้าร่วมทั้งหมดแล้ว เราจะเห็น:
การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

ขั้นตอนที่ 2 สร้างบัญชี dApp

เราตกลงกันว่าอลิซจะเป็นผู้สร้างและเป็นเจ้าของแอปพลิเคชันแบบกระจายอำนาจ
ไปที่บัญชี ตั้งเป็น SEED และตรวจสอบ env.SEED ตรงกับ Alice

มาลองติดตั้งสคริปต์ (สัญญา) ที่ง่ายที่สุดที่เป็นไปได้ในบัญชีของ Alice
ผู้ติดต่ออัจฉริยะใน Waves เป็นเพรดิเคตที่ห้ามหรืออนุญาตให้ธุรกรรมขาออกประเภทใดก็ตามเกิดขึ้นภายใต้เงื่อนไขบางประการ ในกรณีนี้ เงื่อนไขนี้จะเป็น ALWAYS รหัสสัญญาเป็นจริง โทรปรับใช้ ()

การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

ค่าธรรมเนียมต่อธุรกรรม setScript 1400000/100000000 = 0.014 WAVES อลิซมี WAVES เหลืออยู่ 2.986 WAVES บนยอดเงินของเธอ

ตอนนี้เรามาลองติดตั้งตรรกะสัญญาอัจฉริยะที่ซับซ้อนมากขึ้นในบัญชี Alice ดังที่อธิบายไว้ใน ตัวอย่าง

Ride4DApps ขณะนี้มีคำอธิบายประกอบใหม่ 2 ประเภท:

  1. @โทรได้(i) — ใช้เป็นพารามิเตอร์ i ซึ่งเป็นข้อมูลเกี่ยวกับบัญชีที่เรียก/ลงนามในธุรกรรม มันเป็นผลลัพธ์ของฟังก์ชันนี้ที่กำหนดการเปลี่ยนแปลงสถานะของบัญชี dApp บัญชีอื่นๆ สามารถสร้างธุรกรรมและดำเนินการฟังก์ชันต่างๆ ด้วยคำอธิบายประกอบนี้ และเปลี่ยนสถานะของบัญชี dApp ได้
  2. @ผู้ตรวจสอบ(tx) — ตัวตรวจสอบธุรกรรมพร้อมพารามิเตอร์ธุรกรรม tx สอดคล้องกับตรรกะภาคแสดงจาก RIDE ในสำนวนนี้คุณสามารถอนุญาตหรือห้ามการเปลี่ยนแปลงเพิ่มเติมในตรรกะของสัญญาอัจฉริยะในบัญชี dApp

มาทำกัน Dapp บัญชีเป็นกระเป๋าเงินทั่วไปสำหรับผู้เข้าร่วมทุกคน
การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

หากต้องการตรวจสอบว่าสัญญาใดที่ใช้งานอยู่ในบัญชีของคุณในปัจจุบัน คุณสามารถคัดลอกรหัส base64 ของสัญญาอัจฉริยะใน Block Explorer และจดจำได้โดยใช้ตัวถอดรหัส (เช่น)
การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)
การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)
การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

เราตรวจสอบให้แน่ใจว่าตรรกะของสัญญาอัจฉริยะตรงกับที่เราคาดหวัง
อลิซมี WAVES เหลืออยู่ 2.972 WAVES บนยอดเงินของเธอ

dApp นี้ติดตามจำนวนเงินที่ผู้เข้าร่วมแต่ละคนบริจาคให้กับกองทุนทั่วไปผ่านกลไก ธุรกรรมข้อมูล - DataEntry (currentKey, newAmount)โดยที่ currentKey คือบัญชีที่เรียกใช้ฟังก์ชันการฝากเงิน และ newAmount คือมูลค่าของยอดคงเหลือที่เติม

Boob และ Cooper ฝากเงินเข้าบัญชี dApp ด้วย 1 WAVES
การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

เราทำผิดพลาดและการทำธุรกรรมไม่ผ่าน เนื่องจากแม้ว่าเราจะเชื่อมั่นว่าเรากำลังทำธุรกรรมในนามของ 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 }]}))

การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

Bob เหลือ 1.99 WAVES นั่นคือ Bob จ่ายค่าคอมมิชชั่น WAVES 0.01

การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

อลิซมี WAVES 2.972 บนยอดคงเหลือของเธอ ตอนนี้เป็น 3.972 ธุรกรรมได้รับการลงทะเบียนในบัญชี Alice ด้วย แต่ไม่มีการเรียกเก็บค่าคอมมิชชันจากบัญชี dApp (Alice)
หลังจากที่คูเปอร์เติมเงินในบัญชี ยอดคงเหลือของอลิซก็กลายเป็น 4.972 WAVES

การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

คุณสามารถค้นหาว่าใครเป็นเจ้าของ WAVES จำนวนเท่าใดในกระเป๋าเงินทั่วไปได้ใน Block Explorer ในแท็บ Data

Cooper เปลี่ยนใจที่จะทิ้งจำนวน 1 WAVES ไว้ในกระเป๋าเงินทั่วไป และตัดสินใจถอนความสัมพันธ์ครึ่งหนึ่ง เมื่อต้องการทำเช่นนี้ เขาต้องเรียกใช้ฟังก์ชันการถอน

การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

อย่างไรก็ตาม เราคิดผิดอีกครั้ง เนื่องจากฟังก์ชันการถอนมีพารามิเตอร์ที่แตกต่างกันโดยสิ้นเชิงและมีลายเซ็นที่แตกต่างกัน เมื่อคุณออกแบบสัญญาอัจฉริยะบน RIDE4DAPPS คุณควรคำนึงถึงประเด็นนี้

การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

ตอนนี้ Cooper มี 2.48 WAVES ในงบดุล ดังนั้น 3 WAVES - 1 - 0.01 และ + 0.5 - 0.01 ดังนั้นการโทรฝากและถอนแต่ละครั้งมีค่าใช้จ่าย 0.01 WAVES ด้วยเหตุนี้ รายการในตารางเจ้าของ dApps จึงมีการเปลี่ยนแปลงดังนี้

การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

Bob ยังตัดสินใจถอนเงินบางส่วนจากกระเป๋าเงินที่ใช้ร่วมกัน แต่ทำผิดพลาดและพยายามถอน 1.5 WAVES

การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

อย่างไรก็ตาม สัญญาอัจฉริยะได้ตรวจสอบสถานการณ์นี้แล้ว

Xena เป็นนักต้มตุ๋น เธอพยายามถอน 1 WAVES ออกจากบัญชีทั้งหมด

การเรียนรู้การเขียนสัญญาอัจฉริยะของ Waves บน RIDE และ RIDE4DAPPS ส่วนที่ 1 (กระเป๋าเงินหลายผู้ใช้)

มันไม่ได้ผลสำหรับเธอเช่นกัน

ในส่วนถัดไป เราจะดูปัญหาที่ซับซ้อนมากขึ้นที่เกี่ยวข้องกับความไม่สมบูรณ์ของบัญชี Alice dApp

ที่มา: will.com

เพิ่มความคิดเห็น