آموزش پارچه هایپرلجر: راهنمای جامع – قسمت 3

مجموعه آموزش زیر شامل سه مقاله است که جنبه های مختلفی را در مورد توسعه Hyincledger Fabric chaincode از عملیات CRUD ، حفاظت از داده ها و آزمایش کد به شما می آموزد..

قسمت 1

قسمت 2

قسمت 3

آموزش پارچه هایپرلجر: راهنمای جامع - قسمت 2

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

مروری بر این مجموعه:

  • مقاله 1: توسعه کد اصلی و ذخیره داده های خصوصی در مجموعه ها
  • مقاله 2: س quالات پیشرفته Chaincode و CouchDB GUI
  • مقاله 3: یک آموزش برای تست کد کد خود با MockStub

الزامات

  • 4 گیگابایت RAM (بیشتر ترجیح داده می شود)
  • Docker ، Docker-Compose ، ویرایشگر کد (به عنوان مثال Visual Studio Code) ، Git
  • NodeJS نسخه 8.9+ (ترجیحی 8.9.4 است – نکته: نسخه خود را با یک مدیر نسخه مانند change تغییر دهید)n‘)
  • دانش پایه JavaScript

اهداف

  • بیاموزید عملکردهای chaincode خود را آزمایش کنید
  • یاد بگیرید که عملکردها را مسخره و فراخوانی کنید
  • مقایسه نتایج با تست Chai

معرفی

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

در دو مقاله قبلی ، ما یاد گرفته ایم که هر دو عملکرد اصلی را به عنوان پیشرفته تر از کد chaincode ایجاد کنیم. اهمیت آزمایش کد شما را نمی توان دست کم گرفت. هنگام برخورد با قراردادهای هوشمند ، یک اشتباه واحد می تواند عواقب چشمگیری داشته باشد. بنابراین ، ما کیفیت عملکردهای chaincode خود را آزمایش خواهیم کرد.

شروع کنید

اطمینان حاصل کنید که کپی از کدی را در اختیار دارید michielmulders github / hyperledger-fabric-blockgeeks. توصیه می شود از آن استفاده کنید git کلون https://github.com/michielmulders/hyperledger-fabric-blockgeeks.git برای ایجاد یک کلون محلی از مخزن بر روی دستگاه خود. استفاده کنید آموزش git checkout-3 برای باز کردن کد این آموزش و بررسی قسمت سوم آموزش با آموزش git checkout-3

اگر در این آموزش تازه کار هستید ، برای فعال شدن و فعال شدن ، حتماً در بخش اول “بخش نصب Boilerplate” را بررسی کنید.

اکنون ، بیایید با ترمینال خود به آدرس برویم کد / گره پوشه از اینجا می توانیم بدویم آزمون اجرا npm برای شروع آزمایشات ما خود این آزمایشات در chaincode / node / test / tests.spec.ts. بیایید نگاهی به این تست ها بیندازیم.

آزمایش با استفاده از Mockstub

Jonas Snellinckx از TheLedger توضیح می دهد که ChaincodeMockStub چیست ، “این ChaincodeMockStub یک اجرای مسخره است. این بدان معنی است که شما می توانید کد Chainc خود را آزمایش کنید بدون اینکه در واقع شبکه خود را راه اندازی کنید. این تقریباً هر عملکردی را که ساز واقعی انجام می دهد ، اجرا می کند اما در حافظه. فقط این توابع (هنوز) پشتیبانی نمی شوند: getHistoryForKey ، getBinding ، getTransient ، setEvent ، getChannelID. “

تست Chaincode

برای شروع ، ما باید عملکرد “انتظار” را از چای بسته آزمایشی بنابراین ما می توانیم از مکانیسم های مختلف مقایسه مانند مقایسه اشیا response پاسخ یا کدهای وضعیت استفاده کنیم. Chai یک کتابخانه ادعای BDD / TDD برای گره و مرورگر است که می تواند با هر چارچوب آزمایش جاوا اسکریپت جفت شود..

وارد کردن {انتظار} از “chai” ؛

اگر نگاهی به tests.spec.ts پرونده ، می توانید آزمایشات گروهی را با توصیف کردن تابع ، این فقط یک روش کلی به سبک کد است. بعد ، ما از آی تی تابع برای تعریف آزمون های فردی.

بیشتر آزمایشات با ایجاد یک نمونه جدید از Chaincode ما شروع می شود. این همیشه لازم نیست زیرا ما همچنین می توانیم یک نمونه جهانی از chaincode خود تعریف کنیم که بتوانیم از هر تست فراخوانی کرده و توابع را فراخوانی کنیم. این به چگونگی و آنچه می خواهید آزمایش کنید بستگی دارد ، بیشتر ما سعی می کنیم تست های واحد را بنویسیم ، فقط عملکرد اصلی یک تابع را آزمایش می کنیم. در بیشتر مواقع ، ما یک نمونه Chaincode جدید تعریف خواهیم کرد ، اما همچنین یک نمونه Chaincode جهانی را با داده های ماشین نمونه که می تواند در چندین آزمایش استفاده شود ، نمونه خواهیم کرد. بیایید اولین تست های خود را بنویسیم!

