سلام!
مقدمه:
ترون (Tron) یک پلتفرم بلاکچین است که برای اجرا برنامه های غیرمتمرکز (DApps) و صدور توکن های دیجیتالی مانند Trx استفاده می شود. با بلاک چین ترون می توانید انتقالات پولی سریع، ارزان و امن داشته باشید و برنامه های غیر متمرکز اجرا کنید
اگر می خواهید بیشتر در مورد بلاک چین ترون بخوانید می توانید به وب سایت رسمی ترون به آدرس https://tron.network مراجعه کنید
اگر بخواهیم با بلاکچین ترون تعامل داشته باشیم باید از ابزارهای Web3 مانند کتابخانه tronWeb استفاده کنیم. tronWeb یک کتابخانه جاواسکریپ برای بلاکچین ترون است که به ما کمک می کنه تا با بلاکچین ترون در تعامل باشیم.
اگر درباره Web3 نمیدانید میتوانید به مقالعه های زیر مراجعه کنید
مقاله حسین بیگی
مقاله صالح راهپیما
کتابخانه Tronweb همانند Web3js است، با این تفاوت که از 4 بخش تشکیل شده است:
استفاده از تکنولوژی بلاکچین ما را به سمت دنیای Web3 سوق میدهد.
دستور 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: { "TRON-PRO-API-KEY": 'your api key' }, privateKey: 'your private key' })
کلاس tronweb یک object دریافت میکند که سه تا از key های مهم این object به صورت زیر است:
آدرس کامل یک سرویس دهنده بلاکچین ترون
برای مشخص کردن هدر های سرویس دهند
کلید خصوصی یک کیفپول را دریافت کنید
برخی از قابلیت های کتابخانه Tronweb
1. Address
2. createAccount()
3. fromSun()
4. isAddress()
5. toSun()
شیء Address:
برای تبدیل آدرس کیف پول از Base58 به Hex و برعکس، از Address استفاده میکنیم که دو تابع به نام های ()toHex و ()fromHex دارد.
تابع ()toHex: برای تبدیل یک رشته متنی یا یک عدد به فرمت Hex استفاده میشود. این تابع به شما این امکان را میدهد که مقادیر مختلفی را به فرمت Hex تبدیل کنید.
مثال:
tronWeb.address.toHex("TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL")
خروجی Hex:
418840E6C55B9ADA326D211D818C34A994AECED808
تابع ()fromHex: برای تبدیل یک رشتهی متنی به آدرس کیف پول بلاکچین ترون (با فرمتBase58) مورد استفاده قرار میگیرد. که مقدار ورودی آن به فرمت هگزادسیمال (hexadecimal) است.
tronWeb.address.fromHex("418840E6C55B9ADA326D211D818C34A994AECED808")
خروجی Base58:
TNPeeaaFB7K9cmo4uQpcU32zGK8G1NYqeL
تابع ()createAccount: با فراخوانی تابع می توان در شبکه ترون یک حساب ایجاد کرد که دارای کلید خصوصی و آدرس کیف پول باشد.
مثال:
tronWeb.createAccount()
خروجی یک Object هست:
address: { base58: "TPbBpRXnt6ztse8XkCLiJstZyqQZvxW2sx", hex: "4195679F3AAF5211991781D49B30525DDDFE9A18DE" } 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("10000000")
خروجی:
10
تابع ()isAddress:
برای این که بررسی کنیم که آدرس وارد شده یک آدرس کیف پول معتبر می باشد از تابع ()isAddress استفاده میکنیم که خروجی تابع True یا False است.
مثال:
tronWeb.isAddress("THEGR4Aor5pCDVktbbbwgHAE6PQWRfejBf")
خروجی:
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:
اگر بخواهیم با یک قرارداد هوشمند در شبکه ترون تعامل داشته باشیم باید از آن با تابع ()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("https://api.trongrid.io") const solidityNode = new HttpProvider("https://api.trongrid.io") const eventServer = new HttpProvider("https://api.trongrid.io") const privateKey = "your private key" const tronWeb = new TronWeb(fullNode,solidityNode,eventServer,privateKey) const from_wallet = tronWeb.address.fromPrivateKey("your private key") const transaction = await tronWeb.transactionBuilder.sendTrx(to_wallet, tronWeb.toSun(10), from_wallet) const signedTransaction = await tronWeb.trx.sign(transaction, "your private key") tronWeb.trx.sendRawTransaction(signedTransaction).then(receipt => { console.log(receipt) }
با مطالعه این مقاله شما میتوانید به راحتی با بلاکچین ترون، برنامه های غیر متمرکز (Dapps) و قراردادهای هوشمند شبکه بلاکچین تعامل داشته باشید.
منبع
https://developers.tron.network/reference/tronweb-object
https://tronweb.network/docu/docs/quickstart/