ویوز بلاکچین پر اوپن سورس وکندریقرت الحاق پروگرام

Waves blockchain پر مبنی ایک وکندریقرت الحاق پروگرام، جو Betex ٹیم کی طرف سے Waves Labs گرانٹ کے حصے کے طور پر نافذ کیا گیا ہے۔

پوسٹ سپانسر نہیں ہے۔! پروگرام اوپن سورس ہے، اس کا استعمال اور تقسیم مفت ہے۔ پروگرام کا استعمال dApp ایپلی کیشنز کی ترقی کو متحرک کرتا ہے اور عام طور پر، وکندریقرت کو فروغ دیتا ہے، جو نیٹ ورک کے ہر صارف کے لیے فائدہ مند ہے۔

ویوز بلاکچین پر اوپن سورس وکندریقرت الحاق پروگرام

ملحق پروگراموں کے لیے پیش کردہ dApp ان منصوبوں کے لیے ایک ٹیمپلیٹ ہے جس میں ان کی فعالیت کے حصے کے طور پر الحاق کو شامل کیا گیا ہے۔ کوڈ کو کاپی کرنے کے لیے ایک ٹیمپلیٹ کے طور پر، لائبریری کے طور پر، یا تکنیکی نفاذ کے لیے آئیڈیاز کے ایک سیٹ کے طور پر استعمال کیا جا سکتا ہے۔

فعالیت کے لحاظ سے، یہ ایک عام ملحقہ نظام ہے جو حوالہ دہندہ کے ساتھ رجسٹریشن، حوالہ جات کے لیے کثیر سطح کے معاوضے اور نظام میں رجسٹر کرنے کے لیے حوصلہ افزائی (کیش بیک) کو نافذ کرتا ہے۔ سسٹم ایک "خالص" dApp ہے، یعنی ویب ایپلیکیشن بلاک چین کے ساتھ اپنے بیک اینڈ، ڈیٹا بیس وغیرہ کے بغیر براہ راست بات چیت کرتی ہے۔

ایسی تکنیکیں استعمال کی جاتی ہیں جو بہت سے دوسرے منصوبوں میں بھی کارآمد ثابت ہو سکتی ہیں:

  • سمارٹ اکاؤنٹ کو فوری ادائیگی کے ساتھ کریڈٹ پر کال کرنا (کال کے وقت، کال کی ادائیگی کے لیے اکاؤنٹ پر کوئی ٹوکن نہیں ہوتے، لیکن وہ کال کے نتیجے میں وہاں ظاہر ہوتے ہیں)۔
  • PoW-captcha - سمارٹ اکاؤنٹ کے فنکشنز کی ہائی فریکوئنسی خودکار کالنگ کے خلاف تحفظ - کیپچا کی طرح، لیکن کمپیوٹنگ وسائل کے استعمال کے ثبوت کے ذریعے۔
  • ٹیمپلیٹ کے ذریعہ ڈیٹا کیز کی درخواست کریں۔

درخواست پر مشتمل ہے:

  • Ride4dapps زبان میں سمارٹ اکاؤنٹ کوڈ (جسے، منصوبہ بندی کے مطابق، مرکزی سمارٹ اکاؤنٹ میں ضم کر دیا گیا ہے، جس کے لیے آپ کو الحاق کی فعالیت کو نافذ کرنے کی ضرورت ہے)؛
  • js ریپر جو WAVES NODE REST API پر ایک تجریدی پرت کو نافذ کرتا ہے۔
  • vuejs فریم ورک پر کوڈ، جو لائبریری اور RIDE کوڈ کے استعمال کی ایک مثال ہے۔

آئیے تمام درج کردہ خصوصیات کو بیان کرتے ہیں۔

سمارٹ اکاؤنٹ کو فوری ادائیگی کے ساتھ قرض میں کال کرنا

InvokeScript کو کال کرنے کے لیے لین دین شروع کرنے والے اکاؤنٹ سے فیس کی ادائیگی کی ضرورت ہوتی ہے۔ یہ کوئی مسئلہ نہیں ہے اگر آپ بلاک چین گیکس کے لیے کوئی پروجیکٹ کر رہے ہیں جن کے اکاؤنٹ میں مخصوص تعداد میں WAVES ٹوکنز ہیں، لیکن اگر پروڈکٹ کا مقصد عوام کے لیے ہے، تو یہ ایک سنگین مسئلہ بن جاتا ہے۔ سب کے بعد، صارف کو WAVES ٹوکنز (یا کوئی اور مناسب اثاثہ جو لین دین کی ادائیگی کے لیے استعمال کیا جا سکتا ہے) کی خریداری میں شرکت کرنا چاہیے، جس سے پروجیکٹ میں داخل ہونے کے لیے پہلے سے ہی کافی حد تک اضافہ ہو جاتا ہے۔ ہم اثاثوں کو ان صارفین میں تقسیم کر سکتے ہیں جنہیں لین دین کی ادائیگی کی اجازت ہو گی اور جب ہمارے سسٹم سے مائع اثاثوں کو پمپ کرنے کے لیے خودکار نظام بنائے جائیں گے تو ان کے غلط استعمال کے خطرے کا سامنا کرنا پڑے گا۔

