نصب Truffle HD Wallet

برای اینکه بتوانید تراکنش های خود را قبل از ارسال به نودهای Infura امضا کنید، می توانید Truffle HD Wallet را به پروژه خود اضافه کنید.

برای افزودن این wallet دستور زیر را اجرا کنید:

npm install --save @truffle/hdwallet-provider

سپس در یک ترمینال مجزا دستور زیر را اجرا کنید:

 ganache-cli

اگر Ganache به درستی نصب شده باشد با اجرای این دستور می توانیم آن را در ترمینال مشاهده کنیم. برای تست کارکرد اتصال به testnet، دستور زیر را اجرا کنید:

truffle console

در این مرحله احتیاج خواهیم داشت که تنظیماتی بر رووی hdwallet-provider که پیش از این نصب کردیم اعمال کنیم. صرفا برای یادآموری، hdwallet-provider یک اتصال شبکه راحت و آسان برای پیکربندی از طریق Infura به اتریوم است.

دستور زیر را در کنسول اجرا کنید:

 const HDWalletProvider = require('@truffle/hdwallet-provider');

(HDWalletProvider در نتیجه اجرا undefined را بر خواهد گرداند)

در مرحله بعد mnemonic خود را تعریف کنید:(mnemonic در اینجا یک رشته تصادفی شامل 12 کلمه است)

 const mnemonic = '12 words here';

(mnemonic در نتیجه اجرا undefined را بر خواهد گرداند)

در این مرحله wallet خود را اضافه خواهیم کرد:

 const wallet = new HDWalletProvider(mnemonic, "http://localhost:8545");

در نتیجه، با اجرای دستور wallet لیست حساب ها/آدرس هایی که می توانیم از آنها استفاده کنیم را مشاهده می کنیم:

 wallet

در نتیجه اجرای این دستور می توانید ببینید که یک wallet ساخته اید که می توانید از آن در ترمینال خود استفاده کنید. شما باید چیزی شبیه تصویر زیر در ترمینال خود مشاهده کنید:

نکته مهم: ما در اینجا از اولین آدرس از آرایه آدرس ها که wallet در اختیار ما قرار می دهد برای دیپلوی قرارداد هوشمند خود استفاده خواهیم کرد. باید اطمینان حاصل کنیم که این آدرس دارای موجودی است.

در تصویر زیر یک مثال از محل دسترسی به آدرس ذکر شده در ترمینال را مشاهده می کنید. دقت کنید که آدرسی که در اختیار شما قرار می گیرد با تصویر زیر متفاوت خواهد بود.

5 پسندیده

اتصال به Infura

برای استفاده از Infura قدم اول ثبت نام برای یک حساب کاربری است:

Infura

Ethereum API | IPFS API & Gateway | ETH Nodes as a Service | Infura

Infura’s development suite provides instant, scalable API access to the Ethereum and IPFS networks. Connect your app to Ethereum and IPFS now, for free!

شما می توانید تنها با یک نام کاربری و یک پسورد کار خود را شروع کنید!

بعد از ثبت نام شما در داشبورد خود یک پروژه خواهید ساخت، که چیزی شبیه تصویر زیر خواهد بود:

PROJECT ID همان چیزی است که ما برای تأیید اعتبار درخواستهای API خود به Infura از آن استفاده خواهیم کرد. اطمینان حاصل کنید که گزینه Rinkeby را در Endpoints انتخاب کرده اید، زیرا در این آموزش ما از این شبکه استفاده خواهیم کرد.

مطمئن شوید که دیگر در کنسول truffle نیستید!

در مسیر پروژه دستور زیر را اجرا کنید:

~$ npm install --save dotenv

اجرای این دستور این امکان را به ما می دهد تا بدون اینکه مستقیماً شناسه پروژه infura یا mnemonic خود را اضافه کنیم ، به اطلاعات محرمانه خود در فایل truffle-config خود دسترسی پیدا کنیم.

پس از نصب ، می خواهیم یک فایل .env ایجاد کنیم که حاوی اطلاعات حساس ما باشد. یادآوری: این اطلاعات نباید بصورت پابلیک قابل مشاهده باشد. این فایل حاوی Infura PROJECT ID و رشته mnemonic ما خواهد بود. برای درک عمیق تر اهمیت حفظ اسرار ، به این مقاله نگاهی بیندازید!

فایل .env باید چیزی شبیه تصویر زیر باشد(البته با اطلاعات شما):

INFURA_PROJECT_ID=INSERT YOUR PROJECT ID HERE (no quotations)

MNEMONIC="your mnemonic here"

بعد از این مرحله ما یک بار دیگر به سراغ فایل truffle-config می رویم و همه connection ها را برای Infura تنظیم می کنیم. این کار به ما این امکان را می دهد که برنامه خود را به زیرساخت Rinkeby Infura هدایت کنیم.

اکنون دسترسی به HDWalet Provider خود را که قبلاً نصب کرده ایم را با کد:

require(“dotenv”).config();

اضافه می کنیم تا بتوانیم به اطلاعات حساس از فایل .env دسترسی داشته باشیم. این اطلاعات جدید را در ابتدای فایل truffle-config قرار می دهیم.

کد ما باید در این مرحله به صورت زیر باشد:

require("dotenv").config();

const HDWalletProvider = require("@truffle/hdwallet-provider");

module.exports = {

networks: {

development: {

host: "127.0.0.1", // Localhost (default: none)

port: 8545, // Standard Ethereum port (default: none)

network_id: "*", // Any network (default: none)

},

rinkeby: {

provider: () =>

new HDWalletProvider(

process.env.MNEMONIC,

`https://rinkeby.infura.io/v3/${process.env.INFURA_PROJECT_ID}`

),

network_id: 4, // Rinkeby's id

gas: 5500000, // Rinkeby has a lower block limit than mainnet

confirmations: 2, // # of confs to wait between deployments. (default: 0)

timeoutBlocks: 200, // # of blocks before a deployment times out (minimum/default: 50)

skipDryRun: true, // Skip dry run before migrations? (default: false for public nets )

},

},

};

با نگاهی به قطعه کد بالا مشاهده می کنید که ما Rinkedby را به عنوان نتورکی که به آن متصل خواهیم شد تعریف کرده و HDWallet، mnemonic، و Infura PROJECT ID خود را به آن تخصیص می دهیم.

3 پسندیده

سلام وقت بخیر
طبق چیزی که گفتید برای گرفتن اتر شبکه rikeby باید از سایت rinkeby faucet استفاده بشه.
من آدرسم رو توییت میزنم و لینک توییتم رو وارد می کنم اما ارور * insufficient funds for gas * price + value میاد.
ممنون میشم راهنمایی کنید.

سلام
در این قسمت وقتی هدف دیپلوی قرارداد روی شبکه تست هست، چرا ganache-cli را اجرا می کنیم؟

برای ساخت truffle hd wallet

1 پسندیده