در بخش اول نحوه اتصال به اتریوم اصلی و ایجاد یک نود اتریوم شبکه واقعی و در بخش دوم به چگونگی راه اندازی یک بلاکچین خصوصی، ایجاد حساب، ماین کردن و انجام تراکنش بر روی شبکه خصوصی ایجاد شده، پرداخته شد. در این مقاله نحوه اتصال به شبکه های تستی اتریوم را آموزش می دهیم و با قابلیت های بیشتر geth آشنا می شویم.
همان طور که گفته شد geth قابلیت اتصال به انواع شبکه اتریوم و ایجاد یک نود اتریوم را دارد. با توجه به اینکه ایجاد یک نود کامل توسط geth و ذخیره تمام بلاک های ایجاد شده تا کنون، زمان و حافظه زیادی نیاز دارد، گزینه های دیگری در geth برای به روزرسانی نود شبکه وجود دارد:
-
Full: در این حالت نود ایجاد شده، تمام هدر بلاک ها و بدنه بلاک ها را ذخیره می کند و تمام بلاک ها و تراکنش های آن ها را با شروع از بلاک آغازین اعتبارسنجی می کند. که در نهایت باعث ایجاد یک full node بر روی سیستم می شود. که آخرین وضعیت کل بلاکچین را نگه داری می کند. و تمام بلاک های ورودی جدید را نیز اعتبارسنجی می کند. این نوع نود نباید با نود آرشیو(archive node) اشتباه گرفته شود که تمام این کارها را انجام می دهد و علاوه براین تاریخچه کل تراکنش های بلاکچین را نیز نگه داری می کند.
-
Fast: در این حالت نیز نود ایجاد شده، تمام هدر بلاک ها و بدنه بلاک ها را ذخیره می کند ولی هیچ کدام از تراکنش های قبلی را اعتبارسنجی نمی کند تا رسیدن به تراکنش های جدید. از اینجا به بعد مشابه نود کامل یا حالت قبل رفتار می کند. در مدت زمان آپدیت شما می توانید تمام بلاک ها را داشته باشید ولی در عین حال کاملا آپدیت نباشید. به این دلیل که وضعیت حساب ها(مانند موجودی ها، کد قراردادهای هوشمند) ممکن است هنوز آپدیت نشده باشد. دانلود این اطلاعات به طور موازی با دانلود بلاک ها انجام می شود و ممکن است خیلی بیشتر از دانلود بلاک ها طول بکشد.
-
Light: در این حالت تنها وضعیت حال حاضر بلاکچین دانلود می شود. بنابراین برای اعتبارسنجی تراکنش ها، نیازمند این است که از یک نود کامل یا آرشیو درخواست کند.
اتصال به یک شبکه تست اتریوم
اتصال به یک شبکه تستی به کمک geth بسیار ساده است. به عنوان مثال برای اتصال به شبکه تستی Rinkeby دستور زیر را اجرا کنید با حالت به روزرسانی fast
(در صورتی که در اجرای دستور با حالت fast دچار خطا می شوید؛ می توانید از حالت snap
استفاده کنید). پس از اجرای این دستور وارد کنسول جاوا اسکریپت می شوید.
$ geth --rinkeby --syncmode fast console
هنگامی که فرآیند بروزرسانی آغاز شد، می توانید اطلاعات نود را تا جایی که آپدیت شده است بررسی کنید. وضعبت نود خود را می توانید با دستور eth.syncing مشاهده کنید.
> eth.syncing
{
currentBlock: 1846452,
highestBlock: 2970863,
knownStates: 0,
pulledStates: 0,
startingBlock: 1841089
}
این اطلاعات هم زمان با آپدیت شدن نود تغییر می کند.
مشاهده اطلاعات یک بلاک
می توانید اطلاعات مربوط به یک شماره بلاک نود شما آن را داشته باشد؛ با دستور زیر مشاهده کنید:
> eth.getBlock(1830000)
{
difficulty: 2,
extraData: "0xd783010802846765746887676f312e392e34856c696e7578000000000000000042eb768f2244c8811c63729a21a3569731535f066635f83421bf059cd8111f180f0727128685bae47ffc57839b00206d1ad20c69a1981b489f772031b279182d99e65703f0076e4812653aab85fca0f0d6ae8250b8348c94847280928c79fb3b63ca453efc18cbc391de84dbd87db83b20935d3e89f5dd91b239241f4286de636a1c1d431d162611438e5fe8a148b6ff13c4422ff4212ac94a35b271da789fa309f485e7be631f5322cc9ac22eedc9986414dd089afd92f800",
gasLimit: 7212968,
gasUsed: 741031,
hash: "0xa20b9701c16c2c17cf5a844dba59b33530913bb227bbf17cf5ecb052d2b287b7",
logsBloom: "0x00000000000000000000008000000000000000000000200080000000000000000000000000000000000000000000000000000000000000000000008200000000000000000000000000000008000000000000000000000400000000000000000800001000000000400000008000000000000000100000040000000010000000000400000000000000000000000000000000010000020000000000000000000200000000000000400000000000000000000001000000000000000000400000000000000002000000000001000000000000000020000000000000000000000000000000000000000400000000001000000400000000000000000000000020020100",
miner: "0x0000000000000000000000000000000000000000",
mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
nonce: "0x0000000000000000",
number: 1830000,
parentHash: "0x61aceb1112c79f12fd4acae7d5c263f58c0cfc23cabf996d0f81d3426c9db5fc",
receiptsRoot: "0x18cd5444fbc45c3b45536ee1c0d66ff1498a43425ca8f4e7594af25bd87ad2fe",
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
size: 2092,
stateRoot: "0x84c27ff36faabd161a5c850906581df27fa758bccdf9ac660602399ecca39972",
timestamp: 1519519986,
totalDifficulty: 3388435,
transactions: ["0x77dd615bcc63322f436a747f43d02f7ad15ebbf7867c7dbb065e6a1a4d58a2cf", "0xa367a991aaa44b602247d5d12e748dc216fc71a8cd1408107076643094d83377", "0xf6dc6e3cbca47eaee35f7368372e2fb4336d4c7869ba4447d785c2af63545caf", "0xab50463b9617b6fdea0b4c6f8c80607608c36918a33c3b45dfd2d336ced7d50a"],
transactionsRoot: "0x130985bb247d15b853dca099ad8d9f900a1d24ea2a68828b63530ef7090b7dad",
uncles: []
}
همان طور که مشاهده می کنید آدرس ماینر و عدد nonce برابر صفر است. این به این دلیل است که مکانیزم اجماع شبکه Rinkeby بر اساس اثبات کار نیست. بلکه مبتنی بر اثبات قدرت است.
مشاهده اطلاعات یک تراکنش
می توانید اطلاعات هر تراکنشی را که در نود شما وجود دارد مشاهده کنید. به عنوان مثال میخواهیم اطلاعات تراکنش قرارگرفته در ایندکس 0 برای شماره بلاک 1830000 را مشاهده کنیم.
> eth.getTransaction(eth.getBlock(1830000).transactions[0])
{
blockHash: "0xa20b9701c16c2c17cf5a844dba59b33530913bb227bbf17cf5ecb052d2b287b7",
blockNumber: 1830000,
from: "0xb840f68af2624c761adc42a365d99dd470f73d08",
gas: 47197,
gasPrice: 15000000000,
hash: "0x77dd615bcc63322f436a747f43d02f7ad15ebbf7867c7dbb065e6a1a4d58a2cf",
input: "0xde5f72fd",
nonce: 11,
r: "0x53b2e2bd0f77701d697d7d7579f86ff433bfc87cf50b1f0f53da62f2b0b2f9d8",
s: "0x2adc0b0a3dbd8719eb1d994a4fac0fa11fb3d74b8c51a480142056a202dac7c6",
to: "0x832b52302b89fa8e703cc12db1b6049984d6fef7",
transactionIndex: 0,
v: "0x2c",
value: 0
}
مشاهده اطلاعات یک قرارداد
همچنین می توانید کد هر قراردادی که بر روی شبکه Rinkeby دیپلوی شده باشد را با داشتن آدرس آن مشاهده کنید.
> eth.getCode("0x832b52302b89fa8E703Cc12dB1B6049984d6fEF7")
خروجی این دستور یک رشته خیلی بزرگ به فرمت hex می باشد که کد قرارداد را نشان می دهد.
برای مشاهده حافظه قرارداد می بایست از دستور ()eth.getStorageAt
استفاده شود.
> eth.getStorageAt("0x832b52302b89fa8E703Cc12dB1B6049984d6fEF7")
"0x000000000000000000000000000000000000000000004a1d89bb94865ec00000"
خروجی این دستور، حافظه قرارداد هوشمند است، نحوه نمایش خروجی بستگی به چگونگی نوشته شدن قرارداد دارد.
برای اطلاعات بیشتر به این لینک مراجعه کنید.
دریافت اتر تست
آپدیت نود خود را از طریق fast متوقف کنید و یک نود light ایجاد کنید که خیلی سریع تر است و حافظه بسیار کمتری اشغال می کند.
$ geth --rinkeby --syncmode light console
همان طور که قبلا گفته شد می توانید لاگ های روی کنسول را با دستور debug.verbosity(0)
متوقف کنید. بعد از آنکه نود لایت آپدیت شد(ممکن است چند دقیق طول بکشد). یک اکانت اتریوم بر روی شبکه Rinkeby خود بسازید. می توانید با دستور eth.accounts
اکانت های موجود را چک کنید و با دستور ()personal.newAccount
اکانت جدید بسازید. از طریق این لینک می توانید با دادن آدرس خود در شبکه های اجتماعی و ارسال لینک پست مربوطه در این سایت، اتر رایگان دریافت کنید. سپس می توانید وجودی حساب خود را چک کنید:
> eth.getBalance(eth.accounts[0])
3000000000000000000 // in wei (equal to 3 ether)
از این اتر می توانید برای پرداخت فی gas ، ارسال اتر و یا دیپلوی قرارداد بر روی شبکه Rinkeby استفاده کنید.