跳转至

迁移指南

原文:https://docs.elrond.com/sdk-and-tools/erdjs/erdjs-migration-guides

本教程将指导你从一个主要版本的 erdjs (或者它的一个卫星)迁移到另一个版本。

重要

确保你已经提前看了一遍秘籍

从 v9.x 迁移 erdjs 到 v10(2022 年 4 月)

erdjs 10 带来了一系列突破性的变化。最重要的是,包 walletcoredappcontractWrappers 和网络供应商(ApiProviderProxyProvider)已经被提取到单独的存储库中——因此,它们现在作为单独的 NPM 包分发。 erdjs 不再依赖于库 fscryptoaxios

负责解析合约结果或查询响应的类,以及负责交易完成检测的类也被重写。

此外,为了简化和改进 erdjs 的代码库,我们已经删除了几个以前被认为是实用的函数。

BalancevsTokenPayment

在 erdjs 10 中,类BalanceBalanceBuilder不再存在。

相反,应该根据具体情况使用TokenPaymentIAccountBalance(简单的BigNumber)。

erdjs 9x:

let balance = Balance.egld(1); 

erdjs 10:

let paymentEGLD = TokenPayment.egldFromAmount("1");
let paymentFungible = TokenPayment.fungibleFromBigInteger(identifier, "1000000", numDecimals);
let paymentNonFungible = TokenPayment.nonFungible(identifier, nonce); 

交易广播和抓取

以下效用函数不再可用:transaction.send()transaction.getAsOnNetwork()

相反,您应该直接致电网络提供商:

await networkProvider.sendTransaction(tx);
await networkProvider.getTransaction(txHash) 

等待交易

在 erdjs 10 中,以下实用函数不再可用:transaction.awaitExecuted()transaction.awaitPending()

相反,应该直接使用TransactionWatcher:

let transactionWatcher = new TransactionWatcher(networkProvider);
await watcher.awaitCompleted(tx); 

抓取网络配置

在 erdjs 10 中,我们已经删除了实用函数NetworkConfig.getDefault()NetworkConfig.sync()

相反,应该按如下方式获取网络配置:

let networkConfig = await provider.getNetworkConfig(); 

然后缓存响应,如果需要的话。

随机数,气限,气价,连锁 ID

在 erdjs 10 中,类别NonceGasLimitGasPriceChainID不再存在。

相反,在创建交易/交互时,应该简单地使用原语:

let tx = new Transaction({
 nonce: 7,
 data: new TransactionPayload("helloWorld"),
 gasLimit: 70000,
 gasPrice: 1000000000,
 receiver: new Address("erd1..."),
 value: TokenPayment.egldFromAmount(1),
 chainID: "D"
}); 

创建合约查询

函数smartContract.runQuery()已经被删除,以便将SmartContract类从网络供应商中分离出来。

在 erdjs 10 中,应该执行以下操作:

let query = smartContract.createQuery({ /* ... */ });
let queryResponse = await networkProvider.queryContract(query); 

不得不用smartContract.createQuery() + provider.queryContract(),取而代之。

创建交互使用contract.methods

在 erdjs 10 中,当使用contract.methods.myContractFunction([a, b, c])时,类型推理系统开始发挥作用。

也就是说,你不能再写以下内容:

let interaction = <Interaction>this.contract.methods.getLotteryInfo([
    BytesValue.fromUTF8("my-lottery")
]); 

相反,您必须要么不提供类型化值 ar 参数(将应用自动类型推断):

let interaction = <Interaction>this.contract.methods.getLotteryInfo(["my-lottery")]); 

-或者像以前一样提供类型化的值,但是使用methodsExplicit对象:

let interaction = <Interaction>this.contract.methodsExplicit.getLotteryInfo([
    BytesValue.fromUTF8("my-lottery")
]); 

解析合约结果

erdjs 10 中重新编写了用于解析合约结果的模块。ExecutionResultsBundleQueryResponseBundle已被移除,并由TypedOutcomeBundle(及其非类型化的对应项UntypedOutcomeBundle)替代。SmartContractResults已更改,不再使用immediate resultresulting calls的概念。相反,解释SmartContractResults.items现在是ResultsParser的责任。interpretQueryResponse()interpretExecutionResults()不再存在于Interaction对象上。DefaultInteractionRunner也已删除。

TransactionOnNetworkgetReceipt()getSmartContractResults()getLogs()功能被删除。基础属性现在是公共的。此外,TransactionOnNetwork现在被定义在@elrondnetwork/erdjs-network-providers内。

为了在 erdjs 10 中解析合约结果,请遵循本指南

EsdtHelpers``ScArgumentsParservstransaction-decoder

在 erdjs 10 中,类EsdtHelpersScArgumentsParser已经被删除。

相反,应该引用并使用包@ elrond network/transaction-decoder

现在需要 ChainID

ChainID现在是Transaction构造函数的必需参数。

此外,在调用interaction.buildTransaction()之前必须使用interaction.withChainID("D")

let tx = interaction
    .withNonce(7)
    .withGasLimit(20000000)
    .withChainID("D")
    .buildTransaction(); 

erdjs-snippets 从 v2.x 迁移到 v3 . x(2022 年 5 月)

为了从erdjs-snippets v2.x迁移到erdjs-snippets v3.x,请遵循这里所描绘的变化



回到顶部