[TOC]

Ethereum-based web3 ترقی کے ساتھ آسانی سے شروع کرنے کے لیے FMZ کا استعمال کریں۔
ایتھرئم ایک سمارٹ کنٹریکٹ پلیٹ فارم ہے جو بلاک چین ٹیکنالوجی پر مبنی ہے، جو سمارٹ معاہدوں کو لکھنے اور تعینات کرنے کا ایک غیر مرکزی طریقہ فراہم کرتا ہے۔ سمارٹ کنٹریکٹ ایک خاص کمپیوٹر پروگرام ہے جو خود بخود بلاک چین پر عمل میں لایا جا سکتا ہے اور کسی تیسرے فریق پر بھروسہ کیے بغیر مختلف کاروباری منطقوں کو لاگو کر سکتا ہے۔
Inventor Quantitative Trading Platform (FMZ.COM) ایک استعمال میں آسان API فراہم کرتا ہے جو ڈیولپرز کے لیے Ethereum blockchain اور اس کے ماحولیاتی نظام کے ساتھ بات چیت کرنا آسان بناتا ہے۔ ڈی سینٹرلائزڈ ایکسچینجز (DEX) تک رسائی، آن-چین ڈیٹا حاصل کرنا، اور لین دین بھیجنے جیسے افعال کا ادراک کریں۔
اس ٹیوٹوریل کے استعمال کی مثالیں۔JavaScriptزبان کی تحریر، ٹیسٹ کے ماحول کا استعمالایتھریم مینیٹ、گوئرلی ٹیسٹ نیٹ. آپ ٹیوٹوریل میں استعمال ہونے والے API انٹرفیس کے ساتھ ساتھ FMZ پلیٹ فارم کے API دستاویزات میں متعلقہ وضاحتیں اور کوڈ کی مثالیں بھی دیکھ سکتے ہیں۔
FMZ مقداری تجارتی پلیٹ فارم کو استعمال کرنا سیکھنے سے پہلے، ہمیں کئی بنیادی تصورات سے واقف ہونا ضروری ہے:
FMZ مقداری تجارتی پلیٹ فارم (https://www.fmz.com) کی آفیشل ویب سائٹ پر رجسٹر ہونے اور لاگ ان کرنے کے بعد، آپ پلیٹ فارم کے مختلف افعال استعمال کر سکتے ہیں۔ FMZ ویب سائٹ پورے سسٹم کا انتظامی اختتام ہے، اور صارفین کے لکھے ہوئے پروگرام دراصل میزبان پر چلائے جاتے ہیں۔ میزبان ایک سافٹ ویئر پروگرام ہے جسے مختلف آلات، جیسے سرورز، کمپیوٹرز وغیرہ پر تعینات کیا جا سکتا ہے۔ جب کوئی صارف پروگرام لکھتا ہے اور FMZ ویب سائٹ پر ایک رننگ مثال تیار کرتا ہے، FMZ پلیٹ فارم میزبان کے ساتھ بات چیت کرے گا اور میزبان پر پروگرام کی مثال شروع کرے گا۔

اگر آپ کسی پروگرام کو چلانا چاہتے ہیں، تو آپ کو ایک میزبان کو تعینات کرنا ہوگا، میزبان کی تعیناتی بھی بہت آسان ہے، اور پلیٹ فارم پر ایک تعیناتی ٹیوٹوریل موجود ہے۔ آپ FMZ پر فراہم کردہ “ایک کلک کی تعیناتی ہوسٹ” کو بھی استعمال کر سکتے ہیں تاکہ FMZ کی طرف سے کرائے پر لیے گئے سرور کو خود بخود تعینات کیا جا سکے۔
نگہبان پروگرام کو سرورز، پرسنل کمپیوٹرز اور دیگر ڈیوائسز پر تعینات اور چلایا جا سکتا ہے، جب تک کہ نیٹ ورک نارمل ہو (متعلقہ ہدف تک رسائی کے قابل ہونا ضروری ہے، جیسے ایکسچینج انٹرفیس، نوڈ ایڈریس وغیرہ)۔ تعیناتی کے اہم اقدامات یہ ہیں:

robotقابل عمل فائل. نگہبان مواصلات کا پتہ ترتیب دیں FMZ میں لاگ ان کرنے کے بعد،https://www.fmz.com/m/add-nodeصفحہ اپنا پتہ دیکھ سکتا ہے (یعنی./robot -s node.fmz.com/xxxxxپتوں کا یہ سلسلہ، یہاںxxxxxمقام کا مواد ہر FMZ اکاؤنٹ کے لیے مختلف طریقے سے ظاہر ہوتا ہے)۔ آخر میں، آپ کو FMZ اکاؤنٹ کا پاس ورڈ درج کرنے کی ضرورت ہے، ان کو ترتیب دینے کے بعد، میزبان پروگرام کو چلائیں۔FMZ پلیٹ فارم پر ایک محافظ صفحہ شامل کریں، پتہ:https://www.fmz.com/m/add-node

FMZ مقداری تجارتی پلیٹ فارم ایک مفت ڈیبگنگ ٹول فراہم کرتا ہے جو سپورٹ کرتا ہے۔JavaScript,TypeScriptصفحہ یہ ہے: https://www.fmz.com/m/debug، کیونکہ ایک مثال بنانے اور اسے چلانے کا بل آتا ہے۔ یہ ڈیبگنگ ٹول ابتدائی سیکھنے کی مدت کے دوران جانچ اور سیکھنے کے لیے استعمال کیا جا سکتا ہے۔ ڈیبگنگ ٹول ایک مثال بنانے سے مختلف نہیں ہے، سوائے اس کے کہ چلانے کا وقت 3 منٹ تک محدود ہے۔
استعمال کریںTypeScriptزبان استعمال کرتے وقت، آپ کو اسے کوڈ کی پہلی لائن میں لکھنا ہوگا۔// @ts-checkپر سوئچ کرنے کے لیےTypeScriptموڈ، اگر سوئچ نہیں کیا گیا تو، ڈیفالٹ ہے۔JavaScriptزبان
FMZ پر، “تبادلہ” ایک عام تصور ہے CEX ایکسچینج کے لیے، یہ ایک مخصوص ایکسچینج اکاؤنٹ کنفیگریشن سے مراد ہے۔ web3 کے لیے، یہ تبادلہ کنفیگریشن کی معلومات کا حوالہ دیتا ہے، بشمول نوڈ ایڈریس اور پرائیویٹ کلید کنفیگریشن۔
FMZ پلیٹ فارم میں لاگ ان ہونے پر،https://www.fmz.com/m/add-platformصفحہ، آپ تبادلے کی معلومات کو ترتیب دے سکتے ہیں، جہاں تبادلہ ایک عام تصور ہے۔

منتخب کریںWeb3RPC نوڈ ایڈریس اور پرائیویٹ کلید کو کنفیگر کریں آپ سیکیورٹی میکانزم کو دیکھنے کے لیے نیچے دائیں کونے میں “حساس معلومات کو خفیہ اور محفوظ کیا گیا ہے” پر کلک کر سکتے ہیں۔
نوڈس خود ساختہ ہو سکتے ہیں یا نوڈ سروس فراہم کرنے والے فراہم کر سکتے ہیں۔ بہت سے نوڈ سروس فراہم کرنے والے ہیں، جیسے:Infura. رجسٹریشن کے بعد، آپ اپنے اکاؤنٹ کا نوڈ ایڈریس دیکھ سکتے ہیں۔ مین نیٹ اور ٹیسٹ نیٹ دونوں موجود ہیں، جو کہ اوپر کی شکل میں اس نوڈ ایڈریس کو کنفیگر کریں۔Rpc Addressکنٹرولز میں کنفیگر شدہ ایکسچینج اشیاء کو الگ کرنے کے لیے ٹیگز کا نام خود رکھا جا سکتا ہے۔

شکل میںhttps://mainnet.infura.io/v3/xxxxxxxxxxxxxیہ نجی Infura ETH مینیٹ RPC نوڈ ایڈریس ہے۔
کسٹوڈین پروگرام کو تعینات کرنے اور ایکسچینج آبجیکٹ کو ترتیب دینے کے بعد، آپ جانچ کے لیے FMZ.COM کا “ڈیبگنگ ٹول” استعمال کر سکتے ہیں۔ Ethereum کے ساتھ تعامل کرنے کے لیے Ethereum RPC طریقوں کو کال کریں اس باب میں درج کئی RPC طریقوں کے علاوہ، آپ دیگر RPC طریقوں کے لیے دستاویزات کا حوالہ دے سکتے ہیں۔https://www.quicknode.com/docs。
آئیے چند سادہ مثالیں لیتے ہیں اور بنیادی باتوں سے شروعات کرتے ہیں۔ مختلف زبانوں اور ٹولز کے لیے web3 تک رسائی کے طریقے ہیں، جیسا کہ تصویر میں دکھایا گیا ہے:

آر پی سی میتھڈ کالز بھی ایف ایم زیڈ پر انکیپسولڈ ہیں یہ فنکشنز ایف ایم زیڈ API فنکشن میں شامل ہیں۔exchange.IOدرمیانی کال کرنے کا طریقہ ہے۔exchange.IO("api", "eth", ...). پہلا پیرامیٹر طے ہے۔"api"، دوسرا پیرامیٹر طے شدہ ہے۔"eth"، دوسرے پیرامیٹرز کا انحصار مخصوص RPC طریقہ پر ہوتا ہے جسے کہا جاتا ہے۔
معلومات کو آؤٹ پٹ کرنے کے لیے، ہم FMZ پلیٹ فارم استعمال کرتے ہیں۔LogفنکشنLogفنکشن متعدد پیرامیٹرز میں گزر سکتا ہے اور پھر انہیں FMZ پلیٹ فارم کے “Debug Tool” یا “Real Trading” صفحہ کے لاگ ایریا میں آؤٹ پٹ کر سکتا ہے “Debug Tool” صفحہ ہماری جانچ کے لیے اہم آلہ ہوگا۔
ایتھریمeth_getBalanceEthereum پر کسی ایڈریس کے ETH بیلنس کے بارے میں استفسار کرنے کے لیے یہ طریقہ استعمال کیا جاتا ہے۔
آئیے Ethereum کے بانی کو چیک کریں۔V神ETH والیٹ ایڈریس، معلوم پتے ہیں:0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045。
function main() {
let ethBalance = exchange.IO("api", "eth", "eth_getBalance", "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "latest")
Log("ethBalance:", ethBalance)
}
محافظ کو تعینات کیا گیا ہے (شکل میں: linux/amd64 …) اور ایکسچینج آبجیکٹ کو ترتیب دیا گیا ہے (تصویر میں: Web3 ٹیسٹ ڈیبگنگ ٹول میں کوڈ کی جانچ کریں:

اس کوڈ کو چلانے اور نتائج ظاہر کرنے کے لیے “Execute” بٹن پر کلک کریں:
ethBalance: 0x117296558f185bbc4c6
Logفنکشن پرنٹ کرتا ہے۔ethBalanceمتغیر اقدار ہیں:0x117296558f185bbc4c6، جو ایک تار کی قسم ہے۔ ہاںہیکسا ڈیسیمل قدر میں ETH بیلنسکی طرف سےweiایک یونٹ کے طور پر،1e18 wei1 ہےETH. لہذا، اسے پڑھنے کے قابل اعشاریہ ETH بیلنس میں تبدیل کرنے کی ضرورت ہے۔
مرضیethBalanceپڑھنے کے قابل ڈیٹا میں تبدیل کریں:
function main() {
let ethBalance = exchange.IO("api", "eth", "eth_getBalance", "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "latest")
Log("ethBalance:", ethBalance)
// 将ethBalance转换为可读的数据
let vitalikEthBalance = parseInt(ethBalance.substring(2), 16) / 1e18
Log("vitalikEthBalance:", vitalikEthBalance)
}

سب سے اوپرhttps://etherscan.io/استفسار:

تاہم، اس پروسیسنگ میں خود زبان کی درستگی کی وجہ سے انحراف ہوگا، لہذا FMZ پلیٹ فارم میں ڈیٹا پر کارروائی کرنے کے لیے دو بلٹ ان فنکشنز ہیں:
کوڈ کو دوبارہ ایڈجسٹ کریں:
function main() {
let ethBalance = exchange.IO("api", "eth", "eth_getBalance", "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "latest")
// ETH的精度单位为1e18
let ethDecimal = 18
Log("vitalikEthBalance:", Number((BigDecimal(BigInt(ethBalance)) / BigDecimal(Math.pow(10, ethDecimal))).toString()))
}
vitalikEthBalance: 5149.6244846875215
eth_chainIdاورnet_versionاستعمال ایک جیسے ہیں، لہذا ہم نے ان کا ایک ساتھ تجربہ کیا۔ دونوں فنکشنز بلاکچین کی ID واپس کرتے ہیں جس سے موجودہ RPC نوڈ جڑا ہوا ہے۔net_versionڈیسیمل آئی ڈی لوٹاتا ہے۔eth_chainIdہیکسا ڈیسیمل ID لوٹاتا ہے۔
نیٹ ورک کا نام سلسلہ ID سے مطابقت رکھتا ہے۔
1 - ethereum mainnet
2 - morden testnet (deprecated)
3 - ropsten testnet
4 - rinkeby testnet
5 - goerli testnet
11155111 - sepolia testnet
10 - optimism mainnet
69 - optimism kovan testnet
42 - kovan testnet
137 - matic/polygon mainnet
80001 - matic/polygon mumbai testnet
250 - fantom mainnet
100 - xdai mainnet
56 - bsc mainnet

تشکیل شدہ ایتھریم ٹیسٹ نیٹ ورک کا استعمال کریں۔goerliنوڈ ٹیسٹ:
function main() {
let netVersionId = exchange.IO("api", "eth", "net_version")
let ethChainId = exchange.IO("api", "eth", "eth_chainId")
Log("netVersionId:", netVersionId)
Log("ethChainId:", ethChainId, " ,转换:", parseInt(ethChainId.substring(2), 16))
}

کال کریں۔eth_gasPriceموجودہ سلسلہ سے استفسار کرنے کا طریقہgas price。
function toAmount(s, decimals) {
return Number((BigDecimal(BigInt(s)) / BigDecimal(Math.pow(10, decimals))).toString())
}
function main() {
let gasPrice = exchange.IO("api", "eth", "eth_gasPrice")
Log("gasPrice:", gasPrice, " ,转换:", toAmount(gasPrice, 0))
}
یہاں ہم ایک ہیکساڈیسیمل سٹرنگ کو پڑھنے کے قابل قدر میں تبدیل کرنے کے لیے ایک فنکشن لکھتے ہیں۔toAmount. ایک اور بات قابل غور ہے کہ گیس پرائس کی اکائی ہے۔wei، تو پیرامیٹرdecimalsمتعلقہ اصل پیرامیٹر کو 0 کے طور پر پاس کیا جا سکتا ہے۔
eth_blockNumbeبلاک کی اونچائی کے بارے میں استفسار کرنے کے لیے استعمال کیا جاتا ہے۔
function toAmount(s, decimals) {
return Number((BigDecimal(BigInt(s)) / BigDecimal(Math.pow(10, decimals))).toString())
}
function main() {
let blockNumber = exchange.IO("api", "eth", "eth_blockNumber")
Log(toAmount(blockNumber, 0))
}
ڈیبگر میں چلائیں:

https://etherscan.io/استفسار پر:

بلاک کی معلومات سے استفسار کریں۔
function main() {
let blockNumber = exchange.IO("api", "eth", "eth_blockNumber")
Log(blockNumber)
let blockMsg = exchange.IO("api", "eth", "eth_getBlockByNumber", blockNumber, true)
Log(typeof(blockMsg), blockMsg)
// 由于Log输出的内容过多,会自动截断,所以遍历返回的区块信息各个字段,逐个打印
for (let key in blockMsg) {
Log("key:", key, ", val:", blockMsg[key])
}
}
درج ذیل معلومات کو “ڈیبگ ٹول” میں انجام دے کر حاصل کیا جا سکتا ہے:

ایتھرئم پر سمارٹ کنٹریکٹ ایپلی کیشنز کی ایک بڑی تعداد چل رہی ہے۔ENSان میں سے ایک ہے.ENS, یعنی Ethereum Name Service، Ethereum blockchain پر مبنی ایک विकेंद्रीकृत ڈومین نام ریزولوشن سروس ہے۔
ٹیوٹوریل کی وہ مثال یاد رکھیں جہاں ہم نے Ethereum کے بانی Vitalik Buterin کے بٹوے کے بیلنس کے بارے میں سوال کیا تھا؟ Vitalik کے بٹوے کے پتوں میں سے ایک یہ ہے:0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045. تو ہم اس ایڈریس کو کیسے جانتے ہیں؟ اصل میں، کے ذریعےENSسمارٹ معاہدہ، ایک بدیہی نام کا استعمال کرتے ہوئےvitalik.eth(vitalik Vitalik کا نام ہے) استفسار کرنے کے لیے۔
اس باب میں درج ذیل مواد Ethereum مین نیٹ ورک ماحول کا استعمال کرتے ہیں۔ENSدستاویز سے پتہ چلتا ہے کہ ایتھرئم ڈومین نام کا استفسار کیا جانا ضروری ہے۔Hashing Namesکے لیے درج ذیل کوڈ کا استعمال کریں۔vitalik.ethنام پر کارروائی ہوتی ہے۔
function nameHash(name) {
if (name == "") {
return "0000000000000000000000000000000000000000000000000000000000000000"
} else {
let arr = name.split(".")
let label = arr[0]
arr.shift()
let remainder = arr.join(".")
return Encode("sha3.keccak256", "hex", "hex", nameHash(remainder) + Encode("sha3.keccak256", "raw", "hex", label))
}
}
مندرجہ بالا کوڈ کی مثال میں، ہم ایک اور غیر مانوس فنکشن دیکھتے ہیں۔Encodeیہ فنکشن FMZ پلیٹ فارم کا API فنکشن ہے، جو خاص طور پر FMZ پلیٹ فارم پر انکوڈنگ آپریشنز کو انجام دینے کے لیے استعمال ہوتا ہے، یہ فنکشن متعدد انکوڈنگ طریقوں اور متعدد ہیش الگورتھم کو سپورٹ کرتا ہے۔
Encode(algo, inputFormat, outputFormat, data, keyFormat, key string)
ENS دستاویزات کے مطابق استعمال کریں۔sha3.keccak256الگورتھم ڈیٹا پر کارروائی کرتے ہیں۔
کال کریں۔nameHashافعال، مثال کے طور پر:Log(nameHash("vitalik.eth"))، ہم حاصل کر سکتے ہیں:ee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835، آپ کو “0x” سابقہ شامل کرنے کی ضرورت ہے۔0xee6c4522aab0003e8d14cd40a6af439055fd2577951148c14b6cea9a53475835ENS سمارٹ کنٹریکٹ کے طور پرresolverطریقہ کار کے پیرامیٹرز۔
let ensNode = "0x" + nameHash("vitalik.eth") // 准备好调用resolver方法的参数ensNode
ENS دستاویز کے مطابق، ENS سمارٹ کنٹریکٹ کی درخواست کا معاہدہ کا پتہ ہے:0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e. سمارٹ کنٹریکٹ کو کال کرنے میںresolverاس سے پہلے کہ ہم آگے بڑھیں، ہمیں معاہدہ تیار کرنے کی ضرورت ہے۔ABI。
یہ جاننے کے بعد، میں مدد نہیں کر سکتا لیکن پوچھ سکتا ہوں، سمارٹ کنٹریکٹ کیا ہے؟ABIاونی کپڑا۔
ABI,即应用程序二进制接口(Application Binary Interface),是智能合约与外部世界进行通信的接口标准。
智能合约的 ABI 定义了合约的函数接口、参数类型、返回值等信息,以及调用合约的方式和参数传递方式等规范。
智能合约的 ABI 通常以 JSON 格式存储,包含以下信息:
合约的函数接口:函数名、参数列表、返回值等信息。
函数参数类型:如 uint256、bool、string 等。
函数的输入参数和输出参数的编码方式:智能合约使用一种称为 Solidity ABI 的编码方式来编码函数的输入参数和输出参数,
以便与以太坊网络进行交互。
在以太坊网络中,使用智能合约的 ABI 来调用合约的函数。当需要调用合约函数时,需要提供函数名和函数参数,以及将函数参数按照 ABI 编码方式编码后的字节码。
以太坊节点会将这些信息打包成一笔交易,并将交易发送到以太坊网络中执行。
智能合约的 ABI 在 Solidity 语言中可以通过 interface 关键字来定义。以太坊开发工具如 Remix IDE、Truffle 等也提供了 ABI 编辑和生成工具,
使得开发者可以方便地创建和使用智能合约的 ABI。
ENS ABI سے درج ذیل کو نکالیں:resolverمکمل ABI میں بھی استعمال کیا جا سکتا ہے۔https://etherscan.io/آپ GitHub پر معاہدے کے ABI سے استفسار کر سکتے ہیں، یا دوسرے ذرائع سے ABI حاصل کر سکتے ہیں (مثال کے طور پر، متعلقہ پروجیکٹ دستاویزات)۔

let abiENS_resolver = `[{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]`
یہاں ہمیں FMZ پلیٹ فارم پر کال کرنے کا ایک نیا طریقہ سیکھنا ہے۔exchange.IO("abi", address, abiContent)ABI رجسٹر کرنے کے لیے یہ طریقہ استعمال کریں،addressپیرامیٹر سمارٹ کنٹریکٹ کا پتہ ہے۔abiContentپیرامیٹر متعلقہ سمارٹ کنٹریکٹ ABI (سٹرنگ) ہے۔
let abiENS_resolver = `[{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]`
exchange.IO("abi", "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", abiENS_resolver) // 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e 是在以太坊主网上部署的ENS智能合约的地址
اگلا، آپ ENS سمارٹ کنٹریکٹ کو کال کر سکتے ہیں۔resolverطریقہ، جو واپس آتا ہےENS: Public Resolverمعاہدے کا پتہ۔

let resolverAddress = exchange.IO("api", "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", "resolver", ensNode)
استعمال کریںENS: Public ResolverمعاہدہaddrVitalik کے بٹوے کا پتہ حاصل کرنے کا طریقہ۔ کال کرناENS: Public Resolverمعاہدے کو اب بھی پہلے ABI رجسٹر کرنے کی ضرورت ہے۔ اس سمارٹ کنٹریکٹ کی ABI معلومات اب بھی پر مل سکتی ہے۔https://etherscan.io/حاصل کریں۔
let abiENSPublicResolver = `[{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"coinType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newAddress","type":"bytes"}],"name":"AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"AuthorisationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"hash","type":"bytes"}],"name":"ContenthashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"record","type":"bytes"}],"name":"DNSRecordChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"}],"name":"DNSRecordDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"DNSZoneCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"indexed":false,"internalType":"address","name":"implementer","type":"address"}],"name":"InterfaceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"x","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"PubkeyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"string","name":"indexedKey","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"TextChanged","type":"event"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"}],"name":"addr","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"authorisations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"clearDNSZone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"contenthash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"uint16","name":"resource","type":"uint16"}],"name":"dnsRecord","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"hasDNSRecords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setABI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"bytes","name":"a","type":"bytes"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"a","type":"address"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"setAuthorisation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setContenthash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setDNSRecords","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"internalType":"address","name":"implementer","type":"address"}],"name":"setInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]`
exchange.IO("abi", resolverAddress, abiENSPublicResolver)

آخری کالENS: Public Resolverمعاہدہaddrطریقہ، پیرامیٹرز اب بھی ہیںensNode。
let vitalikAddress = exchange.IO("api", resolverAddress, "addr", ensNode)
Log("vitalikAddress:", vitalikAddress)
لاگ فنکشن آؤٹ پٹ:

vitalikAddress: 0xd8da6bf26964af9d7eed9e03e53415d37aa96045
function nameHash(name) {
if (name == "") {
return "0000000000000000000000000000000000000000000000000000000000000000"
} else {
let arr = name.split(".")
let label = arr[0]
arr.shift()
let remainder = arr.join(".")
return Encode("sha3.keccak256", "hex", "hex", nameHash(remainder) + Encode("sha3.keccak256", "raw", "hex", label))
}
}
function main() {
// 计算名称
let ensNode = "0x" + nameHash("vitalik.eth")
// 注册ENS合约
let abiENS_resolver = `[{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"resolver","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]`
exchange.IO("abi", "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", abiENS_resolver)
let resolverAddress = exchange.IO("api", "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", "resolver", ensNode)
// 注册ENS Public Resolver合约
let abiENSPublicResolver = `[{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"coinType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newAddress","type":"bytes"}],"name":"AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"AuthorisationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"hash","type":"bytes"}],"name":"ContenthashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"record","type":"bytes"}],"name":"DNSRecordChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"}],"name":"DNSRecordDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"DNSZoneCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"indexed":false,"internalType":"address","name":"implementer","type":"address"}],"name":"InterfaceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"x","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"PubkeyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"string","name":"indexedKey","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"TextChanged","type":"event"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"}],"name":"addr","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"authorisations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"clearDNSZone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"contenthash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"uint16","name":"resource","type":"uint16"}],"name":"dnsRecord","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"hasDNSRecords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setABI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"bytes","name":"a","type":"bytes"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"a","type":"address"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"setAuthorisation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setContenthash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setDNSRecords","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"internalType":"address","name":"implementer","type":"address"}],"name":"setInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]`
exchange.IO("abi", resolverAddress, abiENSPublicResolver)
let vitalikAddress = exchange.IO("api", resolverAddress, "addr", ensNode)
Log("vitalikAddress:", vitalikAddress)
}
پچھلے کورس کے ابواب میں، ہم نے سیکھا ہے کہ کنفیگر شدہ ایکسچینج آبجیکٹ کے لیے پرائیویٹ کیز کو کنفیگر کرنا ہے، ہم اس پرائیویٹ کلید کے مطابق بٹوے کا پتہ کیسے جانتے ہیں؟ FMZ پر دستیاب ہے۔exchange.IO("address")فنکشن کنفیگر شدہ پرائیویٹ کلید کے مطابق والیٹ ایڈریس حاصل کرتا ہے۔
چونکہ اس باب کے مندرجہ ذیل مواد استعمال ہوتے ہیں۔Goerliنیٹ ورک ماحول کی جانچ کریں، لہذا میں جو نوڈ استعمال کرتا ہوں وہ ہے:https://goerli.infura.io/v3/*******، Infura ہر رجسٹرڈ صارف کو مختلف نوڈ ایڈریس تفویض کرتا ہے۔*******مخصوص مواد پوشیدہ ہے۔
function main() {
let walletAddress = exchange.IO("address")
Log("测试网 goerli 钱包地址:", walletAddress)
}

ایک بار جب آپ کو اپنے بٹوے کا پتہ معلوم ہو جائے تو، آپ Ethereum کا RPC طریقہ استعمال کر سکتے ہیں۔eth_getTransactionCountبٹوے کے پتے کی لین دین کی گنتی سے استفسار کریں۔ یہ شمار بہت عام طور پر Ethereum میں استعمال ہوتا ہے، درحقیقت، رقم کی منتقلی کے وقت اسے پاس کرنے کی ضرورت ہوتی ہے۔nonceپیرامیٹرز،ایتھریم میں، nonce ایک نمبر ہے جو اس بات کو یقینی بنانے کے لیے استعمال کیا جاتا ہے کہ ہر ٹرانزیکشن منفرد ہے۔ یہ ایک بڑھتی ہوئی تعداد ہے جو ہر بار جب نیا لین دین بھیجا جاتا ہے تو خود بخود بڑھ جاتا ہے۔ اس لیے، جب آپ کسی سمارٹ کنٹریکٹ پر ٹرانزیکشن بھیجتے ہیں، تو آپ کو اس بات کو یقینی بنانے کے لیے کہ لین دین منفرد اور صحیح ترتیب میں ہے، ایک نونس فراہم کرنے کی ضرورت ہے۔ کچھ ڈیٹا اور دستاویزات میں ہم تلاش کر سکتے ہیں:

گو زبان میں Ethereum لائبریری یہ ہے۔PendingNonceAtفنکشن دراصل کال کرتا ہے۔eth_getTransactionCountطریقہ پچھلے کورس میں، ہم نے RPC طریقوں کو کال کرنے کا طریقہ بھی سیکھا ہے، ہم اسے دوبارہ یہاں استعمال کریں گے۔exchange.IO("api", "eth", ...)فنکشن
function toAmount(s, decimals) {
return Number((BigDecimal(BigInt(s)) / BigDecimal(Math.pow(10, decimals))).toString())
}
function main() {
let walletAddress = exchange.IO("address")
Log("测试网 goerli 钱包地址:", walletAddress)
/**
* eth_getTransactionCount
* @param address - string - The address from which the transaction count to be checked.
* @param blockNumber - string - The block number as a string in hexadecimal format or tags.
* @returns The integer of the number of transactions sent from an address encoded as hexadecimal.
*/
let nonce = exchange.IO("api", "eth", "eth_getTransactionCount", walletAddress, "pending")
Log("钱包地址:", walletAddress, "当前的 nonce:", nonce, ",转换为10进制:", toAmount(nonce, 0))
}
منتقلی کے عمل کی وضاحت کرنے سے پہلے، آئیے مختصراً کچھ تصورات کو سمجھیں جب Ethereum پر رقم کی منتقلی کرتے ہوئے، ETH ٹوکن کی ایک خاص مقدار استعمال کی جائے گی (بطور گیس کی فیس)۔ گیس کی فیس کا تعین دو پیرامیٹرز سے کیا جاتا ہے:
تاہم، Ethereum نیٹ ورک پر گیس کی فیسیں مارکیٹ کی طلب اور صارفین کی ادائیگی کے لیے تیار ہونے کی بنیاد پر ہمیشہ اتار چڑھاؤ کا شکار رہتی ہیں، اس لیے کوڈ میں گیس کی ایک مقررہ فیس لکھنا بعض اوقات مثالی نہیں ہوتا ہے۔ جو کچھ ہم نے پہلے سیکھا ہے اسے ہم استعمال کر سکتے ہیں۔eth_gasPriceطریقہ، جو گیس کی اوسط قیمت حاصل کر سکتا ہے۔
معیاری ایتھر کی منتقلی کے لیے گیس کی حد 21,000 یونٹ ہے۔
سمجھ گیاnonce,gasPrice,gasLimitان تصورات کے ساتھ، آپ منتقلی کی جانچ کر سکتے ہیں۔ ایک بہت ہی آسان اور استعمال میں آسان ٹرانسفر فنکشن FMZ پر شامل ہے۔
exchange.IO("api", "eth", "send", toAddress, toAmount)
جب منتقلی کے لیے استعمال کیا جاتا ہے،exchange.IOتیسرا پیرامیٹر ہمیشہ “بھیجیں” ہوتا ہے۔toAddressپیرامیٹر وہ پتہ ہے جو منتقلی کے دوران ETH وصول کرتا ہے۔toAmountETH کی رقم منتقل کی گئی۔
nonce,gasPrice,gasLimitیہ پیرامیٹ