โปรแกรมพันธมิตรโอเพ่นซอร์สแบบกระจายอำนาจบนบล็อกเชน Waves

โปรแกรมพันธมิตรแบบกระจายอำนาจบนบล็อกเชน Waves ดำเนินการโดยเป็นส่วนหนึ่งของทุน Waves Labs โดยทีมงาน Bettex

โพสนี้ไม่ใช่การโฆษณา! โปรแกรมนี้เป็นโอเพ่นซอร์ส การใช้งานและการแจกจ่ายฟรี การใช้โปรแกรมช่วยกระตุ้นการพัฒนาแอปพลิเคชัน dApp และโดยทั่วไปจะส่งเสริมการกระจายอำนาจ ซึ่งเป็นประโยชน์ต่อผู้ใช้อินเทอร์เน็ตทุกคน

โปรแกรมพันธมิตรโอเพ่นซอร์สแบบกระจายอำนาจบนบล็อกเชน Waves

dApp สำหรับโปรแกรมพันธมิตรที่นำเสนอเป็นเทมเพลตสำหรับโครงการที่มีพันธมิตรเป็นส่วนหนึ่งของฟังก์ชันการทำงาน โค้ดนี้สามารถใช้เป็นเทมเพลตสำหรับการคัดลอก เป็นไลบรารี หรือเป็นชุดแนวคิดสำหรับการนำไปใช้ทางเทคนิค

ในแง่ของฟังก์ชันการทำงาน นี่คือระบบพันธมิตรปกติที่ใช้การลงทะเบียนกับผู้อ้างอิง การสะสมรางวัลหลายระดับสำหรับการอ้างอิง และแรงจูงใจในการลงทะเบียนในระบบ (เงินคืน) ระบบนี้เป็น dApp ที่ "บริสุทธิ์" กล่าวคือ เว็บแอปพลิเคชันโต้ตอบโดยตรงกับบล็อกเชน โดยไม่ต้องมีแบ็กเอนด์ ฐานข้อมูล ฯลฯ

เทคนิคที่ใช้ซึ่งมีประโยชน์ในโครงการอื่นๆ อีกมากมาย:

  • การเรียกบัญชีอัจฉริยะให้เป็นหนี้พร้อมการชำระคืนทันที (ในขณะที่โทรไม่มีโทเค็นในบัญชีเพื่อชำระค่าโทร แต่ปรากฏอยู่ที่นั่นอันเป็นผลมาจากการโทร)
  • PoW-captcha - การป้องกันการโทรอัตโนมัติความถี่สูงไปยังฟังก์ชั่นบัญชีอัจฉริยะ - คล้ายกับ captcha แต่ผ่านการพิสูจน์การใช้ทรัพยากรการคำนวณ
  • ค้นหาคีย์ข้อมูลโดยใช้เทมเพลต

ใบสมัครประกอบด้วย:

  • รหัสบัญชีอัจฉริยะในภาษา ride4dapps (ซึ่งตามที่วางแผนไว้ จะรวมเข้ากับบัญชีอัจฉริยะหลักที่จำเป็นต้องใช้ฟังก์ชันการทำงานของพันธมิตร)
  • wrapper.js ที่ใช้ระดับนามธรรมเหนือ WAVES NODE REST API
  • โค้ดบนเฟรมเวิร์ก vuejs ซึ่งเป็นตัวอย่างการใช้ไลบรารีและโค้ด RIDE

ให้เราอธิบายคุณสมบัติทั้งหมดที่ระบุไว้

เรียกบัญชีอัจฉริยะสำหรับหนี้พร้อมชำระคืนทันที

