Migration to 13.0.0
This guide describes all breaking changes introduced with v13.0.0.
Wallet
onSign, onMessageSign callbacks were removed on the wallet side
Check allowance to sign on the account side instead, using aeppOrigin, aeppRpcClientId options.
Aepp
All wallet provided nodes have the same name
Specified in name option of connectToWallet.
Select option removed from connectToWallet
If you are using connectNode then the current node would always be the same as wallet provides.
Contract
ACI format used the same as returned by aesophia_cli
aesophia_http old format
{
"encoded_aci": { contract: <1> },
"external_encoded_aci": [<2>]
}
aesophia_cli format
[<2>, { contract: <1> }]
params argument in $deploy and $call is required
Contract methods accessible on the instance itself
Apply a patch:
-const contract = aeSdk.getContractInstance(<contract args>);
+const contract = aeSdk.getContractInstance<{ foo: (a: bigint) => bigint }>(<contract args>);
-await contract.methods.foo(<arguments>);
+await contract.foo(<arguments>);
contract.methods.<name>.get,send removed
Use callStatic option instead.
contract.bytecode,sourceCode moved to contract.$options
contract.calldata renamed to contract._calldata
Use contract._calldata (considered to be a private field) or aepp-calldata package directly.
contract.options renamed to contract.$options
contract.deployInfo removed
Use the return value of contract.$deploy instead.
contract.deployInfo.address moved to contract.$options.address.
contract.decodeEvents renamed to contract.$decodeEvents
contract.call renamed to contract.$call
contract.compile renamed to contract.$compile
contract.deploy renamed to contract.$deploy
createAensDelegationSignature, createOracleDelegationSignature removed
Use createDelegationSignature instead.
use sourceCode instead of source
It is related to getContractInstance and signing using Generalized accounts. Apply a change:
-aeSdk.getContractInstance({ source: <contract source code>, ... })
+aeSdk.getContractInstance({ sourceCode: <contract source code>, ... })
-aeSdk.spend(..., { authData: { source: <contract source code>, args: [...] } })
+aeSdk.spend(..., { authData: { sourceCode: <contract source code>, args: [...] } })
getContractInstance accepts address instead of contractAddress
Apply a change:
-aeSdk.getContractInstance({ contractAddress: <contract address>, ... })
+aeSdk.getContractInstance({ address: <contract address>, ... })
getContractInstance function replaced with Contract class
Apply a patch:
-contract = await getContractInstance(<options>);
+contract = await Contract.initialize(<options>);
AeSdk.getContractInstance renamed to AeSdk.initializeContract
prepareTxParams, getVmVersion are not exported anymore
Use buildTx instead.
isGA method removed
Use (await aeSdk.getAccount(<address>)).kind === 'generalized' instead.
Transaction builder
writeInt function removed
Use toBytes util instead.
returnType of contract call result structure is a value of CallReturnType enum
Apply a patch:
-contractCall.returnType === "error"
+contractCall.returnType === CallReturnType.Error
writeId, readId functions removed
Use transaction builder instead.
readPointers, buildPointers functions removed
Use transaction builder instead.
formatSalt function removed
Use Buffer.from(<salt>.toString(16).padStart(64, '0'), 'hex') instead.
validateParams, unpackRawTx functions removed
Use transaction builder instead.
AMOUNT constant removed
If necessary, use 0 instead.
StateTrees fields decoded as objects mapping key to decoded entry instead of internals
The content of Tag.*Mtree entries decoded and moved to payload field
TX_SCHEMA, TxParamsCommon, TxSchema, TxTypeSchemas are not exported anymore
TX_TTL is not exported anymore
Use 0 instead.
Enum FIELD_TYPES is not exported anymore
Not able to build/unpack CompilerSophia entry (tag 70)
Enums PROTOCOL_VM_ABI, interface CtVersion not exported anymore
Enums VM_VERSIONS, ABI_VERSIONS, PROTOCOL_VERSIONS renamed
They are exported as VmVersion, AbiVersion, ConsensusProtocolVersion.
stateHash of Channel entry decoded as st_-prefixed string instead of hex
SpendTx payload doesn't accept arbitrary strings anymore
Provide a ba_-encoded string instead.
-payload: 'test',
+payload: encode(Buffer.from('test'), Encoding.Bytearray),
verifyTransaction doesn't accept parent tx types anymore
buildTx doesn't accept excludeKeys option anymore
Consider opening an issue, if you need this functionality.
Use version instead of VSN, vsn in unpackTx, buildTx
buildTx accepts transaction type and version in the first argument
Apply a change:
-buildTx({ ... }, Tag.SpendTx, { version: 2 })
+buildTx({ ..., tag: Tag.SpendTx, version: 2 })
AeSdk.buildTx accepts tag in options
Replace aeSdk.buildTx(Tag.SpendTx, { ... }) with aeSdk.buildTx({ ..., tag: Tag.SpendTx }).
sync buildTx accepts denomination in the first argument
-buildTx({ ... }, { denomination: AE_AMOUNT_FORMATS.AETTOS })
+buildTx({ ..., denomination: AE_AMOUNT_FORMATS.AETTOS })
unpackTx return an object of transaction parameters
Use unpackTx(...) instead of unpackTx(...).tx.
unpackTx doesn't return rlpEncoded anymore
Use decode(buildTx(unpackTx(...))) instead.
unpackTx doesn't return txType anymore
Use unpackTx(...).tag instead.
buildTx return string instead of object
Use just buildTx(...) instead of buildTx(...).tx.
buildTx doesn't return txObject anymore
Use unpackTx(buildTx(...)) instead.
buildTx doesn't return binary anymore
Use require('rlp').decode(decode(buildTx(...))) instead.
buildTx doesn't return rlpEncoded anymore
Use decode(buildTx(...)) instead.
key of MtreeValue entry decoded as a buffer instead of a hex
TxBuilder accepts and returns poi field unpacked as TreesPoi
get method of MPTree accepts and returns typed values
Apply a change:
-unpackTx(tree.get(decode('ak_97...')))
+tree.get('ak_97...')
Compiler
Compiler export renamed to CompilerHttp
removed AeSdk:compilerUrl, AeSdk:setCompilerUrl
A compiler instance needs to be passed explicitly in onCompiler option:
-import { AeSdk } from '@aeternity/aepp-sdk';
+import { AeSdk, CompilerHttp } from '@aeternity/aepp-sdk';
const aeSdk = new AeSdk({
- compilerUrl: <compiler url>,
+ onCompiler: new CompilerHttp(<compiler url>),
});
Methods of CompilerHttp moved to api property
Apply a patch:
-compilerHttp.generateACI({ code: sourceCode });
+compilerHttp.api.generateACI({ code: sourceCode });
Dropped compatibility with aesophia_http below 7.1.1, aesophia_cli below 7.0.1
Account
createGeneralizedAccount accepts sourceCode in options
Apply a patch:
-aeSdk.createGeneralizedAccount('authorize', sourceCode, ['arg-1']);
+aeSdk.createGeneralizedAccount('authorize', ['arg-1'], { sourceCode });
createMetaTx removed
Use AccountGeneralized.signTransaction instead.
AccountRpc constructor accepts arguments one by one
Apply a change:
-new AccountRpc({ rpcClient: <rpc client>, address: <address> })
+new AccountRpc(<rpc client>, <address>)
AccountMemory requires networkId in signTransaction
AccountBase simplified
networkIdremovedgetNetworkIdmethod removedsignTransaction,signMessagemade abstract
address in AccountBase is a property
Apply a change:
-await accountMemory.address(options)
+accountMemory.address
MemoryAccount accepts only secretKey
Apply a change:
-new MemoryAccount({ keypair: { publicKey: 'ak_..', secretKey: <secret key> } })
+new MemoryAccount(<secret key>)
MemoryAccount is not compatible with GA
Apply a change:
-new MemoryAccount({ gaId: <address> })
+new AccountGeneralized(<address>)
Node
url property of Node removed
Use autorest's $host property instead.
Oracle
QUERY_FEE is not exported anymore
Use 30000 instead if necessary.
Oracles created without queryFee by default
Specify queryFee in registerOracle if needed.
AeSdk:extendOracleTtl, AeSdk:respondToQuery doesn't accept oracleId
Remove the first argument.
onQuery callback of pollForQueries, oracle.pollQueries accepts a single query
It was accepting an array before. Apply a patch:
-aeSdk.pollForQueries(oracleId, (queries) => queries.forEach(handleQuery));
+aeSdk.pollForQueries(oracleId, handleQuery);
Chain
send inlined into sendTransaction
Pass not signed transaction to sendTransaction.
If you need to post signed transaction use Node:postTransaction.
AENS
height removed from the output of aensPreclaim
Use blockHeight instead:
const res = aeSdk.aensPreclaim('name.chain');
-res.height
+res.blockHeight - 1
Channel
Channel:state returns unpacked entries
Use buildTx to pack them back if needed.
All channel events emitted in snakeCase
Affected events: 'own_withdraw_locked', 'withdraw_locked', 'own_deposit_locked', 'deposit_locked', 'peer_disconnected', 'channel_reestablished'.
Channel:poi returns unpacked TreesPoi
Use just await channel.poi(...) instead of unpackTx(await channel.poi(...)).
Other
onAccount doesn't accept keypair
Apply a change:
-aeSdk.<metnod name>(..., { onAccount: <keypair> })
+aeSdk.<metnod name>(..., { onAccount: new MemoryAccount(<keypair>.secretKey) })
bigNumberToByteArray removed
Use toBytes instead.
str2buf function removed
Use Buffer.from(<data>, <encoding>) instead.
getAddressFromPriv doesn't accept private key as base64-encoded or raw string
isValidKeypair doesn't accept public key as base64-encoded string
bytesToHex function removed
Use Buffer.from(<bytes>).toString('hex') instead.
hexToBytes function removed
Use Buffer.from(<hex string>, 'hex') instead.
rename umd export to Aeternity
Subpaths imports of SDK are not allowed
SDK does versioning only for the API provided in the root export. Replace subpaths imports with imports of the package root.
-import MemoryAccount from '@aeternity/aepp-sdk/es/account/Memory.mjs';
+import { MemoryAccount } from '@aeternity/aepp-sdk';
Removed getNetworkId from AeSdkBase
Use Node.getNetworkId instead.
address a getter in AeSdkBase
Apply a change:
-await aeSdk.address()
+aeSdk.address
addAccount is a sync function
verifyMessage removed from accounts and AeSdkBase
Use verifyMessage exported in the root instead.
verify and verifyMessage accepts address instead of hex string or Uint8Array
Convert public key in Uint8Array to address using encode(pk, 'ak').
Convert public key in hex to address using encode(Buffer.from(pk, 'hex'), 'ak').
node@12 not supported
Use node@14.19 or newer.
removeAccount throws an error if the account is not found
signMessage always returns Uint8Array
Use Buffer.from(signature).toString('hex') to convert it to hex.
encryptKey, decryptKey are not exported anymore
Use 'sha.js' and 'aes-js' packages directly instead.
sha256hash is not exported anymore
Use SubtleCrypto.digest or sha.js package instead.
height method removed
Use getHeight instead.
signUsingGA method removed
Use AccountGeneralized.signTransaction instead.
POINTER_KEY_BY_PREFIX removed
Use getDefaultPointerKey instead.
ID_TAG_PREFIX, PREFIX_ID_TAG, ID_TAG removed
Use transaction builder instead.
TX_TYPE removed.
Use Tag instead.
GAS_MAX removed
The maximum gas limit depends on transaction size, this value is outdated, sdk check/provides gasLimit by itself while building a transaction.
calculateMinFee removed
Use buildTx to generate a transaction, unpack it and refer to fee field.
salt, createSalt removed
Use genSalt instead.
Pointer removed
Use NamePointer from apis/node instead.