1. اتمام Chaincode

آزمون InitLedger را امتحان کنید

اول از همه ، شبکه ما با تماس با ledLedger عملکردی که بلاک چین ما را با داده های Car پر می کند. برای اطمینان از اینکه بقیه Chaincode ما به درستی کار می کند ، باید وضعیت این عملکرد را آزمایش کنیم و بررسی کنیم که آیا همه داده ها در حالت بلاکچین وجود دارد یا خیر..

ما با وارد کردن chaincode شروع می کنیم و یک نمونه ایجاد می کنیم تا بتوانیم به تمام توابع تعریف شده دسترسی پیدا کنیم.

وارد کردن {MyChaincode} از ‘../src/MyChaincode’؛

const chaincode = MyChaincode جدید ()؛

بعد ، ما می توانیم اولین مورد آزمایشی خود را تعریف کنیم ، توصیف معنی داری از آن ارائه دهیم. همانطور که مشاهده می کنید ، ما یک نمونه mockstub جدید تعریف می کنیم که فقط در این آزمون استفاده خواهیم کرد زیرا می خواهیم مطمئن شویم که chaincode ما به درستی کامپایل می شود. مسخره کردن تابع chaincode را مقدار اولیه می دهد (تابع initLedger را فراخوانی می کند). ما یک شناسه معاملاتی منحصر به فرد به آن می دهیم tx1 و یک آرایه خالی را منتقل کنید زیرا به هیچ استدلالی نیاز ندارد. وقتی کد زنجیره ای مقداردهی اولیه می شود ، می خواهیم وضعیت اجرا را آزمایش کنیم و مطمئن شویم که همه چیز موفقیت آمیز بوده است. روش برابر عملکرد Chai انتظار برای مقایسه وضعیت مفید است.

آی تی("باید بدون مشکل شروع شود", async () => {

       stub = ChaincodeMockStub جدید ("MyMockStub", کد شکن)

       پاسخ ثابت = منتظر stub.mockInit ("tx1", []) ؛

       انتظار (پاسخ. وضعیت) .to.eql (200)

})

هر دو مسخره کردن و مسخره کردن تابع قول زیر را برگردانید:

وعده<{

   وضعیت: شماره؛

   پیام: رشته؛

   محموله بار: بافر؛

}>

داده های اولیه را تأیید کنید

در این لحظه ، ما مطمئن هستیم که کد Chainc به درستی تنظیم و تنظیم شده است. با این حال ، مطمئن نیستیم که همه داده ها به درستی به وضعیت بلاکچین ما اضافه شده اند. بیایید تمام قابلیتهای جستجو را برای مقایسه اشیا returned برگشتی ماشین با اتومبیل مورد انتظار آزمایش کنیم.

این بار ، ما یک نمونه جهانی از chackode mockstub ایجاد خواهیم کرد.

آی تی("باید قادر به راه اندازی و پرس و جو از همه اتومبیل ها باشد", async () => {

       stubWithInit = ChaincodeMockStub جدید ("MyMockStub", کد شکن)

       …

}

این بار ، مسخره کردن تابع برای فراخوانی تابع queryAllCars در chaincode استفاده می شود. queryResponse.payload حاوی یک بافر است که می توانیم از آن در عملکرد مقایسه خود استفاده کنیم. TheLedger کمکی را در اختیار شما قرار داده است که با استفاده از آن یک بار بافر را به یک شی JSON تبدیل می کند تبدیل یاور از @ theledger / fabric-mock-stub. تابع expect شامل یک روش عمیق است که می تواند اشیا J JSON را کاملاً مقایسه کند. ما نتیجه را با اشیا initial اولیه ای که در آن تعریف کردیم مقایسه می کنیم ledLedger تابع.

ساخت queryResponse = منتظر stubWithInit.mockInvoke ("txID2", ["queryAllCars"]) ؛

انتظار (Transform.bufferToObject (queryResponse.payload)). to.deep.eq ([

           {

               ساخت: “تویوتا”,

               مدل: ‘پریوس’,

               رنگ آبی’,

               مالک: ‘Tomoko’,

               docType: ‘ماشین’,

               کلید: ‘CAR0’

           },

       ])

   })

2. تست ایجاد اتومبیل

بیایید در یک مورد آزمایشی جدید ، شی create ایجاد اتومبیل را فراخوانی کنیم. این یک مثال خوب است زیرا به ما می آموزد که چگونه آرگومان ها را به عملکرد mockInvoke منتقل کنیم. این آزمون از دو ملفه تشکیل شده است. ابتدا ماشین جدید را به حالت بلاکچین اضافه می کنیم ، در مرحله بعدی ماشین برای مقایسه هر دو شی to مورد استعلام قرار می گیرد.

stub = ChaincodeMockStub جدید ("MyMockStub", کد شکن)