การโทร InvokeScript ต้องชำระค่าธรรมเนียมจากบัญชีที่เริ่มการทำธุรกรรม นี่ไม่ใช่ปัญหาหากคุณกำลังสร้างโปรเจ็กต์สำหรับผู้ที่ชื่นชอบบล็อกเชนซึ่งมีโทเค็น WAVES จำนวนหนึ่งในบัญชีของพวกเขา แต่หากผลิตภัณฑ์นี้มุ่งเป้าไปที่การใช้งานโดยบุคคลทั่วไป นี่จะกลายเป็นปัญหาร้ายแรง ท้ายที่สุดแล้ว ผู้ใช้จะต้องดูแลการซื้อโทเค็น WAVES (หรือสินทรัพย์อื่นที่เหมาะสมที่สามารถใช้เพื่อชำระค่าธุรกรรม) ซึ่งจะเพิ่มอุปสรรคสำคัญในการเข้าสู่โครงการ เราสามารถแจกจ่ายสินทรัพย์ให้กับผู้ใช้ที่สามารถชำระเงินสำหรับการทำธุรกรรมและเผชิญกับความเสี่ยงในการใช้งานในทางที่ผิดเมื่อมีการสร้างระบบอัตโนมัติเพื่อสูบสินทรัพย์สภาพคล่องออกจากระบบของเรา

จะสะดวกมากหากเป็นไปได้ที่จะเรียก InvokeScript "โดยเสียค่าใช้จ่ายของผู้รับ" (บัญชีอัจฉริยะที่ติดตั้งสคริปต์) และมีความเป็นไปได้ดังกล่าวแม้ว่าจะไม่ชัดเจนก็ตาม

หากภายใน InvokeScript คุณสร้าง ScriptTransfer ไปยังที่อยู่ของผู้โทร ซึ่งจะชดเชยโทเค็นค่าธรรมเนียมที่ใช้ไป การโทรดังกล่าวจะสำเร็จ แม้ว่าในเวลาของการโทรจะไม่มีทรัพย์สินในบัญชีการโทรก็ตาม สิ่งนี้เป็นไปได้เนื่องจากการตรวจสอบโทเค็นที่เพียงพอจะดำเนินการหลังจากการเรียกธุรกรรม แทนที่จะตรวจสอบก่อนหน้า เพื่อให้สามารถทำธุรกรรมด้วยเครดิต โดยต้องชำระคืนทันที

ScriptTransfer (i.caller, i.fee, หน่วย)

รหัสด้านล่างจะคืนค่าธรรมเนียมที่ใช้ไปโดยใช้กองทุนบัญชีอัจฉริยะ เพื่อป้องกันการใช้ฟีเจอร์นี้ในทางที่ผิด จำเป็นต้องใช้เช็คว่าผู้โทรชำระค่าธรรมเนียมในสินทรัพย์ที่ต้องการและอยู่ภายในขอบเขตที่เหมาะสม:

func checkFee(i:Invocation) = {
if i.fee > maxFee then throw(“unreasonable large fee”) else
if i.feeAssetId != unit then throw(“fee must be in WAVES”) else true
}

นอกจากนี้ เพื่อป้องกันการสิ้นเปลืองเงินทุนอย่างมุ่งร้ายและไร้สติ จึงจำเป็นต้องมีการป้องกันการโทรอัตโนมัติ (PoW-captcha)

PoW-แคปต์ชา

แนวคิดของ captcha แบบพิสูจน์การทำงานไม่ใช่เรื่องใหม่และมีการใช้งานแล้วในโครงการต่าง ๆ รวมถึงที่ดำเนินการบนพื้นฐานของ WAVES แนวคิดก็คือ ในการดำเนินการที่ใช้ทรัพยากรของโครงการของเรา ผู้เรียกจะต้องใช้ทรัพยากรของตนเองด้วย ซึ่งทำให้การโจมตีที่ทำให้ทรัพยากรหมดสิ้นมีราคาค่อนข้างแพง เพื่อการตรวจสอบที่ง่ายและต้นทุนต่ำว่าผู้ส่งธุรกรรมได้แก้ไขปัญหา PoW แล้ว จะมีการตรวจสอบรหัสธุรกรรม:

ถ้าใช้ (toBase58String(i.transactionId), 3) != “123” แล้วโยน (“หลักฐานการทำงานล้มเหลว”) อย่างอื่น

ในการทำธุรกรรม ผู้เรียกจะต้องเลือกพารามิเตอร์ดังกล่าวเพื่อให้รหัส base58 (id) ขึ้นต้นด้วยตัวเลข 123 ซึ่งสอดคล้องกับเวลาประมวลผลโดยเฉลี่ยสองสามสิบวินาทีและโดยทั่วไปก็สมเหตุสมผลสำหรับงานของเรา หากต้องการ PoW ที่ง่ายกว่าหรือซับซ้อนกว่านั้น ก็สามารถแก้ไขงานได้อย่างง่ายดายในลักษณะที่ชัดเจน