یہ بہت آسان ہوگا اگر InvokeScript کو "وصول کنندہ کی قیمت پر" کال کرنا ممکن ہو (وہ سمارٹ اکاؤنٹ جس پر اسکرپٹ انسٹال ہے)، اور یہ امکان موجود ہے، اگرچہ واضح طریقے سے نہیں۔

اگر InvokeScript کے اندر، کال کرنے والے کے پتے پر 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-کیپچا

پروف آف ورک کیپچا کا آئیڈیا نیا نہیں ہے اور اس کو پہلے ہی مختلف پروجیکٹس میں لاگو کیا جا چکا ہے جن میں WAVES پر مبنی پروجیکٹس بھی شامل ہیں۔ خیال کی بات یہ ہے کہ کوئی ایسا عمل انجام دینے کے لیے جو ہمارے پروجیکٹ کے وسائل کو ضائع کرتا ہے، کال کرنے والے کو اپنے وسائل بھی خرچ کرنے چاہئیں، جس سے وسائل کی کمی کا حملہ کافی مہنگا ہو جاتا ہے۔ بہت آسان اور کم لاگت کی توثیق کے لیے کہ ٹرانزیکشن بھیجنے والے نے PoW کا مسئلہ حل کر دیا ہے، ایک ٹرانزیکشن آئی ڈی چیک ہے:

اگر لے (toBase58String(i.transactionId), 3) != "123" تو پھینک دیں ("کام ناکام ہونے کا ثبوت")

لین دین کرنے کے لیے، کال کرنے والے کو ایسے پیرامیٹرز کا انتخاب کرنا چاہیے تاکہ اس کا بنیادی 58 کوڈ (id) نمبر 123 سے شروع ہو، جو پروسیسر کے وقت کے دسیوں سیکنڈ کے اوسط سے مساوی ہو اور عام طور پر ہمارے کام کے لیے مناسب ہو۔ اگر ایک آسان یا زیادہ پیچیدہ PoW کی ضرورت ہو، تو اس کام کو آسانی سے واضح طریقے سے تبدیل کیا جا سکتا ہے۔

ٹیمپلیٹ کے لحاظ سے ڈیٹا کیز سے استفسار کریں۔

بلاکچین کو ڈیٹا بیس کے طور پر استعمال کرنے کے لیے، ٹیمپلیٹس کا استعمال کرتے ہوئے ڈیٹا بیس کو کلیدی ویل کے طور پر استفسار کرنے کے لیے API ٹولز کا ہونا بہت ضروری ہے۔ اس طرح کی ٹول کٹ جولائی 2019 کے اوائل میں بطور پیرامیٹر نمودار ہوئی۔ میچز REST API کی درخواست پر /addresses/data?matches=regexp. اب، اگر ہمیں ویب ایپلیکیشن سے ایک ہی وقت میں ایک سے زیادہ کلیدیں حاصل کرنے کی ضرورت ہے اور تمام کلیدیں نہیں، بلکہ صرف کچھ گروپ، تو ہم کلید کے نام سے انتخاب کر سکتے ہیں۔ مثال کے طور پر، اس پروجیکٹ میں، واپسی کے لین دین کو بطور انکوڈ کیا گیا ہے۔

withdraw_${userAddress}_${txid}

جو آپ کو ٹیمپلیٹ کا استعمال کرتے ہوئے کسی بھی پتے کے لیے رقوم کی واپسی کے لیے لین دین کی فہرست حاصل کرنے کی اجازت دیتا ہے:

?matches=withdraw_${userAddress}_.*

اب آئیے تیار حل کے اجزاء کا تجزیہ کرتے ہیں۔

vuejs کوڈ

کوڈ ایک ورکنگ ڈیمو ہے، ایک حقیقی پروجیکٹ کے قریب۔ یہ Waves Keeper کے ذریعے لاگ ان کرتا ہے اور affiliate.js لائبریری کے ساتھ کام کرتا ہے، جس کی مدد سے یہ سسٹم میں صارف کو رجسٹر کرتا ہے، لین دین کے ڈیٹا سے پوچھتا ہے، اور آپ کو صارف کے اکاؤنٹ میں کمائی گئی رقم نکالنے کی بھی اجازت دیتا ہے۔

ویوز بلاکچین پر اوپن سورس وکندریقرت الحاق پروگرام

RIDE پر کوڈ

رجسٹر، فنڈ اور نکالنے کے افعال پر مشتمل ہے۔

