迁移指南
原文:https://docs.elrond.com/sdk-and-tools/erdjs/erdjs-migration-guides
本教程将指导你从一个主要版本的 erdjs (或者它的一个卫星)迁移到另一个版本。
重要
确保你已经提前看了一遍秘籍。
从 v9.x 迁移 erdjs 到 v10(2022 年 4 月)
erdjs 10 带来了一系列突破性的变化。最重要的是,包 walletcore 、 dapp 、 contractWrappers 和网络供应商(ApiProvider
、ProxyProvider
)已经被提取到单独的存储库中——因此,它们现在作为单独的 NPM 包分发。 erdjs 不再依赖于库 fs 、 crypto 和 axios 。
负责解析合约结果或查询响应的类,以及负责交易完成检测的类也被重写。
此外,为了简化和改进 erdjs 的代码库,我们已经删除了几个以前被认为是实用的函数。
Balance
vsTokenPayment
在 erdjs 10 中,类Balance
和BalanceBuilder
不再存在。
相反,应该根据具体情况使用TokenPayment
或IAccountBalance
(简单的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 中,类别Nonce
、GasLimit
、GasPrice
和ChainID
不再存在。
相反,在创建交易/交互时,应该简单地使用原语:
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 中重新编写了用于解析合约结果的模块。ExecutionResultsBundle
和QueryResponseBundle
已被移除,并由TypedOutcomeBundle
(及其非类型化的对应项UntypedOutcomeBundle
)替代。SmartContractResults
已更改,不再使用immediate result
和resulting calls
的概念。相反,解释SmartContractResults.items
现在是ResultsParser
的责任。interpretQueryResponse()
和interpretExecutionResults()
不再存在于Interaction
对象上。DefaultInteractionRunner
也已删除。
TransactionOnNetwork
的getReceipt()
、getSmartContractResults()
和getLogs()
功能被删除。基础属性现在是公共的。此外,TransactionOnNetwork
现在被定义在@elrondnetwork/erdjs-network-providers
内。
为了在 erdjs 10 中解析合约结果,请遵循本指南。
EsdtHelpers``ScArgumentsParser
vstransaction-decoder
在 erdjs 10 中,类EsdtHelpers
和ScArgumentsParser
已经被删除。
相反,应该引用并使用包@ 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
,请遵循这里所描绘的变化。