ค้นหาคีย์ข้อมูลโดยใช้เทมเพลต

ในการใช้บล็อกเชนเป็นฐานข้อมูล จำเป็นอย่างยิ่งที่จะต้องมีเครื่องมือ API สำหรับการสืบค้นฐานข้อมูลในรูปแบบคีย์-วาลตามเทมเพลต ชุดเครื่องมือดังกล่าวปรากฏเมื่อต้นเดือนกรกฎาคม 2019 ในรูปแบบของพารามิเตอร์ ?ตรงกัน ตามคำขอ REST API /addresses/data?matches=regexp. ตอนนี้ หากเราต้องการรับคีย์มากกว่าหนึ่งคีย์จากเว็บแอปพลิเคชันและไม่ใช่คีย์ทั้งหมดพร้อมกัน แต่เพียงบางกลุ่ม เราก็สามารถเลือกตามชื่อคีย์ได้ ตัวอย่างเช่น ในโครงการนี้ ธุรกรรมการถอนเงินจะถูกเข้ารหัสเป็น

withdraw_${userAddress}_${txid}

ซึ่งช่วยให้คุณได้รับรายการธุรกรรมสำหรับการถอนเงินสำหรับที่อยู่ที่ระบุโดยใช้เทมเพลต:

?matches=withdraw_${userAddress}_.*

ตอนนี้เรามาดูส่วนประกอบของโซลูชันที่เสร็จสมบูรณ์แล้ว

รหัส Vuejs

รหัสเป็นการสาธิตการทำงานที่ใกล้เคียงกับโครงการจริง ใช้การเข้าสู่ระบบผ่าน Waves Keeper และทำงานร่วมกับไลบรารีของaffiliate.js ซึ่งจะลงทะเบียนผู้ใช้ในระบบ ค้นหาข้อมูลธุรกรรม และยังช่วยให้คุณสามารถถอนเงินที่ได้รับไปยังบัญชีของผู้ใช้ได้

โปรแกรมพันธมิตรโอเพ่นซอร์สแบบกระจายอำนาจบนบล็อกเชน Waves

รหัสสำหรับ RIDE

ประกอบด้วยฟังก์ชั่นการลงทะเบียน กองทุน และถอนเงิน

ฟังก์ชั่น register จะลงทะเบียนผู้ใช้ในระบบ มีพารามิเตอร์สองตัว: ผู้อ้างอิง (ที่อยู่ผู้อ้างอิง) และพารามิเตอร์เกลือ ซึ่งไม่ได้ใช้ในโค้ดฟังก์ชัน ซึ่งจำเป็นสำหรับการเลือกรหัสธุรกรรม (งาน PoW-captcha)

ฟังก์ชัน (เช่นเดียวกับฟังก์ชันอื่นๆ จากโปรเจ็กต์นี้) ใช้เทคนิคการเรียกหนี้ ผลลัพธ์ของฟังก์ชันคือเพื่อเป็นเงินทุนในการชำระค่าธรรมเนียมในการเรียกใช้ฟังก์ชันนี้ ต้องขอบคุณโซลูชันนี้ ผู้ใช้ที่เพิ่งสร้างกระเป๋าเงินสามารถทำงานกับระบบได้ทันที และไม่ต้องกังวลกับการซื้อหรือรับสินทรัพย์ที่อนุญาตให้เขาชำระค่าธรรมเนียมการทำธุรกรรม

ผลลัพธ์ของฟังก์ชันการลงทะเบียนคือสองระเบียน:

${owner)_referer = referer
${referer}_referral_${owner} = owner

ซึ่งช่วยให้สามารถค้นหาไปข้างหน้าและย้อนกลับได้ (ผู้อ้างอิงของผู้ใช้ที่กำหนดและการอ้างอิงทั้งหมดของผู้ใช้ที่กำหนด)

ฟังก์ชั่นกองทุนเป็นมากกว่าแม่แบบสำหรับการพัฒนาฟังก์ชั่นการใช้งานจริง ในรูปแบบที่นำเสนอ จะนำเงินทั้งหมดที่โอนโดยการทำธุรกรรมและกระจายไปยังบัญชีของผู้อ้างอิงระดับ 1, 2, 3 ไปยังบัญชี “คืนเงิน” และบัญชี “การเปลี่ยนแปลง” (ทุกสิ่งที่เหลืออยู่เมื่อแจกจ่ายไปยังบัญชีก่อนหน้า บัญชีอยู่ที่นี่)

เงินคืนเป็นวิธีการจูงใจผู้ใช้ให้เข้าร่วมในระบบการอ้างอิง ผู้ใช้สามารถถอนส่วนหนึ่งของค่าคอมมิชชันที่จ่ายโดยระบบในรูปแบบของ “เงินคืน” เช่นเดียวกับรางวัลสำหรับการอ้างอิง

เมื่อใช้ระบบการอ้างอิง ฟังก์ชันกองทุนควรได้รับการแก้ไขและรวมเข้ากับตรรกะหลักของบัญชีอัจฉริยะที่ระบบจะทำงาน ตัวอย่างเช่น หากมีการจ่ายรางวัลการอ้างอิงสำหรับการเดิมพัน ฟังก์ชันกองทุนควรถูกสร้างไว้ในตรรกะของการวางเดิมพัน (หรือการดำเนินการอื่นที่กำหนดเป้าหมายไว้จะดำเนินการซึ่งจะมีการจ่ายรางวัล) รางวัลผู้อ้างอิงสามระดับจะถูกเข้ารหัสไว้ในฟังก์ชันนี้ หากคุณต้องการสร้างระดับมากขึ้นหรือน้อยลง สิ่งนี้จะได้รับการแก้ไขในโค้ดด้วย เปอร์เซ็นต์รางวัลถูกกำหนดโดยค่าคงที่ระดับ 1-ระดับ 3 ในโค้ดจะคำนวณเป็น จำนวน * ระดับ / 1000นั่นคือค่า 1 สอดคล้องกับ 0,1% (ซึ่งสามารถเปลี่ยนแปลงได้ในโค้ด)

การเรียกใช้ฟังก์ชันจะเปลี่ยนยอดเงินในบัญชีและสร้างรายการเพื่อวัตถุประสงค์ในการบันทึกของแบบฟอร์ม:

fund_address_txid = address:owner:inc:level:timestamp
Для получения timestamp (текущего времени) используется такая вот связка
func getTimestamp() = {
let block = extract(blockInfoByHeight(height))
toString(block.timestamp)
}

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

# withdraw log: withdraw_user_txid=amount:timestamp

ใบสมัคร

ส่วนหลักของแอปพลิเคชันคือไลบรารี Affiliate.js ซึ่งเป็นสะพานเชื่อมระหว่างโมเดลข้อมูล Affiliate และ WAVES NODE REST API ใช้ระดับนามธรรมโดยไม่ขึ้นกับกรอบงาน (สามารถใช้อันใดก็ได้) ฟังก์ชั่นที่ใช้งานอยู่ (ลงทะเบียน, ถอน) ถือว่ามีการติดตั้ง Waves Keeper บนระบบ โดยตัวไลบรารีเองไม่ได้ตรวจสอบสิ่งนี้

ใช้วิธีการ:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

การทำงานของวิธีการนั้นชัดเจนจากชื่อ พารามิเตอร์และข้อมูลที่ส่งคืนอธิบายไว้ในโค้ด ฟังก์ชันรีจิสเตอร์จำเป็นต้องมีความคิดเห็นเพิ่มเติม โดยจะเริ่มรอบการเลือกรหัสธุรกรรมเพื่อเริ่มต้นที่ 123 นี่คือ PoW-captcha ที่อธิบายไว้ข้างต้น ซึ่งป้องกันการลงทะเบียนจำนวนมาก ฟังก์ชันค้นหาธุรกรรมที่มีรหัสที่ต้องการ จากนั้นลงนามผ่าน Waves Keeper

โปรแกรมพันธมิตร DEX มีจำหน่ายที่ GitHub.คอม.

ที่มา: will.com

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