کار با کتابخانه tronweb برای تعامل با بلاک‌چین ترون

Tronwebسلام!مقدمه: ترون (Tron) یک پلتفرم بلاک‌چین است که برای اجرا برنامه های غیرمتمرکز (DApps) و صدور توکن های دیجیتالی مانند Trx استفاده می شود. با بلاک چین ترون می توانید انتقالات پولی سریع، ارزان و امن داشته باشید و برنامه های غیر متمرکز اجرا کنیداگر می خواهید بیشتر در مورد بلاک چین ترون بخوانید می توانید به وب سایت رسمی ترون به آدرس https://tron.network مراجعه کنیداگر بخواهیم با بلاک‌چین ترون تعامل داشته باشیم باید از ابزارهای Web3 مانند کتابخانه tronWeb استفاده کنیم. tronWeb یک کتابخانه جاواسکریپ برای بلاک‌چین ترون است که به ما کمک می کنه تا با بلاک‌چین ترون در تعامل باشیم.اگر درباره Web3 نمیدانید میتوانید به مقالعه های زیر مراجعه کنیدمقاله حسین بیگیمقاله صالح راهپیماکتابخانه Tronweb همانند Web3js است، با این تفاوت که از 4 بخش تشکیل شده است:برای ایجاد تراکنش ها transactionBuilderبخش trx؛ برای درخواست به نودهای بلاک‌چین ترون تعامل با قرارداد هوشمند ترونتعامل با ابزار های مفید مانند web3.js , ethers.jsاستفاده از تکنولوژی بلاک‌چین ما را به سمت دنیای Web3 سوق میدهد.نصب کتابخانه tronwebدستور npmnpm install tronwebدستور yarnyarn add tronwebبرای استفاده از کتابخانه Tronweb باید یک نمونه (Object) از کلاس TronWeb بسازیم. ابتدا کتابخانه Tronweb را فراخوانی میکنیمconst TronWeb = require('tronweb') از کلاس Tronweb یک نمونه میسازیمconst tronWeb = new TronWeb({ fullHost: 'https://api.trongrid.io', headers: { &quotTRON-PRO-API-KEY&quot: 'your api key' }, privateKey: 'your private key' })کلاس tronweb یک object دریافت میکند که سه تا از key های مهم این object به صورت زیر است: fullHost: آدرس کامل یک سرویس دهنده بلاک‌چین ترون Headers: برای مشخص کردن هدر های سرویس دهند privateKey: کلید خصوصی یک کیف‌پول را دریافت کنید برخی از قابلیت های کتابخانه Tronweb1. Address2. createAccount()3. fromSun()4. isAddress()5. toSun() شیء Address:برای تبدیل آدرس کیف پول از Base58 به Hex و برعکس، از Address استفاده میکنیم که دو تابع به نام های ()toHex و ()fromHex دارد. تابع ()toHex: برای تبدیل یک رشته متنی یا یک عدد به فرمت Hex استفاده می‌شود. این تابع به شما این امکان را می‌دهد که مقادیر مختلفی را به فرمت Hex تبدیل کنید.مثال:tronWeb.address.toHex(&quotTNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL&quot)خروجی Hex:418840E6C55B9ADA326D211D818C34A994AECED808تابع ()fromHex: برای تبدیل یک رشته‌ی متنی به آدرس کیف پول بلاک‌چین ترون (با فرمتBase58) مورد استفاده قرار میگیرد. که مقدار ورودی آن به فرمت هگزادسیمال (hexadecimal) است. tronWeb.address.fromHex(&quot418840E6C55B9ADA326D211D818C34A994AECED808&quot)خروجی Base58:TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeLتابع ()createAccount: با فراخوانی تابع می توان در شبکه ترون یک حساب ایجاد کرد که دارای کلید خصوصی و آدرس کیف پول باشد. مثال:tronWeb.createAccount()خروجی یک Object هست:address: { base58: &quotTPbBpRXnt6ztse8XkCLiJstZyqQZvxW2sx&quot, hex: &quot4195679F3AAF5211991781D49B30525DDDFE9A18DE&quot } privateKey: 08089C24EC3BAEB34254DDF5297CF8FBB8E031496FF67B4EFACA738FF9EBD455 publicKey: 04EE63599802B5D31A29C95CC7DF04F427E8F0A124BED9333F3A80404ACFC3127659C540D0162DEDB81AC5F74B2DEB4962656EFE112B252E54AC3BA1207CD1FB10__proto__: Objectتابع ()toSun: برای تبدیل یک مقدار Trx به Sun ( Sun کوچکترین واحد کوین trx است) از تابع ()toSun استفاده میکنیم مثال 1Sun = 0.000001Trxمثال:tronWeb.toSun(10)خروجی:10000000تابع ()fromSun: برای تبدیل یک مقدار Sun به Trx از تابع ()fromSun استفاده میکنیم مثال 1trx = 1000000 sunمثال:tronWeb.fromSun(&quot10000000&quot)خروجی:10تابع ()isAddress:برای این که بررسی کنیم که آدرس وارد شده یک آدرس کیف پول معتبر می باشد از تابع ()isAddress استفاده میکنیم که خروجی تابع True یا False است.مثال:tronWeb.isAddress(&quotTHEGR4Aor5pCDVktbbbwgHAE6PQWRfejBf&quot)خروجی:trueبرخی از تابع های tronweb.trx 1. getAccount()2. getBalance()3. getTransaction()4. sendTransaction()تابع ()getAccount: برای دریافت اطلاعات یک حساب (آدرس کیف پول) بر روی بلاک‌چین ترون به کار می‌رود. این تابع اطلاعاتی از یک حساب شامل آدرس، میزان موجودی (به واحد Sun) و دیگر اطلاعات مرتبط را به ما نمایش میدهد.مثال:tronWeb.trx.getAccount('TTSFjEG3Lu9WkHdp4JrWYhbGP6K1REqnGQ').then(result => console.log(result))خروجی یک Object هست:{ address: '41bf97a54f4b829c4e9253b26024b1829e1a3b1120', balance: 29887074430, frozen: [ { frozen_balance: 12000000, expire_time: 1577615814000 } ], create_time: 1575710031000, latest_opration_time: 1577356614000, latest_consume_free_time: 1577356614000, account_resource: { frozen_balance_for_energy: { frozen_balance: 12000000, expire_time: 1577588400000 }, latest_consume_time_for_energy: 1577342304000 }, owner_permission: { permission_name: 'owner', threshold: 1, keys: [ [Object] ] }, active_permission: [ { type: 'Active', id: 2, permission_name: 'active', threshold: 1, operations: '7fff1fc0033e0100000000000000000000000000000000000000000000000000', keys: [Array] } ], assetV2: [ { key: '1000001', value: 0 } ], free_asset_net_usageV2: [ { key: '1000001', value: 0 } ] } تابع ()getBalance: برای دریافت موجودی (به واحد Sun) یک حساب بر روی بلاک‌چین ترون استفاده می‌شود. این تابع به ما اجازه می‌دهد تا بدون نیاز به دریافت تراکنش‌ها، موجودی فعلی یک حساب را بررسی کنیدمثال:tronWeb.trx.getBalance('TTSFjEG3Lu9WkHdp4JrWYhbGP6K1REqnGQ').then(result => console.log(result))خروجی:29887074430 تابع ()getTransaction: برای دریافت جزئیات یک تراکنش بر اساس شناسه تراکنش (transaction ID) استفاده می‌شود. این تابع اطلاعاتی مانند مبدا، مقصد، میزان انتقال و سایر جزئیات تراکنش را به ما نمایش میدهد.مثال:tronWeb.trx.getTransaction(0daa9f2507c4e79e39391ea165bb76ed018c4cd69d7da129edf9e95f0dae99e2).then(result => {console.log(result)});خروجی یک Object هست:{ ret: [ { contractRet: 'SUCCESS' } ], signature: ['220307de6341f7b59ff9563f50db3ab23ae53df0548aacdc6b569b094463cddd81a0a1e3e06b19bf344f94e25e8e5625374e81232ce8fb404db447666562661600'], txID: '0daa9f2507c4e79e39391ea165bb76ed018c4cd69d7da129edf9e95f0dae99e2', raw_data: { contract: [ [Object] ], ref_block_bytes: 'cfbe', ref_block_hash: '071499db194adbc4', expiration: 1551102345000, fee_limit: 10000000, timestamp: 1551102288525 }, raw_data_hex: '0a02cfbe2208071499db194adbc440a8fe9da7922d5af001081f12eb010a31747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e54726967676572536d617274436f6e747261637412b5010a1541880e4776dfcf38dfe00d399d31738abc773634e8121541eb8f23b15acbc0245a4dbbd820b9bde368b02d6122840149774683000000000000000000000000ce3747fa895a899209c10ef1b4a41141b51b8a48e7636a372dc6d1fa95122bc282de912888dace410099e5c28d9a86ec9421be5800000000000000000000000000000000000000000000000000000000005029840000000000000000000000000000000000000000000000000000000000989680708dc59aa7922d900180ade204' }تابع ()sendTransaction: برای ارسال تراکنش به بلاک‌چین ترون استفاده می‌شود. این تابع یک تراکنش را ارسال می‌کند و اطلاعات مربوط به تراکنش از جمله هش تراکنش (transaction hash) را باز می‌گرداند.مثال:tronWeb.trx.sendTransaction(TVDGpn4hCSzJ5nkHPLetk8KQBtwaTppnkr, 1000,’from_address_private’);خروجی یک Object هست:{ result: true, transaction:{ visible: false, txID:'f8f70731df59b4d7d8159df705f0f7289cd2a037187dda043e28c77287b12e11', raw_data:{ contract: [Array],ref_block_bytes: 'b3e2',ref_block_hash: '3778f8d30f91eb00',expiration: 1579075530000, timestamp: 1579075470470 }, raw_data_hex:'0a02b3e222083778f8d30f91eb004090daf1c1fa2d5a66080112620a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412310a15417946f66d0fc67924da0ac9936183ab3b07c81126121541d3136787e667d1e055d2cd5db4b5f6c88056304918e807708689eec1fa2d', signature:[ 'd0839fd236016149da98ddd3dcd2f1dfcfd11aabee8a27ffae50b1323ed4ad6a259c2d48c983c7d0c786e373d2a90c48adc91f33b82be07efffaa7d57e4d3f6000' ] } }برخی از تابع های tronweb.contracttronweb.contract()call()send()تابع ()tronweb.contract:اگر بخواهیم با یک قرارداد هوشمند در شبکه ترون تعامل داشته باشیم باید از آن با تابع ()tronweb.contract یک نمونه بسازیم که ورودی آن دو پارامتر است. اولین پارامتر abi (Application Binary Interface)، دومین پارامتر آدرس قرارداد هوشمند (Contract Address) است. مثال:let abi = [{inputs:[{internalType:string,name:initMessage,type:string}],stateMutability:nonpayable,type:constructor},{inputs:[],name:message,outputs:[{internalType:string,name:,type:string}],stateMutability:view,type:function},{inputs:[{internalType:string,name:newMessage,type:string}],name:update,outputs:[],stateMutability:nonpayable,type:function}]; async function getContract(){ let res = await tronWeb.contract(abi,416A2383E04DF36C74A7EA415E554147C3EE0AF4C7); console.log(res); } getContract();تابع ()call: به ما این امکان را میدهد تا بتوانیم تابع های یک قرارداد هوشمند در بلاک‌چین ترون صدا بزنیم.استفاده از تابع ()call برای تراکنش ها هیچ هزینه‌ای به وجود نمی‌آورد و در شبکه بلاک‌چین انتشار نمی‌یابد.مثال:let abi = [...]; let contract = await tronWeb.contract(abi, 'USDT_ADDRESS'); let result = await contract.balanceOf('ACCOUNT_ADDRESS').call(); console.log(result.toString(10));تابع ()send: به ما این امکان را میدهد که مانند تابع ()call به تابع های قردارداد هوشمند دسترسی داشته باشیم با این تفاوت که هزینه‌‌ای را برای تراکنش به وجود می‌آورد و در شبکه بلاک‌چین نیز انتشار می‌یابد.مثال:let abi = [...]; let contract = await tronWeb.contract(abi, 'TQQg4EL8o1BSeKJY4MJ8TB8XK7xufxFBvK'); let txID = await contract.transfer('TWbcHNCYzqAGbrQteKnseKJdxfzBHyTfuh', 100).send(); let result = await tronWeb.trx.getTransaction(txID); یک مثال ساده از ارسال یک مقدار Trx از یک کیف پول به کیف پول دیگهconst TronWeb = require('tronweb') const HttpProvider = TronWeb.providers.HttpProvider; const fullNode = new HttpProvider(&quothttps://api.trongrid.io&quot) const solidityNode = new HttpProvider(&quothttps://api.trongrid.io&quot) const eventServer = new HttpProvider(&quothttps://api.trongrid.io&quot) const privateKey = &quotyour private key&quot const tronWeb = new TronWeb(fullNode,solidityNode,eventServer,privateKey) const from_wallet = tronWeb.address.fromPrivateKey(&quotyour private key&quot) const transaction = await tronWeb.transactionBuilder.sendTrx(to_wallet, tronWeb.toSun(10), from_wallet) const signedTransaction = await tronWeb.trx.sign(transaction, &quotyour private key&quot) tronWeb.trx.sendRawTransaction(signedTransaction).then(receipt => { console.log(receipt) }با مطالعه این مقاله شما میتوانید به راحتی با بلاک‌چین ترون، برنامه های غیر متمرکز (Dapps) و قراردادهای هوشمند شبکه بلاک‌چین تعامل داشته باشید.منبع https://developers.tron.network/reference/tronweb-objecthttps://tronweb.network/docu/docs/quickstart/