پاسخ const = منتظر stub.mockInvoke ("tx1", [‘createCar’، JSON.stringify ({

      کلید: ‘CAR0’,

      ساخت: "prop1",

      مدل: "prop2",

      رنگ: "prop3",

      مالک: ‘مالک’

})])؛

انتظار (پاسخ. وضعیت) .to.eql (200)

همانطور که مشاهده می کنید ، ما می توانیم از یک شی JSON رشته ای کامل به مسخره کردن عملکردی که شامل تمام خصوصیات ایجاد شی جدید Car است. پس از ایجاد ماشین ، وضعیت اعدام را تأیید می کنیم.

اکنون ماشین اضافه شده است ، ما می توانیم دوباره از آن پرس و جو کنیم تا از آن در عملکرد مقایسه ای خود استفاده کنیم. ما از کلید اتومبیلی که به تازگی “CAR0” ایجاد کرده ایم عبور می کنیم و یک تساوی عمیق را انجام می دهیم.

3. آزمایش مجموعه های خصوصی

بسیار خوب ، ما قسمت آخر این آموزش را وارد کردیم که در آن مجموعه های خصوصی بینش داده ها را آزمایش خواهیم کرد. باز هم ، mockstub یک گزینه جایگزین در حافظه برای مجموعه های خصوصی دارد ، بنابراین ما مجبور نیستیم شبکه Hyperledger Fabric خود را راه اندازی کنیم.

باز هم ، اولین کاری که ما انجام خواهیم داد عبور از استدلال ها برای ایجاد ماشین شخصی خود از طریق createPrivateCar تابع.

stub = ChaincodeMockStub جدید ("MyMockStub", کد شکن)

پاسخ const = منتظر stub.mockInvoke ("tx1", [‘createPrivateCar’، JSON.stringify ({

    کلید: ‘CAR0’,

    ساخت: "prop1",

    مدل: "prop2",

    رنگ: "prop3",

    مالک: ‘مالک’

})])؛

انتظار (پاسخ. وضعیت) .to.eql (200)؛

خوب ، بیایید شی مورد انتظار را با شی from مجموعه خصوصی در حافظه مقایسه کنیم. مقاله خرد به اندازه کافی هوشمند است که هنگام استفاده از عملکرد chaincode مجموعه حافظه را ایجاد می کند. مجموعه های خصوصی مجموعه ای از مجموعه داده های خصوصی را در اختیار شما قرار می دهد و ما مشخص می کنیم که کدام مجموعه را می خواهیم و چه شیئی را از این مجموعه بازیابی کنیم. این شی را می توان با جسم مورد انتظار خودرو مطابقت داد.

انتظار (Transform.bufferToObject (stub.privateCollections ["privateCarCollection"] ["CAR0"])). to.deep.eq ({

           ‘make’: ‘prop1’,

           ‘model’: ‘prop2’,

           ‘color’: ‘prop3’,

           ‘صاحب’: ‘مالک’,

           ‘docType’: ‘ماشین’

       })

همه تست ها را اجرا کنید

خوب ، وقت آن است که آزمایشات خود را دوباره انجام دهیم ، استفاده کنید آزمون اجرا npm. اگر همه چیز خوب پیش برود ، باید نمای خوبی از آنچه برای هر آزمون رخ داده و نتیجه آن است ، ببینید. کد باید 8 نتیجه منتقل شده را مانند تصویر زیر ارائه دهد.

چه چیزی یاد گرفتیم?

ChaincodeMockStub واقعاً مفید است زیرا به یک توسعه دهنده اجازه می دهد تا هربار کد شبکه خود را بدون راه اندازی شبکه آزمایش کند. این زمان توسعه را کاهش می دهد زیرا او می تواند از روش توسعه آزمون محور (TDD) درصورتی که نیازی به راه اندازی شبکه ندارد استفاده کند (بسته به مشخصات رایانه 40-80 ثانیه طول می کشد). همچنین ، دسترسی به مجموعه های خصوصی حافظه از طریق مجموعه های خصوصی آرایه. شما فقط به چند مورد از ویژگی های تست Chai مانند deep deep نیاز دارید تا به درستی کد چرخشی خود را آزمایش کنید.

صفحه بازی کد

  1. نمونه ای از chaincode ایجاد کنید که تابع initLedger را فراخوانی می کند.

در انتظار stub.mockInit ("tx1", []) ؛

  1. یک عملکرد طبیعی را فراخوانی کرده و آرگومان ها را منتقل کنید.

    پاسخ const = منتظر stub.mockInvoke ("tx1", [‘createCar’، JSON.stringify ({

          CarObject…

    })])؛

    3. یک تابع chaincode فراخوانی کنید که از مجموعه های خصوصی استفاده می کند و آرگومان ها را منتقل می کند.

در انتظار stub.mockInvoke ("tx1", [‘createPrivateCar’، JSON.stringify ({

    CarObject…

})])؛

  1. وعده پاسخ استاندارد از هر دو بازگشت مسخره کردن و مسخره کردن:

وعده<{

   وضعیت: شماره؛

   پیام: رشته؛

   محموله بار: بافر؛

}>

در ادامه می خوانید

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me