নীহারিকাতে কীভাবে একটি ডিপি অ্যাপ্লিকেশন তৈরি করবেন (পার্ট 2)

স্মার্ট চুক্তিগুলি সহজ করে তুলতে আমরা বেশ কয়েকটি গ্রন্থাগার প্রকাশ করেছি। এর অর্থ হ'ল আপনাকে ইতিমধ্যে আপনার জন্য প্রাথমিক কাজটি সম্পন্ন করার কারণে স্ক্র্যাচ থেকে আপনাকে স্পষ্টভাবে এই স্মার্ট চুক্তিগুলির কোনও তৈরি করতে হবে না।

"নেবুলাসে ডিপিএ কীভাবে তৈরি করবেন" এর দ্বিতীয় অংশে আমরা এই লাইব্রেরিগুলি, তারা কী করে এবং কীভাবে সেগুলি ব্যবহার করে সে সম্পর্কে শিখি।

বড় সংখ্যা

বিগনম্বার মডিউলটি বিগনিম্বার.জেএস ব্যবহার করে, যথেচ্ছ নির্ভুলতার সাথে দশমিক এবং অ-দশমিক গণিতের জন্য একটি জাভাস্ক্রিপ্ট লাইব্রেরি। চুক্তিটি লেনদেনের মান এবং মানের অন্যান্য স্থানান্তর প্রক্রিয়াজাত করতে সরাসরি বিগনম্বার ব্যবহার করতে পারে।

var মান = নতুন বিগনম্বার (0); মান.প্লাস (1); ...

গুদাম

মেমরি মডিউল নীহারিকাতে ডেটা স্টোরেজ সক্ষম করে। আরও স্পষ্টভাবে, এটি কোনও অর্থ প্রদানের পরে নেবুলাসে রাজ্যের ভেরিয়েবলের স্থায়ী সঞ্চয়স্থান সক্ষম করে, যেমন। H. GAS, একটি প্রচলিত মূল মান সংগ্রহস্থল ব্যবস্থার অনুরূপ similar লোকালকন্ট্রাক্ট স্টোরেজ অবজেক্ট হ'ল স্টুডিওজ অবজেক্ট যা নীহারিকাতে অন্তর্নির্মিত হয় যা আপনাকে স্ট্রিং ফর্ম্যাটে সংখ্যা, স্ট্রিং এবং জাভাস্ক্রিপ্ট অবজেক্ট ব্যবহার ও গ্রহণ করতে দেয়। কেবলমাত্র সেই চুক্তিতেই এই ডেটা সঞ্চিত তা অ্যাক্সেস এবং সম্পাদনা করতে পারে।

বুনিয়াদি

লোকাল কন্ট্রাক্ট স্টোরেজ তিনটি ক্রিয়াকলাপ সমর্থন করে, i। এইচ। সেট করুন, পান এবং ডেল যা আপনাকে ডেটা সংরক্ষণ, পড়তে এবং মুছতে দেয়:

"কঠোর ব্যবহার";
var BankVaultContract = ফাংশন () nothing // কিছুই};
BankVaultContract.prototype = {init: ফাংশন () nothing // কিছুই না}, সেট: ফাংশন (নাম, মান) {// নাম = "রবিন", মান = 10000 লোকালকন্ট্রাক্টরেজ.সেট ("নাম", নাম); // 'পুট' একটি 'সেট' লোকাল কন্ট্রাক্টসটরেজ.পুট ("মান", মান) এর সমতুল্য অপারেশন; ;, পান: ফাংশন () {ভের নাম = লোকালকন্ট্র্যাক্টরেজ.জেট ("নাম"); কনসোল.লগ (নাম); // প্রিন্টস 'রবিন' ভ্যারু মান = লোকালকন্ট্র্যাক্টরেজ.জেট ("মান"); কনসোল.লগ (মান); // প্রিন্টস '10000'}, ডেল: ফাংশন () result var ফলাফল = লোকালকন্ট্র্যাক্টরেজ.ডেল ("নাম"); কনসোল.লগ (ফলাফল); // প্রিন্টস 'রবিন' // 'ডিলিট' একটি অপারেশন যা 'ডেল' ফলাফলের সাথে সমান হয় = লোকাল কন্ট্র্যাক্টসোজারেজ.ডিলেট ("মান"); কনসোল.লগ (ফলাফল); // প্রিন্ট '10000' // ডেটা মুছে ফেলার পরে আর পড়া যাবে না}};
মডিউল.এক্সপোর্টস = ব্যাংকভোল্টকন্ট্র্যাক্ট;

উন্নত

উপরে উল্লিখিত মৌলিক ব্যবহারগুলি ছাড়াও, লোকালকন্ট্রাক্ট স্টোরেজ স্টোরেজ বৈশিষ্ট্যগুলি নির্ধারণ করে এবং ম্যাপিংগুলিকে অবজেক্টগুলিতে সংরক্ষণ করার পাশাপাশি সিরিয়ালাইজেশন পদ্ধতিগুলিকেও সমর্থন করে।

  • স্টোরেজ বৈশিষ্ট্য

একটি চুক্তি সম্পত্তি একটি স্টোরেজ সম্পত্তির সাথে লিঙ্ক করা যেতে পারে যেখানে চুক্তিটি পড়া এবং লেখা উভয়ই লোকালকন্ট্রাস্টসরেজে পরিচালিত হয়। এই ধরণের বন্ধন সংজ্ঞায়িত করার দুটি পদ্ধতি রয়েছে:

// বর্ণনাকারীর সাথে `eldName` to` اعتراض` নামক কোনও বস্তুর সম্পত্তি বাঁধুন। // ডিফল্ট বর্ণনাকারী হ'ল JSON.parse () / JSON.stringify ()। বর্ণনাকারী "নাল" বা "অপরিজ্ঞাত" হোক না কেন, ডিফল্ট মান ব্যবহৃত হয়। // যে ফিরে দিন। DefineProperty (اعتراض, ফিল্ডনেম, [বর্ণনাকারী]); // এক ব্যাচে একাধিক বৈশিষ্ট্য `obj` এ আবদ্ধ করুন। // যে ফিরে দিন। DefineProperties (objজেক্ট, {ফিল্ডনেম 1: বর্ণনাকারী 1, ফিল্ডনাম 2: বিবরণী 2});

সাধারণত আমরা আরম্ভের মধ্যে বিট সংরক্ষণ করার জন্য চুক্তির বৈশিষ্ট্যগুলি ম্যাপ করি:

"কঠোর ব্যবহার";
var BankVaultContract = ফাংশন () {// 'নাল' এর কারণে স্ট্যান্ডার্ড বর্ণনাকারী ব্যবহৃত হয়। স্থানীয় কন্ট্রাক্টসটরেজ.ডিফাইনপ্রোপার্টি (এটি, "নাম 1", নাল); // একটি কাস্টম বর্ণনাকারী বাস্তবায়ন। // বিগ করা হলে বিগনম্বার অবজেক্টটি ফিরিয়ে দিন। লোকালকন্ট্রটসটরেজ.ডিফাইনপ্রোপার্টি (এটি, "মান 1", {স্ট্রিংফাই: ফাংশন (আপত্তি) obj রিটার্ন অজ টু স্ট্রিং (); ars, পার্স: ফাংশন (টিআর) {নতুন বিগনম্বার (স্ট্র);}}) রিটার্ন করুন; // স্ট্যান্ডার্ড সিরিয়ালাইজেশন প্রয়োগের সাথে ব্যাচ বাঁধাই। স্থানীয় কন্ট্রাক্টসটরেজ.ডিফাইনপোপারটিস (এটি, {নাম 2: নাল, মান 2: নাল}); }; মডিউল.এক্সপোর্টস = ব্যাংকভোল্টকন্ট্র্যাক্ট;

এরপরে, আপনি বাধ্যতামূলক বৈশিষ্ট্যগুলি পড়তে এবং লিখতে পারেন যেন আপনি সরাসরি মেমোরিটিতে প্রবেশ করছেন:

BankVaultContract.prototype = {init: ফাংশন (নাম, মান) {// নাম = "রবিন", মান = 1 this.name1 = নাম; this.value1 = মান; ;, টেস্ট স্টোরেজ: ফাংশন (নাম, মান) {// নাম = "রোবিন", মান = 2 this.name2 = নাম; this.value2 = মান; bool r = this.value1.lessThan (নতুন বিগনম্বার (0)); কনসোল.লগ (এটির নাম 1 + ":" + আর); // রবিন: ভুল কনসোল.লগ (this.name2 + ":" + this.value2); // রোবিন: 2}};
  • কার্ডের ডেটা সংরক্ষণ করুন

নেবুলাস মেমরি অপারেটরগুলির সাথে মুছে ফেলা, পেতে, সেট করতে এবং এমন কিছু দৃশ্যের জন্য সেট করার জন্য একটি কার্ড কাঠামো প্রয়োগ করে যেখানে কী মান ডেটা সংরক্ষণ করা দরকার। এটি অর্জনের জন্য, আপনি চুক্তি সম্পত্তিটিকে কার্ড হিসাবে সংজ্ঞায়িত করতে পারেন। এর জন্য দুটি পদ্ধতিও রয়েছে:

// সাধারণ বাঁধাই, স্ট্যান্ডার্ড বর্ণনাকারী বাস্তবায়ন DefineProperty হিসাবে সমান। // যে ফিরে দিন। DefineMapProperty (اعتراض, মানচিত্রের নাম, [বর্ণনাকারী]); // স্ট্যাক বাইন্ডিং। // যে ফিরে দিন। DefineMapProperties (আপত্তি, {মানচিত্রের নাম 1: বর্ণনাকারী 1, মানচিত্রের নাম 2: বিবরণী 2});

আসুন কার্ড ব্যবহারের একটি উদাহরণটি দেখুন:

'কঠোর ব্যবহার'; var BankVaultContract = ফাংশন () {লোকালকন্ট্র্যাক্টসোজারেজ.ডিফাইনম্যাপপ্রপার্টি (এটি, "ইউজারম্যাপ"); লোকালকন্ট্রটসটরেজ.ডিফাইনম্যাপপ্রপার্টি (এটি, "ইউজারবালান্সম্যাপ", {স্ট্রিংফাই: ফাংশন (আপত্তি) obj রিটার্নজেজ.টোস্ট্রিং (); ars, পার্স: ফাংশন (স্ট্র) {নতুন বিগনম্বার (স্ট্র);}}) ফেরান; স্থানীয় কন্ট্রাক্টসটরেজ.ডিফাইনম্যাপপ্রপার্টি (এটি, {কী 1 ম্যাপ: নাল, কী 2 ম্যাপ: নাল}); }; BankVaultContract.prototype = {init: ফাংশন () {}, টেস্টস্টোরেজ: ফাংশন () {this.userMap.set ("রবিন", "1"); this.userBalanceMap.set ("রবিন", নতুন বিগনম্বার (1)); ;, টেস্টের পড়ুন: ফাংশন () {// পড়ুন এবং সংরক্ষণ করুন ডেটা ভারসাম্য রক্ষা করুন = this.userBalanceMap.get ("রবিন"); this.key1Map.set ("রবিন", ভার্সন.টোস্ট্রিং ()); this.key2Map.set ("রবিন", ভার্সন.টোস্ট্রিং ()); }}; মডিউল.এক্সপোর্টস = ব্যাংকভোল্টকন্ট্র্যাক্ট;

ব্লকচেইন

ব্লকচেইন মডিউলটি বর্তমানে সম্পাদনকারী চুক্তির মধ্যে লেনদেন এবং ব্লকটি পুনরুদ্ধার করতে ব্যবহৃত হয়। এছাড়াও, চুক্তি থেকে এনএএস নেওয়া যেতে পারে এবং ঠিকানা যাচাইকরণ সরবরাহ করা হয়।

ব্লকচেইনের দুটি বৈশিষ্ট্য রয়েছে:

  1. বৈশিষ্ট্য সহ চুক্তি প্রক্রিয়াকরণের জন্য বর্তমান ব্লকটি ব্লক করুন:

- টাইমস্ট্যাম্প ব্লক টাইমস্ট্যাম্প

- হ্যাশ ব্লক হ্যাশ

- ব্লক উচ্চতা

2. লেনদেন বৈশিষ্ট্য সহ চুক্তি প্রক্রিয়াকরণের জন্য বর্তমান লেনদেন:

- হ্যাশ লেনদেনের হ্যাশ

- ঠিকানা থেকে লেনদেন থেকে

- ঠিকানায় লেনদেন

- মান লেনদেনের মান, চুক্তি ব্যবহারের জন্য একটি বিগ নাম্বার অবজেক্ট

- ননস লেনদেন

- টাইমস্ট্যাম্প লেনদেনের টাইমস্ট্যাম্প

- গ্যাসপ্রসেস লেনদেনের গ্যাসপ্রিস, চুক্তি ব্যবহারের জন্য একটি বিগনম্বার অবজেক্ট

- গ্যাসলিমিট লেনদেনের গ্যাসলিমিট, চুক্তিটি ব্যবহারের জন্য একটি বিগ নাম্বার অবজেক্ট

এবং ব্লকচেইন দুটি পদ্ধতি সরবরাহ করে:

  1. স্থানান্তর (ঠিকানা, মান) এনএএস থেকে চুক্তি থেকে ঠিকানায় স্থানান্তর করে।
  • পরম ঠিকানা: নীহারিকার ঠিকানাটি NAS কে প্রেরণ করার জন্য
  • প্যারাম মান: উত্তীর্ণ মান, একটি বিগ নাম্বার অবজেক্ট

রিটার্নস: 0 স্থানান্তর সফল, 1 স্থানান্তর ব্যর্থ হয়েছে।

২) যাচাইকরণ ঠিকানা (ঠিকানা) প্যারামিটার ঠিকানাটি একটি বৈধ নেবুলাস ঠিকানা কিনা তা পরীক্ষা করে।

রিটার্ন: 1 ঠিকানা বৈধ, 0 ঠিকানা অবৈধ।

এই মডিউলটির একটি সাধারণ উদাহরণ এখানে:

'কঠোর ব্যবহার'; var BankVaultContract = ফাংশন () {}; BankVaultContract.prototype = {init: ফাংশন () {কনসোল.লগ ('init: blockchain. block.height =' + blockchain. block.height); কনসোল.লগ ('init: blockchain.transaction.from =' + ব্লকচেইন.টান্সঅ্যাকশন.ফর্ম); ;, স্থানান্তর: ফাংশন (ঠিকানা, মান) {var ফলাফল = blockchain.transfer (ঠিকানা, মান); কনসোল.লগ ("স্থানান্তর ফলাফল:", ফলাফল); ;, যাচাইকরণ ঠিকানা: ফাংশন (ঠিকানা) result ভের রেজাল্ট = ব্লকচেইন.ভেরিফাইএড্রেস (ঠিকানা); কনসোল.লগ ("যাচাইকরণের ঠিকানা:", ফলাফল); }}; মডিউল.এক্সপোর্টস = ব্যাংকভোল্টকন্ট্র্যাক্ট;

ইভেন্ট

ইভেন্টগুলিতে মডিউলটি চুক্তিতে সম্পাদন ইভেন্টগুলি রেকর্ড করতে ব্যবহৃত হয়। রেকর্ড করা ইভেন্টগুলি ইভেন্ট ট্রিতে চেইনে সংরক্ষণ করা হয়, যা এক্সিকিউশন লেনদেনের হ্যাশ সহ rpc.getEventsByHash থেকে পাওয়া যায়। সমস্ত চুক্তি ইভেন্টের বিষয়গুলির একটি শৃঙ্খলাবদ্ধ রয়েছে। কাস্টম থিম সহ উপসর্গ। ব্যবহারটি হ'ল:

ইভেন্ট.ট্রিগার (বিষয়, আপত্তি);
  • বিষয়: কাস্টম বিষয়
  • আপত্তি: JSON অবজেক্ট

এখানে উদাহরণ:

'কঠোর ব্যবহার'; var BankVaultContract = ফাংশন () {}; BankVaultContract.prototype = {init: ফাংশন () {},
পরীক্ষার ইভেন্ট: ফাংশন () {// সংরক্ষিত বিষয় আসলে "চেইন.কন্ট্রাক্ট.টিক" ইভেন্ট। ট্রিগার ("বিষয়", {ডেটা: {মান: "ইভেন্ট টেস্ট।"}}); }}; মডিউল.এক্সপোর্টস = ব্যাংকভোল্টকন্ট্র্যাক্ট;

কনসোল

কনসোল মডিউলটি একটি সাধারণ ডিবাগ কনসোল সরবরাহ করে যা ওয়েব ব্রাউজারগুলির দ্বারা সরবরাহ করা জাভাস্ক্রিপ্ট কনসোল পদ্ধতির অনুরূপ। কনসোল যাবতীয় পদ্ধতির নাম নির্ধারিত একটি নির্দিষ্ট স্তরে নেবুলাস লগারকে প্রেরিত সমস্ত আরগগুলি প্রিন্ট করে।

  • কনসোল.লগ ([… আরগস) ]) - - তথ্য স্তর
  • কনসোল.দেবগ ([… আরগস) ]) - - ডিবাগ স্তর
  • কনসোল.ওয়ার্ন ([… আরগস) ]) - - সতর্কতা স্তর
  • কনসোল.অরর ([… আরগস) ]) - - ত্রুটি স্তর
  • console.info ([… আরগস) ]) - - কনসোল.লগের জন্য উপমা ()

আমরা এখন নেতৃস্থানীয় কার্যকরী মডিউল সম্পর্কে কথা বলা শেষ। এর পরে, চলুন কন্ট্রাক্ট ফাংশনগুলি একবার দেখুন।

আমি কীভাবে একটি চুক্তি খুলব?

স্থানীয় নোড শুরু করে নীহারিকার মূল বা পরীক্ষামূলক নেটওয়ার্কে যোগদানের প্রস্তাবিত পদ্ধতির। এটি কীভাবে করা যায় তার জন্য একটি দ্রুত গাইড এখানে।

নোড শুরু করার পরে, চুক্তি ফাংশনটি কল করার আগে আপনাকে প্রথমে আনলক অ্যাকাউন্ট () দিয়ে নিজের অ্যাকাউন্টটি আনলক করা উচিত:

// অনুরোধ কার্ল -i -H 'সামগ্রীর ধরণ: অ্যাপ্লিকেশন / জেসন'-এক্স পোস্ট পোস্ট: // লোকালহোস্ট: 8685 / ভি 1 / অ্যাডমিন / অ্যাকাউন্ট / আনলক-ডি 'address "ঠিকানা": "n1czGUvbQQton6KUWga4wKDLLKYDEn39mEk", "পাসফ্রেজ": " পাসফ্রেজ "," সময়কাল ":" 1000000000 "} '// ফলাফল {" ফলাফল ": {" ফলাফল ": সত্য}

তারপরে আপনি স্মার্ট চুক্তিতে কল করার জন্য সেন্ড ট্রান্সজেকশন () পদ্ধতিটি ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, পূর্ববর্তী নমুনা চুক্তিতে টেস্টএভেন্ট () কল করুন:

// অনুরোধ কার্ল -i -H 'স্বীকার করুন: অ্যাপ্লিকেশন / জেসন' -এক্স পোস্ট পোস্ট: // লোকালহোস্ট: 8685 / ভি 1 / অ্যাডমিন / লেনদেন -H 'বিষয়বস্তুর ধরণ: অ্যাপ্লিকেশন / জেসন' -ডি '{"থেকে": "এন 1 এনজেডিপিডিআরজেসিভিএইচএনএফএন 3 ভি 6ইএনএসডিএডি 5 জি 8 ইউপিভিপোসিসি "," থেকে ":" n1qsgj2C5zmYzS9TSkPTnp15bhCCocRPwno "," মান ":" 100 "," ননস ": 8," গ্যাসপ্রাইস ":" 1000000 "," গ্যাসলিমিট ":" 2000000 "," চুক্তি ": function" ফাংশন ":" পরীক্ষা "," আরগস ":" [] "}} '// ফলাফল {" ফলাফল ": t" txhash ":" b55358c2e12c1d48d4e6beaee7002a59138294fb2896ea8059ff5277553af59f "," চুক্তি_আড্রেস ":"

আরপিসি ম্যানুয়াল সম্পর্কে আরও তথ্যের জন্য ব্যবহারকারী এবং প্রশাসক এপিআই দেখুন।

এরপর কি?

পরবর্তী নিবন্ধে আমরা স্মার্ট চুক্তির একটি নতুন বৈশিষ্ট্য প্রবর্তন করব, i। এইচ। "গ্রহণ" ফাংশন।