رجسٹر فنکشن سسٹم میں صارف کو رجسٹر کرتا ہے۔ اس کے دو پیرامیٹرز ہیں: ریفرر (ریفرر ایڈریس) اور نمک کا پیرامیٹر جو فنکشن کوڈ میں استعمال نہیں ہوتا، جس کی ضرورت ٹرانزیکشن آئی ڈی (PoW-captcha ٹاسک) کو منتخب کرنے کے لیے ہوتی ہے۔

فنکشن (اس پروجیکٹ کے باقی فنکشنز کی طرح) قرض لینے کی تکنیک کا استعمال کرتا ہے، فنکشن کا نتیجہ اس فنکشن کو کال کرنے کے لیے فیس کی ادائیگی کے لیے فنڈ فراہم کرتا ہے۔ اس حل کی بدولت، ایک صارف جس نے ابھی ایک پرس بنایا ہے وہ فوری طور پر سسٹم کے ساتھ کام کر سکتا ہے اور اسے کسی ایسے اثاثے کے حصول یا وصول کرنے کے معاملے سے پریشان ہونے کی ضرورت نہیں ہے جو اسے ٹرانزیکشن فیس ادا کرنے کی اجازت دیتا ہے۔

رجسٹریشن فنکشن کا نتیجہ دو ریکارڈ ہے:

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

یہ آگے اور پیچھے کی تلاش کی اجازت دیتا ہے (اس صارف کا حوالہ دینے والا اور اس صارف کے تمام حوالہ جات)۔

فنڈ فنکشن حقیقی فعالیت کو فروغ دینے کے لیے ایک ٹیمپلیٹ کی حیثیت رکھتا ہے۔ پیش کردہ فارم میں، یہ ٹرانزیکشن کے ذریعے منتقل کیے گئے تمام فنڈز لیتا ہے اور انہیں 1st، 2nd، 3rd لیول کے ریفرر اکاؤنٹس، "کیش بیک" اکاؤنٹ اور "تبدیلی" اکاؤنٹ میں تقسیم کرتا ہے (ہر وہ چیز جو تقسیم کے دوران باقی رہ جاتی ہے) اکاؤنٹس یہاں ہو جاتے ہیں)۔

کیش بیک آخری صارف کو ریفرل سسٹم میں حصہ لینے کی ترغیب دینے کا ایک ذریعہ ہے۔ سسٹم کے ذریعے "کیش بیک" کی شکل میں ادا کیے گئے کمیشن کا حصہ صارف اسی طرح واپس لے سکتا ہے جیسے ریفرلز کے لیے انعامات۔

ریفرل سسٹم کا استعمال کرتے وقت، فنڈ کے فنکشن میں ترمیم کی جانی چاہیے، سمارٹ اکاؤنٹ کی بنیادی منطق میں بنایا جانا چاہیے جس پر سسٹم کام کرے گا۔ مثال کے طور پر، اگر کسی شرط کے لیے ریفرل انعام ادا کیا جاتا ہے، تو فنڈ فنکشن کو اس منطق میں بنایا جانا چاہیے جہاں شرط لگائی جاتی ہے (یا کوئی اور ہدف کی کارروائی کی جاتی ہے جس کے لیے انعام دیا جاتا ہے)۔ اس خصوصیت میں کوڈ شدہ حوالہ جات کے تین درجے ہیں۔ اگر آپ کم یا زیادہ لیول بنانا چاہتے ہیں تو اس کو کوڈ میں بھی درست کیا گیا ہے۔ انعام کا فیصد لیول 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. Реализует уровень абстракции, независимый от фреймворка (может быть использован любой). Активные функции (register, withdraw) предполагают, что в системе установлен Waves Keeper, сама библиотека это не проверяет.

لاگو کرنے کے طریقے:

fetchReferralTransactions
fetchWithdrawTransactions
fetchMyBalance
fetchReferrals
fetchReferer
withdraw
register

طریقوں کی فعالیت ناموں سے واضح ہے، کوڈ میں پیرامیٹرز اور واپسی کا ڈیٹا بیان کیا گیا ہے۔ رجسٹر فنکشن کو اضافی تبصروں کی ضرورت ہوتی ہے - یہ ٹرانزیکشن آئی ڈی سلیکشن سائیکل کو شروع کرتا ہے تاکہ یہ 123 سے شروع ہو - یہ اوپر بیان کردہ PoW کیپچا ہے، جو بڑے پیمانے پر رجسٹریشن سے تحفظ فراہم کرتا ہے۔ فنکشن مطلوبہ آئی ڈی کے ساتھ ایک ٹرانزیکشن تلاش کرتا ہے، اور پھر اس پر ویوز کیپر کے ذریعے دستخط کرتا ہے۔

DEX الحاق پروگرام دستیاب ہے۔ گٹ ہب ڈاٹ کام.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں