abolfazl rastegar
abolfazl rastegar
خواندن ۶ دقیقه·۱ سال پیش

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

Tronweb
Tronweb


سلام!

مقدمه:

ترون (Tron) یک پلتفرم بلاک‌چین است که برای اجرا برنامه های غیرمتمرکز (DApps) و صدور توکن های دیجیتالی مانند Trx استفاده می شود. با بلاک چین ترون می توانید انتقالات پولی سریع، ارزان و امن داشته باشید و برنامه های غیر متمرکز اجرا کنید

اگر می خواهید بیشتر در مورد بلاک چین ترون بخوانید می توانید به وب سایت رسمی ترون به آدرس https://tron.network مراجعه کنید

اگر بخواهیم با بلاک‌چین ترون تعامل داشته باشیم باید از ابزارهای Web3 مانند کتابخانه tronWeb استفاده کنیم. tronWeb یک کتابخانه جاواسکریپ برای بلاک‌چین ترون است که به ما کمک می کنه تا با بلاک‌چین ترون در تعامل باشیم.


اگر درباره Web3 نمیدانید میتوانید به مقالعه های زیر مراجعه کنید
مقاله حسین بیگی
مقاله صالح راهپیما


کتابخانه Tronweb همانند Web3js است، با این تفاوت که از 4 بخش تشکیل شده است:

  • برای ایجاد تراکنش ها transactionBuilder
  • بخش trx؛ برای درخواست به نودهای بلاک‌چین ترون
  • تعامل با قرارداد هوشمند ترون
  • تعامل با ابزار های مفید مانند web3.js , ethers.js
استفاده از تکنولوژی بلاک‌چین ما را به سمت دنیای Web3 سوق میدهد.


نصب کتابخانه tronweb

دستور npm

npm install tronweb

دستور yarn

yarn 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:

کلید خصوصی یک کیف‌پول را دریافت کنید


برخی از قابلیت های کتابخانه Tronweb

1. Address

2. 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.contract

  • tronweb.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-object

https://tronweb.network/docu/docs/quickstart/

بلاک چینکتابخانه tronwebweb3trontronweb
من ابوالفضل رستگار هستم هفت سال برنامه نویسی میکنم با زبان های php,js فریم ورک laravel , vuejs و علاقمند به تکنولوزی بلاک چین
شاید از این پست‌ها خوشتان بیاید