From c0112691aadc06ef7ba6fbad07ca5cdb7ad248c3 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Fri, 20 Sep 2024 09:24:25 +0200 Subject: [PATCH 01/22] mutli-group-transfer --- packages/walletconnect/src/constants.ts | 1 + packages/walletconnect/src/provider.ts | 4 + packages/walletconnect/src/types.ts | 4 + .../walletconnect/test/shared/WalletClient.ts | 3 + packages/web3/src/api/api-alephium.ts | 50 +++++--- packages/web3/src/signer/signer.ts | 25 ++++ packages/web3/src/signer/tx-builder.ts | 22 ++++ test/tipping-multi-group.test.ts | 118 ++++++++++++++++++ 8 files changed, 213 insertions(+), 14 deletions(-) create mode 100644 test/tipping-multi-group.test.ts diff --git a/packages/walletconnect/src/constants.ts b/packages/walletconnect/src/constants.ts index 1d48d6039..17dbab33b 100644 --- a/packages/walletconnect/src/constants.ts +++ b/packages/walletconnect/src/constants.ts @@ -22,6 +22,7 @@ export const PROVIDER_NAMESPACE = 'alephium' // 2. `alph_signUnsignedTx` can be used for complicated transactions (e.g. multisig). export const RELAY_METHODS = [ 'alph_signAndSubmitTransferTx', + 'alph_signAndSubmitMultiGroupTransferTx', 'alph_signAndSubmitDeployContractTx', 'alph_signAndSubmitExecuteScriptTx', 'alph_signAndSubmitUnsignedTx', diff --git a/packages/walletconnect/src/provider.ts b/packages/walletconnect/src/provider.ts index 8027aa071..c3bcb35bb 100644 --- a/packages/walletconnect/src/provider.ts +++ b/packages/walletconnect/src/provider.ts @@ -210,6 +210,10 @@ export class WalletConnectProvider extends SignerProvider { return this.typedRequest('alph_signAndSubmitTransferTx', params) } + public async signAndSubmitMultiGroupTransferTx(params: SignTransferTxParams): Promise { + return this.typedRequest('alph_signAndSubmitMultiGroupTransferTx', params) + } + public async signAndSubmitDeployContractTx(params: SignDeployContractTxParams): Promise { return this.typedRequest('alph_signAndSubmitDeployContractTx', params) } diff --git a/packages/walletconnect/src/types.ts b/packages/walletconnect/src/types.ts index b72c076d4..ebe64508c 100644 --- a/packages/walletconnect/src/types.ts +++ b/packages/walletconnect/src/types.ts @@ -43,6 +43,10 @@ type RelayMethodsTable = { params: SignTransferTxParams result: SignTransferTxResult } + alph_signAndSubmitMultiGroupTransferTx: { + params: SignTransferTxParams + result: SignTransferTxResult[] + } alph_signAndSubmitDeployContractTx: { params: SignDeployContractTxParams result: SignDeployContractTxResult diff --git a/packages/walletconnect/test/shared/WalletClient.ts b/packages/walletconnect/test/shared/WalletClient.ts index 4be251193..dbb3bb821 100644 --- a/packages/walletconnect/test/shared/WalletClient.ts +++ b/packages/walletconnect/test/shared/WalletClient.ts @@ -277,6 +277,9 @@ export class WalletClient { case 'alph_signAndSubmitTransferTx': result = await this.signer.signAndSubmitTransferTx(request.params as any as SignTransferTxParams) break + case 'alph_signAndSubmitMultiGroupTransferTx': + result = await this.signer.signAndSubmitMultiGroupTransferTx(request.params as any as SignTransferTxParams) + break case 'alph_signAndSubmitDeployContractTx': result = await this.signer.signAndSubmitDeployContractTx( request.params as any as SignDeployContractTxParams diff --git a/packages/web3/src/api/api-alephium.ts b/packages/web3/src/api/api-alephium.ts index f1e9a4b2c..730d691c3 100644 --- a/packages/web3/src/api/api-alephium.ts +++ b/packages/web3/src/api/api-alephium.ts @@ -1407,8 +1407,8 @@ export class HttpClient { property instanceof Blob ? property : typeof property === 'object' && property !== null - ? JSON.stringify(property) - : `${property}` + ? JSON.stringify(property) + : `${property}` ) return formData }, new FormData()), @@ -1488,18 +1488,18 @@ export class HttpClient { const data = !responseFormat ? r : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data - } else { - r.error = data - } - return r - }) - .catch((e) => { - r.error = e - return r - }) + .then((data) => { + if (r.ok) { + r.data = data + } else { + r.error = data + } + return r + }) + .catch((e) => { + r.error = e + return r + }) if (cancelToken) { this.abortControllers.delete(cancelToken) @@ -2402,6 +2402,28 @@ export class Api extends HttpClient + this.request< + BuildTransactionResult[], + BadRequest | Unauthorized | NotFound | InternalServerError | ServiceUnavailable + >({ + path: `/transactions/build-multi-group`, + method: 'POST', + body: data, + type: ContentType.Json, + format: 'json', + ...params + }).then(convertHttpResponse), + + /** * No description * diff --git a/packages/web3/src/signer/signer.ts b/packages/web3/src/signer/signer.ts index 511ed1a06..d5edf29d7 100644 --- a/packages/web3/src/signer/signer.ts +++ b/packages/web3/src/signer/signer.ts @@ -65,6 +65,7 @@ export abstract class SignerProvider { } abstract signAndSubmitTransferTx(params: SignTransferTxParams): Promise + abstract signAndSubmitMultiGroupTransferTx(params: SignTransferTxParams): Promise abstract signAndSubmitDeployContractTx(params: SignDeployContractTxParams): Promise abstract signAndSubmitExecuteScriptTx(params: SignExecuteScriptTxParams): Promise abstract signAndSubmitUnsignedTx(params: SignUnsignedTxParams): Promise @@ -102,6 +103,13 @@ export abstract class SignerProviderSimple extends SignerProvider { await this.submitTransaction(signResult) return signResult } + async signAndSubmitMultiGroupTransferTx(params: SignTransferTxParams): Promise { + const signResults = await this.signMultiGroupTransferTx(params) + for (const signedTx of signResults) { + await this.submitTransaction(signedTx) + } + return signResults + } async signAndSubmitDeployContractTx(params: SignDeployContractTxParams): Promise { const signResult = await this.signDeployContractTx(params) await this.submitTransaction(signResult) @@ -141,6 +149,23 @@ export abstract class SignerProviderSimple extends SignerProvider { ) } + async signMultiGroupTransferTx(params: SignTransferTxParams): Promise { + const results = await this.buildMultiGroupTransferTx(params) + const signedTxResults = await Promise.all(results.map(async (tx) => { + const signature = await this.signRaw(params.signerAddress, tx.txId) + return { ...tx, signature } + })) + + return signedTxResults + } + + async buildMultiGroupTransferTx(params: SignTransferTxParams): Promise[]> { + return await TransactionBuilder.from(this.nodeProvider).buildMultiGroupTransferTx( + params, + await this.getPublicKey(params.signerAddress) + ) + } + async signDeployContractTx(params: SignDeployContractTxParams): Promise { const response = await this.buildDeployContractTx(params) const signature = await this.signRaw(params.signerAddress, response.txId) diff --git a/packages/web3/src/signer/tx-builder.ts b/packages/web3/src/signer/tx-builder.ts index 7bc938457..2d1aaaf98 100644 --- a/packages/web3/src/signer/tx-builder.ts +++ b/packages/web3/src/signer/tx-builder.ts @@ -76,6 +76,28 @@ export abstract class TransactionBuilder { return { ...response, gasPrice: fromApiNumber256(response.gasPrice) } } + async buildMultiGroupTransferTx( + params: SignTransferTxParams, + publicKey: string + ): Promise[]> { + TransactionBuilder.validatePublicKey(params, publicKey, params.signerKeyType) + + const { destinations, gasPrice, ...rest } = params + const data: node.BuildTransaction = { + fromPublicKey: publicKey, + fromPublicKeyType: params.signerKeyType, + destinations: toApiDestinations(destinations), + gasPrice: toApiNumber256Optional(gasPrice), + ...rest + } + const results = await this.nodeProvider.transactions.postTransactionsBuildMultiGroup(data) + const response = results.map((result) => ({ + ...result, + gasPrice: fromApiNumber256(result.gasPrice) + })) + return response + } + async buildDeployContractTx( params: SignDeployContractTxParams, publicKey: string diff --git a/test/tipping-multi-group.test.ts b/test/tipping-multi-group.test.ts new file mode 100644 index 000000000..a2e57aac1 --- /dev/null +++ b/test/tipping-multi-group.test.ts @@ -0,0 +1,118 @@ +/* +Copyright 2018 - 2022 The Alephium Authors +This file is part of the alephium project. + +The library is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +The library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with the library. If not, see . +*/ + +import { NodeProvider, convertAlphAmountWithDecimals, number256ToNumber, DEFAULT_GAS_ALPH_AMOUNT } from '@alephium/web3' +import { testNodeWallet } from '@alephium/web3-test' +import { PrivateKeyWallet, deriveHDWalletPrivateKeyForGroup } from '@alephium/web3-wallet' +import * as bip39 from 'bip39' + +class MultiGroupTippingBot { + private readonly nodeProvider: NodeProvider // This can be initialized with node url + api key in a real application + private readonly mnemonic: string // This should be stored securely in a real application + readonly userGroups: Map + + constructor(nodeProvider: NodeProvider, mnemonic: string) { + this.nodeProvider = nodeProvider + this.mnemonic = mnemonic + this.userGroups = new Map() + } + + addUser(userId: string): PrivateKeyWallet { + if (this.userGroups.has(userId)) { + throw new Error(`User ${userId} already exists`) + } + + const groupNumber = this.userGroups.size + this.userGroups.set(userId, groupNumber) + return this.getUserWallet(userId) + } + + getUserWallet(userId: string): PrivateKeyWallet { + const groupNumber = this.userGroups.get(userId) + if (groupNumber === undefined) { + throw new Error(`User ${userId} does not exist`) + } + + const [privateKey, _addressIndex] = deriveHDWalletPrivateKeyForGroup(this.mnemonic, groupNumber, 'default') + return new PrivateKeyWallet({ privateKey, nodeProvider: this.nodeProvider }) + } + + getUserAddress(userId: string) { + return this.getUserWallet(userId).address + } + + async getUserBalance(userId: string) { + const userWallet = this.getUserWallet(userId) + const balance = await userWallet.nodeProvider.addresses.getAddressesAddressBalance(userWallet.address) + return number256ToNumber(balance.balance, 18) + } + + async sendTips(fromUserId: string, toUserData: [string, number][]) { + const fromUserWallet = this.getUserWallet(fromUserId) + + const destinations = toUserData.map(([user, amount]) => ({ + address: this.getUserAddress(user), + attoAlphAmount: convertAlphAmountWithDecimals(amount)! + })) + + await fromUserWallet.signAndSubmitMultiGroupTransferTx({ + signerAddress: fromUserWallet.address, + destinations: destinations + }) + } +} + +describe('tippingbot', function () { + it('should work', async function () { + const nodeProvider = new NodeProvider('http://127.0.0.1:22973') + const mnemonic = bip39.generateMnemonic() + const tippingBot = new MultiGroupTippingBot(nodeProvider, mnemonic) + + // deposit 1 ALPH for each user + const testWallet = await testNodeWallet() + const signerAddress = (await testWallet.getSelectedAccount()).address + + const users = ['user0', 'user1', 'user2'] + const destinations = users.map(user => ({ + address: tippingBot.addUser(user).address, + attoAlphAmount: convertAlphAmountWithDecimals('1.0')! + })) + + await testWallet.signAndSubmitMultiGroupTransferTx({ + signerAddress, + destinations + }) + + // check user balance + for (const user of users) { + const balance = await tippingBot.getUserBalance(user) + expect(balance).toEqual(1.0) + } + + await tippingBot.sendTips('user0', [['user1', 0.1], ['user2', 0.2]]) + await tippingBot.sendTips('user1', [['user2', 0.3]]) + + // check user balance + const balance0 = await tippingBot.getUserBalance('user0') + const balance1 = await tippingBot.getUserBalance('user1') + const balance2 = await tippingBot.getUserBalance('user2') + expect(balance0).toEqual(1.0 - 0.1 - 0.2 - DEFAULT_GAS_ALPH_AMOUNT * 2) + expect(balance1).toEqual(1.0 - 0.2 - DEFAULT_GAS_ALPH_AMOUNT) + expect(balance2).toEqual(1.0 + 0.2 + 0.3) + }) +}) From 0cd8a3d6fd4d8adc89ec63a430280026bc0017d1 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Fri, 20 Sep 2024 09:59:52 +0200 Subject: [PATCH 02/22] fix linter errors --- packages/web3/src/signer/signer.ts | 11 ++++++----- test/tipping-multi-group.test.ts | 11 ++++++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/web3/src/signer/signer.ts b/packages/web3/src/signer/signer.ts index d5edf29d7..4550e596f 100644 --- a/packages/web3/src/signer/signer.ts +++ b/packages/web3/src/signer/signer.ts @@ -151,11 +151,12 @@ export abstract class SignerProviderSimple extends SignerProvider { async signMultiGroupTransferTx(params: SignTransferTxParams): Promise { const results = await this.buildMultiGroupTransferTx(params) - const signedTxResults = await Promise.all(results.map(async (tx) => { - const signature = await this.signRaw(params.signerAddress, tx.txId) - return { ...tx, signature } - })) - + const signedTxResults = await Promise.all( + results.map(async (tx) => { + const signature = await this.signRaw(params.signerAddress, tx.txId) + return { ...tx, signature } + }) + ) return signedTxResults } diff --git a/test/tipping-multi-group.test.ts b/test/tipping-multi-group.test.ts index a2e57aac1..17859049c 100644 --- a/test/tipping-multi-group.test.ts +++ b/test/tipping-multi-group.test.ts @@ -88,7 +88,7 @@ describe('tippingbot', function () { const signerAddress = (await testWallet.getSelectedAccount()).address const users = ['user0', 'user1', 'user2'] - const destinations = users.map(user => ({ + const destinations = users.map((user) => ({ address: tippingBot.addUser(user).address, attoAlphAmount: convertAlphAmountWithDecimals('1.0')! })) @@ -104,8 +104,13 @@ describe('tippingbot', function () { expect(balance).toEqual(1.0) } - await tippingBot.sendTips('user0', [['user1', 0.1], ['user2', 0.2]]) - await tippingBot.sendTips('user1', [['user2', 0.3]]) + await tippingBot.sendTips('user0', [ + ['user1', 0.1], + ['user2', 0.2] + ]) + await tippingBot.sendTips('user1', [ + ['user2', 0.3] + ]) // check user balance const balance0 = await tippingBot.getUserBalance('user0') From 63f205a8bcebda3222e2f743c3b366c37ce4747d Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Mon, 23 Sep 2024 09:28:08 +0200 Subject: [PATCH 03/22] rename-to-lending-test --- ...ng-multi-group.test.ts => lending.test.ts} | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) rename test/{tipping-multi-group.test.ts => lending.test.ts} (74%) diff --git a/test/tipping-multi-group.test.ts b/test/lending.test.ts similarity index 74% rename from test/tipping-multi-group.test.ts rename to test/lending.test.ts index 17859049c..51fe13cac 100644 --- a/test/tipping-multi-group.test.ts +++ b/test/lending.test.ts @@ -21,7 +21,7 @@ import { testNodeWallet } from '@alephium/web3-test' import { PrivateKeyWallet, deriveHDWalletPrivateKeyForGroup } from '@alephium/web3-wallet' import * as bip39 from 'bip39' -class MultiGroupTippingBot { +class LendingBot { private readonly nodeProvider: NodeProvider // This can be initialized with node url + api key in a real application private readonly mnemonic: string // This should be stored securely in a real application readonly userGroups: Map @@ -62,7 +62,7 @@ class MultiGroupTippingBot { return number256ToNumber(balance.balance, 18) } - async sendTips(fromUserId: string, toUserData: [string, number][]) { + async transfer(fromUserId: string, toUserData: [string, number][]) { const fromUserWallet = this.getUserWallet(fromUserId) const destinations = toUserData.map(([user, amount]) => ({ @@ -77,11 +77,13 @@ class MultiGroupTippingBot { } } -describe('tippingbot', function () { +jest.setTimeout(10_000) + +describe('lendingbot', function () { it('should work', async function () { const nodeProvider = new NodeProvider('http://127.0.0.1:22973') const mnemonic = bip39.generateMnemonic() - const tippingBot = new MultiGroupTippingBot(nodeProvider, mnemonic) + const lendingBot = new LendingBot(nodeProvider, mnemonic) // deposit 1 ALPH for each user const testWallet = await testNodeWallet() @@ -89,7 +91,7 @@ describe('tippingbot', function () { const users = ['user0', 'user1', 'user2'] const destinations = users.map((user) => ({ - address: tippingBot.addUser(user).address, + address: lendingBot.addUser(user).address, attoAlphAmount: convertAlphAmountWithDecimals('1.0')! })) @@ -100,24 +102,42 @@ describe('tippingbot', function () { // check user balance for (const user of users) { - const balance = await tippingBot.getUserBalance(user) + const balance = await lendingBot.getUserBalance(user) expect(balance).toEqual(1.0) } - await tippingBot.sendTips('user0', [ + await lendingBot.transfer('user0', [ ['user1', 0.1], ['user2', 0.2] ]) - await tippingBot.sendTips('user1', [ + await lendingBot.transfer('user1', [ ['user2', 0.3] ]) // check user balance - const balance0 = await tippingBot.getUserBalance('user0') - const balance1 = await tippingBot.getUserBalance('user1') - const balance2 = await tippingBot.getUserBalance('user2') + const balance0 = await lendingBot.getUserBalance('user0') + const balance1 = await lendingBot.getUserBalance('user1') + const balance2 = await lendingBot.getUserBalance('user2') expect(balance0).toEqual(1.0 - 0.1 - 0.2 - DEFAULT_GAS_ALPH_AMOUNT * 2) - expect(balance1).toEqual(1.0 - 0.2 - DEFAULT_GAS_ALPH_AMOUNT) + expect(balance1).toEqual(1.0 + 0.1 - 0.3 - DEFAULT_GAS_ALPH_AMOUNT) expect(balance2).toEqual(1.0 + 0.2 + 0.3) + + // repay depts + await lendingBot.transfer('user1', [ + ['user0', 0.1], + ]) + await lendingBot.transfer('user2', [ + ['user0', 0.2], + ['user1', 0.3] + ]) + + // check user balance + const balance3 = await lendingBot.getUserBalance('user0') + const balance4 = await lendingBot.getUserBalance('user1') + const balance5 = await lendingBot.getUserBalance('user2') + expect(balance3).toEqual(1.0 - 0.1 - 0.2 + 0.1 + 0.2 - DEFAULT_GAS_ALPH_AMOUNT * 2) + expect(balance4).toEqual(1.0 + 0.1 - 0.3 - 0.1 + 0.3 - DEFAULT_GAS_ALPH_AMOUNT * 2) + expect(balance5).toEqual(1.0 + 0.2 + 0.3 - 0.2 - 0.3 - DEFAULT_GAS_ALPH_AMOUNT * 2) + }) }) From 49efee62f4f2ba43069ae5cd08e7818bdeefafe2 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Tue, 24 Sep 2024 08:10:56 +0200 Subject: [PATCH 04/22] track request time --- test/lending.test.ts | 107 ++++++++++++++++++++++++++----------------- 1 file changed, 66 insertions(+), 41 deletions(-) diff --git a/test/lending.test.ts b/test/lending.test.ts index 51fe13cac..acd5dabca 100644 --- a/test/lending.test.ts +++ b/test/lending.test.ts @@ -77,7 +77,15 @@ class LendingBot { } } -jest.setTimeout(10_000) +jest.setTimeout(15_000) + +async function track(label: string, fn: () => Promise): Promise { + const start = Date.now() + const result = await fn() + const end = Date.now() + console.log(`${label} completed in ${(end - start)} milliseconds`) + return result +} describe('lendingbot', function () { it('should work', async function () { @@ -95,49 +103,66 @@ describe('lendingbot', function () { attoAlphAmount: convertAlphAmountWithDecimals('1.0')! })) - await testWallet.signAndSubmitMultiGroupTransferTx({ - signerAddress, - destinations + await track('Distributing alphs among users', async () => { + await testWallet.signAndSubmitMultiGroupTransferTx({ + signerAddress, + destinations + }) }) - // check user balance - for (const user of users) { - const balance = await lendingBot.getUserBalance(user) - expect(balance).toEqual(1.0) - } + await track('Check user balances', async () => { + for (const user of users) { + const balance = await lendingBot.getUserBalance(user) + expect(balance).toEqual(1.0) + } + }) + + await track('user0 lends to user1 and user2', async () => { + await lendingBot.transfer('user0', [ + ['user1', 0.1], + ['user2', 0.2] + ]) + }) + + await track('user1 lends to user2', async () => { + await lendingBot.transfer('user1', [ + ['user2', 0.3] + ]) + }) + + await track('Getting balances', async () => { + const balance0 = await lendingBot.getUserBalance('user0') + const balance1 = await lendingBot.getUserBalance('user1') + const balance2 = await lendingBot.getUserBalance('user2') - await lendingBot.transfer('user0', [ - ['user1', 0.1], - ['user2', 0.2] - ]) - await lendingBot.transfer('user1', [ - ['user2', 0.3] - ]) - - // check user balance - const balance0 = await lendingBot.getUserBalance('user0') - const balance1 = await lendingBot.getUserBalance('user1') - const balance2 = await lendingBot.getUserBalance('user2') - expect(balance0).toEqual(1.0 - 0.1 - 0.2 - DEFAULT_GAS_ALPH_AMOUNT * 2) - expect(balance1).toEqual(1.0 + 0.1 - 0.3 - DEFAULT_GAS_ALPH_AMOUNT) - expect(balance2).toEqual(1.0 + 0.2 + 0.3) - - // repay depts - await lendingBot.transfer('user1', [ - ['user0', 0.1], - ]) - await lendingBot.transfer('user2', [ - ['user0', 0.2], - ['user1', 0.3] - ]) - - // check user balance - const balance3 = await lendingBot.getUserBalance('user0') - const balance4 = await lendingBot.getUserBalance('user1') - const balance5 = await lendingBot.getUserBalance('user2') - expect(balance3).toEqual(1.0 - 0.1 - 0.2 + 0.1 + 0.2 - DEFAULT_GAS_ALPH_AMOUNT * 2) - expect(balance4).toEqual(1.0 + 0.1 - 0.3 - 0.1 + 0.3 - DEFAULT_GAS_ALPH_AMOUNT * 2) - expect(balance5).toEqual(1.0 + 0.2 + 0.3 - 0.2 - 0.3 - DEFAULT_GAS_ALPH_AMOUNT * 2) + expect(balance0).toEqual(1.0 - 0.1 - 0.2 - DEFAULT_GAS_ALPH_AMOUNT * 2) + expect(balance1).toEqual(1.0 + 0.1 - 0.3 - DEFAULT_GAS_ALPH_AMOUNT) + expect(balance2).toEqual(1.0 + 0.2 + 0.3) + }) + + await track('user1 returns to user0', async () => { + await lendingBot.transfer('user1', [ + ['user0', 0.1], + ]) + }) + + await track('user2 returns to user0 and user1', async () => { + await lendingBot.transfer('user2', [ + ['user0', 0.2], + ['user1', 0.3] + ]) + }) + + await track('Check user balances', async () => { + const finalBalance0 = await lendingBot.getUserBalance('user0') + const finalBalance1 = await lendingBot.getUserBalance('user1') + const finalBalance2 = await lendingBot.getUserBalance('user2') + expect(finalBalance0).toEqual(1.0 - 0.1 - 0.2 + 0.1 + 0.2 - DEFAULT_GAS_ALPH_AMOUNT * 2) + expect(finalBalance1).toEqual(1.0 + 0.1 - 0.3 - 0.1 + 0.3 - DEFAULT_GAS_ALPH_AMOUNT * 2) + expect(finalBalance2).toEqual(1.0 + 0.2 + 0.3 - 0.2 - 0.3 - DEFAULT_GAS_ALPH_AMOUNT * 2) + + console.log(`Final balances`, { finalBalance0, finalBalance1, finalBalance2 }) + }) }) }) From 125cd492ad512463784a54954a5195b00a12ee54 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Tue, 24 Sep 2024 08:24:11 +0200 Subject: [PATCH 05/22] cleanup tracking --- test/lending.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/lending.test.ts b/test/lending.test.ts index acd5dabca..8c1d9033b 100644 --- a/test/lending.test.ts +++ b/test/lending.test.ts @@ -130,7 +130,7 @@ describe('lendingbot', function () { ]) }) - await track('Getting balances', async () => { + await track('Check user balances', async () => { const balance0 = await lendingBot.getUserBalance('user0') const balance1 = await lendingBot.getUserBalance('user1') const balance2 = await lendingBot.getUserBalance('user2') @@ -161,7 +161,7 @@ describe('lendingbot', function () { expect(finalBalance1).toEqual(1.0 + 0.1 - 0.3 - 0.1 + 0.3 - DEFAULT_GAS_ALPH_AMOUNT * 2) expect(finalBalance2).toEqual(1.0 + 0.2 + 0.3 - 0.2 - 0.3 - DEFAULT_GAS_ALPH_AMOUNT * 2) - console.log(`Final balances`, { finalBalance0, finalBalance1, finalBalance2 }) + console.log('Final balances', { finalBalance0, finalBalance1, finalBalance2 }) }) }) From 6b127cefecf7e9127f8fb16c283691edba7ffdb5 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Thu, 26 Sep 2024 05:09:01 +0200 Subject: [PATCH 06/22] avoid changing signer interface for multi-group feature --- packages/walletconnect/src/constants.ts | 1 - packages/walletconnect/src/provider.ts | 4 -- packages/walletconnect/src/types.ts | 4 -- .../walletconnect/test/shared/WalletClient.ts | 3 -- packages/web3-wallet/src/privatekey-wallet.ts | 2 +- packages/web3/src/signer/signer.ts | 28 +---------- test/lending.test.ts | 48 ++++++++++++++----- 7 files changed, 38 insertions(+), 52 deletions(-) diff --git a/packages/walletconnect/src/constants.ts b/packages/walletconnect/src/constants.ts index 17dbab33b..1d48d6039 100644 --- a/packages/walletconnect/src/constants.ts +++ b/packages/walletconnect/src/constants.ts @@ -22,7 +22,6 @@ export const PROVIDER_NAMESPACE = 'alephium' // 2. `alph_signUnsignedTx` can be used for complicated transactions (e.g. multisig). export const RELAY_METHODS = [ 'alph_signAndSubmitTransferTx', - 'alph_signAndSubmitMultiGroupTransferTx', 'alph_signAndSubmitDeployContractTx', 'alph_signAndSubmitExecuteScriptTx', 'alph_signAndSubmitUnsignedTx', diff --git a/packages/walletconnect/src/provider.ts b/packages/walletconnect/src/provider.ts index c3bcb35bb..8027aa071 100644 --- a/packages/walletconnect/src/provider.ts +++ b/packages/walletconnect/src/provider.ts @@ -210,10 +210,6 @@ export class WalletConnectProvider extends SignerProvider { return this.typedRequest('alph_signAndSubmitTransferTx', params) } - public async signAndSubmitMultiGroupTransferTx(params: SignTransferTxParams): Promise { - return this.typedRequest('alph_signAndSubmitMultiGroupTransferTx', params) - } - public async signAndSubmitDeployContractTx(params: SignDeployContractTxParams): Promise { return this.typedRequest('alph_signAndSubmitDeployContractTx', params) } diff --git a/packages/walletconnect/src/types.ts b/packages/walletconnect/src/types.ts index ebe64508c..b72c076d4 100644 --- a/packages/walletconnect/src/types.ts +++ b/packages/walletconnect/src/types.ts @@ -43,10 +43,6 @@ type RelayMethodsTable = { params: SignTransferTxParams result: SignTransferTxResult } - alph_signAndSubmitMultiGroupTransferTx: { - params: SignTransferTxParams - result: SignTransferTxResult[] - } alph_signAndSubmitDeployContractTx: { params: SignDeployContractTxParams result: SignDeployContractTxResult diff --git a/packages/walletconnect/test/shared/WalletClient.ts b/packages/walletconnect/test/shared/WalletClient.ts index dbb3bb821..4be251193 100644 --- a/packages/walletconnect/test/shared/WalletClient.ts +++ b/packages/walletconnect/test/shared/WalletClient.ts @@ -277,9 +277,6 @@ export class WalletClient { case 'alph_signAndSubmitTransferTx': result = await this.signer.signAndSubmitTransferTx(request.params as any as SignTransferTxParams) break - case 'alph_signAndSubmitMultiGroupTransferTx': - result = await this.signer.signAndSubmitMultiGroupTransferTx(request.params as any as SignTransferTxParams) - break case 'alph_signAndSubmitDeployContractTx': result = await this.signer.signAndSubmitDeployContractTx( request.params as any as SignDeployContractTxParams diff --git a/packages/web3-wallet/src/privatekey-wallet.ts b/packages/web3-wallet/src/privatekey-wallet.ts index 88ad3f2cb..2938c28e5 100644 --- a/packages/web3-wallet/src/privatekey-wallet.ts +++ b/packages/web3-wallet/src/privatekey-wallet.ts @@ -37,7 +37,7 @@ export class PrivateKeyWallet extends SignerProviderSimple { return Promise.resolve(this.account) } - protected getPublicKey(address: string): Promise { + getPublicKey(address: string): Promise { if (address !== this.address) { throw Error('The signer address is invalid') } diff --git a/packages/web3/src/signer/signer.ts b/packages/web3/src/signer/signer.ts index 4550e596f..7365dc532 100644 --- a/packages/web3/src/signer/signer.ts +++ b/packages/web3/src/signer/signer.ts @@ -65,7 +65,6 @@ export abstract class SignerProvider { } abstract signAndSubmitTransferTx(params: SignTransferTxParams): Promise - abstract signAndSubmitMultiGroupTransferTx(params: SignTransferTxParams): Promise abstract signAndSubmitDeployContractTx(params: SignDeployContractTxParams): Promise abstract signAndSubmitExecuteScriptTx(params: SignExecuteScriptTxParams): Promise abstract signAndSubmitUnsignedTx(params: SignUnsignedTxParams): Promise @@ -103,13 +102,6 @@ export abstract class SignerProviderSimple extends SignerProvider { await this.submitTransaction(signResult) return signResult } - async signAndSubmitMultiGroupTransferTx(params: SignTransferTxParams): Promise { - const signResults = await this.signMultiGroupTransferTx(params) - for (const signedTx of signResults) { - await this.submitTransaction(signedTx) - } - return signResults - } async signAndSubmitDeployContractTx(params: SignDeployContractTxParams): Promise { const signResult = await this.signDeployContractTx(params) await this.submitTransaction(signResult) @@ -126,7 +118,7 @@ export abstract class SignerProviderSimple extends SignerProvider { return signResult } - protected abstract getPublicKey(address: string): Promise + abstract getPublicKey(address: string): Promise private async usePublicKey( params: T @@ -149,24 +141,6 @@ export abstract class SignerProviderSimple extends SignerProvider { ) } - async signMultiGroupTransferTx(params: SignTransferTxParams): Promise { - const results = await this.buildMultiGroupTransferTx(params) - const signedTxResults = await Promise.all( - results.map(async (tx) => { - const signature = await this.signRaw(params.signerAddress, tx.txId) - return { ...tx, signature } - }) - ) - return signedTxResults - } - - async buildMultiGroupTransferTx(params: SignTransferTxParams): Promise[]> { - return await TransactionBuilder.from(this.nodeProvider).buildMultiGroupTransferTx( - params, - await this.getPublicKey(params.signerAddress) - ) - } - async signDeployContractTx(params: SignDeployContractTxParams): Promise { const response = await this.buildDeployContractTx(params) const signature = await this.signRaw(params.signerAddress, response.txId) diff --git a/test/lending.test.ts b/test/lending.test.ts index 8c1d9033b..60076cda9 100644 --- a/test/lending.test.ts +++ b/test/lending.test.ts @@ -16,7 +16,16 @@ You should have received a copy of the GNU Lesser General Public License along with the library. If not, see . */ -import { NodeProvider, convertAlphAmountWithDecimals, number256ToNumber, DEFAULT_GAS_ALPH_AMOUNT } from '@alephium/web3' +import { + convertAlphAmountWithDecimals, + DEFAULT_GAS_ALPH_AMOUNT, + NodeProvider, + number256ToNumber, + SignerProviderSimple, + SignTransferTxParams, + SignTransferTxResult, + TransactionBuilder +} from '@alephium/web3' import { testNodeWallet } from '@alephium/web3-test' import { PrivateKeyWallet, deriveHDWalletPrivateKeyForGroup } from '@alephium/web3-wallet' import * as bip39 from 'bip39' @@ -48,7 +57,7 @@ class LendingBot { throw new Error(`User ${userId} does not exist`) } - const [privateKey, _addressIndex] = deriveHDWalletPrivateKeyForGroup(this.mnemonic, groupNumber, 'default') + const [privateKey, _] = deriveHDWalletPrivateKeyForGroup(this.mnemonic, groupNumber, 'default') return new PrivateKeyWallet({ privateKey, nodeProvider: this.nodeProvider }) } @@ -56,6 +65,26 @@ class LendingBot { return this.getUserWallet(userId).address } + async signAndSubmitMultiGroupTransferTx( + signer: SignerProviderSimple, + params: SignTransferTxParams + ): Promise { + const buildTxResults = await TransactionBuilder.from(this.nodeProvider).buildMultiGroupTransferTx( + params, + await signer.getPublicKey(params.signerAddress) + ) + const signedTxResults = await Promise.all( + buildTxResults.map(async (tx) => { + const signature = await signer.signRaw(params.signerAddress, tx.txId) + return { ...tx, signature } + }) + ) + for (const signedTx of signedTxResults) { + await signer.submitTransaction(signedTx) + } + return signedTxResults + } + async getUserBalance(userId: string) { const userWallet = this.getUserWallet(userId) const balance = await userWallet.nodeProvider.addresses.getAddressesAddressBalance(userWallet.address) @@ -70,7 +99,7 @@ class LendingBot { attoAlphAmount: convertAlphAmountWithDecimals(amount)! })) - await fromUserWallet.signAndSubmitMultiGroupTransferTx({ + await this.signAndSubmitMultiGroupTransferTx(fromUserWallet, { signerAddress: fromUserWallet.address, destinations: destinations }) @@ -83,7 +112,7 @@ async function track(label: string, fn: () => Promise): Promise { const start = Date.now() const result = await fn() const end = Date.now() - console.log(`${label} completed in ${(end - start)} milliseconds`) + console.log(`${label} completed in ${end - start} milliseconds`) return result } @@ -104,7 +133,7 @@ describe('lendingbot', function () { })) await track('Distributing alphs among users', async () => { - await testWallet.signAndSubmitMultiGroupTransferTx({ + await lendingBot.signAndSubmitMultiGroupTransferTx(testWallet, { signerAddress, destinations }) @@ -125,9 +154,7 @@ describe('lendingbot', function () { }) await track('user1 lends to user2', async () => { - await lendingBot.transfer('user1', [ - ['user2', 0.3] - ]) + await lendingBot.transfer('user1', [['user2', 0.3]]) }) await track('Check user balances', async () => { @@ -141,9 +168,7 @@ describe('lendingbot', function () { }) await track('user1 returns to user0', async () => { - await lendingBot.transfer('user1', [ - ['user0', 0.1], - ]) + await lendingBot.transfer('user1', [['user0', 0.1]]) }) await track('user2 returns to user0 and user1', async () => { @@ -163,6 +188,5 @@ describe('lendingbot', function () { console.log('Final balances', { finalBalance0, finalBalance1, finalBalance2 }) }) - }) }) From 544284aba2f7cd8abe7e6f8e18ec6caaec07aa65 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Thu, 26 Sep 2024 08:50:29 +0200 Subject: [PATCH 07/22] multi-group endpoint openapi name fix --- packages/web3/src/api/api-alephium.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web3/src/api/api-alephium.ts b/packages/web3/src/api/api-alephium.ts index 730d691c3..1f5fa7262 100644 --- a/packages/web3/src/api/api-alephium.ts +++ b/packages/web3/src/api/api-alephium.ts @@ -2406,7 +2406,7 @@ export class Api extends HttpClient Date: Fri, 4 Oct 2024 09:51:52 +0200 Subject: [PATCH 08/22] Distribute wealth in lending bot --- test/lending.test.ts | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/test/lending.test.ts b/test/lending.test.ts index 60076cda9..60ef9443f 100644 --- a/test/lending.test.ts +++ b/test/lending.test.ts @@ -91,6 +91,22 @@ class LendingBot { return number256ToNumber(balance.balance, 18) } + async distributeWealth(users: string[], deposit: bigint) { + const testWallet = await testNodeWallet() + const signerAddress = (await testWallet.getSelectedAccount()).address + + const destinations = users.map((user) => ({ + address: this.addUser(user).address, + attoAlphAmount: deposit + })) + + await this.signAndSubmitMultiGroupTransferTx(testWallet, { + signerAddress, + destinations + }) + + } + async transfer(fromUserId: string, toUserData: [string, number][]) { const fromUserWallet = this.getUserWallet(fromUserId) @@ -122,21 +138,12 @@ describe('lendingbot', function () { const mnemonic = bip39.generateMnemonic() const lendingBot = new LendingBot(nodeProvider, mnemonic) - // deposit 1 ALPH for each user - const testWallet = await testNodeWallet() - const signerAddress = (await testWallet.getSelectedAccount()).address - + // each user will start with 1 ALPH const users = ['user0', 'user1', 'user2'] - const destinations = users.map((user) => ({ - address: lendingBot.addUser(user).address, - attoAlphAmount: convertAlphAmountWithDecimals('1.0')! - })) + const deposit = convertAlphAmountWithDecimals('1.0')! await track('Distributing alphs among users', async () => { - await lendingBot.signAndSubmitMultiGroupTransferTx(testWallet, { - signerAddress, - destinations - }) + await lendingBot.distributeWealth(users, deposit) }) await track('Check user balances', async () => { From 9feb2125183dbaef3207ac9450e570d232993479 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Sun, 6 Oct 2024 10:59:01 +0200 Subject: [PATCH 09/22] generate wallet per user in lending bot --- test/lending.test.ts | 48 +++++++++++------------ test/transaction.test.ts | 85 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 24 deletions(-) diff --git a/test/lending.test.ts b/test/lending.test.ts index 60ef9443f..56e3aae41 100644 --- a/test/lending.test.ts +++ b/test/lending.test.ts @@ -28,17 +28,16 @@ import { } from '@alephium/web3' import { testNodeWallet } from '@alephium/web3-test' import { PrivateKeyWallet, deriveHDWalletPrivateKeyForGroup } from '@alephium/web3-wallet' -import * as bip39 from 'bip39' class LendingBot { private readonly nodeProvider: NodeProvider // This can be initialized with node url + api key in a real application - private readonly mnemonic: string // This should be stored securely in a real application readonly userGroups: Map + readonly userWallets: Map - constructor(nodeProvider: NodeProvider, mnemonic: string) { + constructor(nodeProvider: NodeProvider) { this.nodeProvider = nodeProvider - this.mnemonic = mnemonic this.userGroups = new Map() + this.userWallets = new Map() } addUser(userId: string): PrivateKeyWallet { @@ -47,7 +46,9 @@ class LendingBot { } const groupNumber = this.userGroups.size + const wallet = PrivateKeyWallet.Random(groupNumber, this.nodeProvider) this.userGroups.set(userId, groupNumber) + this.userWallets.set(userId, wallet) return this.getUserWallet(userId) } @@ -56,9 +57,11 @@ class LendingBot { if (groupNumber === undefined) { throw new Error(`User ${userId} does not exist`) } - - const [privateKey, _] = deriveHDWalletPrivateKeyForGroup(this.mnemonic, groupNumber, 'default') - return new PrivateKeyWallet({ privateKey, nodeProvider: this.nodeProvider }) + const wallet = this.userWallets.get(userId) + if (wallet === undefined) { + throw new Error(`User ${userId} wallet does not exist`) + } + return wallet as PrivateKeyWallet } getUserAddress(userId: string) { @@ -73,16 +76,14 @@ class LendingBot { params, await signer.getPublicKey(params.signerAddress) ) - const signedTxResults = await Promise.all( + return await Promise.all( buildTxResults.map(async (tx) => { - const signature = await signer.signRaw(params.signerAddress, tx.txId) - return { ...tx, signature } + return await signer.signAndSubmitUnsignedTx({ + signerAddress: params.signerAddress, + unsignedTx: tx.unsignedTx + }) }) ) - for (const signedTx of signedTxResults) { - await signer.submitTransaction(signedTx) - } - return signedTxResults } async getUserBalance(userId: string) { @@ -92,15 +93,15 @@ class LendingBot { } async distributeWealth(users: string[], deposit: bigint) { - const testWallet = await testNodeWallet() - const signerAddress = (await testWallet.getSelectedAccount()).address + const signer = await testNodeWallet() + const signerAddress = (await signer.getSelectedAccount()).address const destinations = users.map((user) => ({ address: this.addUser(user).address, attoAlphAmount: deposit })) - await this.signAndSubmitMultiGroupTransferTx(testWallet, { + await this.signAndSubmitMultiGroupTransferTx(signer, { signerAddress, destinations }) @@ -108,16 +109,17 @@ class LendingBot { } async transfer(fromUserId: string, toUserData: [string, number][]) { - const fromUserWallet = this.getUserWallet(fromUserId) + const signer = this.getUserWallet(fromUserId) + const signerAddress = signer.address const destinations = toUserData.map(([user, amount]) => ({ address: this.getUserAddress(user), attoAlphAmount: convertAlphAmountWithDecimals(amount)! })) - await this.signAndSubmitMultiGroupTransferTx(fromUserWallet, { - signerAddress: fromUserWallet.address, - destinations: destinations + await this.signAndSubmitMultiGroupTransferTx(signer, { + signerAddress, + destinations }) } } @@ -134,9 +136,7 @@ async function track(label: string, fn: () => Promise): Promise { describe('lendingbot', function () { it('should work', async function () { - const nodeProvider = new NodeProvider('http://127.0.0.1:22973') - const mnemonic = bip39.generateMnemonic() - const lendingBot = new LendingBot(nodeProvider, mnemonic) + const lendingBot = new LendingBot(new NodeProvider('http://127.0.0.1:22973')) // each user will start with 1 ALPH const users = ['user0', 'user1', 'user2'] diff --git a/test/transaction.test.ts b/test/transaction.test.ts index f0f81a072..a01f6584c 100644 --- a/test/transaction.test.ts +++ b/test/transaction.test.ts @@ -25,6 +25,7 @@ import { PrivateKeyWallet } from '@alephium/web3-wallet' import { ONE_ALPH } from '../packages/web3/src' import { Add, Sub, AddMain } from '../artifacts/ts' import { getSigner } from '@alephium/web3-test' +import { TransactionBuilder } from '@alephium/web3/dist/src/signer/tx-builder' describe('transactions', function () { let signer: PrivateKeyWallet @@ -34,6 +35,90 @@ describe('transactions', function () { signer = await getSigner() }) + it('should build multi-group transfer', async () => { + const nodeProvider = web3.getCurrentNodeProvider() + const signer0 = await getSigner(100n * ONE_ALPH, 0) + const signer1 = await getSigner(0n, 1) + const signer2 = await getSigner(0n, 2) + const signer3 = await getSigner(0n, 3) + const signer4 = await getSigner(0n, 0) + + const transferFrom0to1and2 = await TransactionBuilder.from(nodeProvider).buildMultiGroupTransferTx( + { + signerAddress: signer0.address, + destinations: [signer1, signer2].map((signer) => ({ + address: signer.address, + attoAlphAmount: 2n * ONE_ALPH + })) + }, + signer0.publicKey + ) + + const transferFrom0to1and2Result = await Promise.all( + transferFrom0to1and2.map(async (tx) => { + return await signer.signAndSubmitUnsignedTx({ + signerAddress: signer0.publicKey, + unsignedTx: tx.unsignedTx + }) + }) + ) + + const transferFrom1to3and4 = await TransactionBuilder.from(nodeProvider).buildMultiGroupTransferTx( + { + signerAddress: signer1.address, + destinations: [signer3, signer4].map((signer) => ({ + address: signer.address, + attoAlphAmount: ONE_ALPH + })) + }, + signer1.publicKey + ) + + const transferFrom1to3and4Result = await Promise.all( + transferFrom1to3and4.map(async (tx) => { + return await signer.signAndSubmitUnsignedTx({ + signerAddress: signer1.publicKey, + unsignedTx: tx.unsignedTx + }) + }) + ) + + const transferFrom2to3and4 = await TransactionBuilder.from(nodeProvider).buildMultiGroupTransferTx( + { + signerAddress: signer2.address, + destinations: [signer3, signer4].map((signer) => ({ + address: signer.address, + attoAlphAmount: ONE_ALPH + })) + }, + signer2.publicKey + ) + + const transferFrom2to3and4Result = await Promise.all( + transferFrom2to3and4.map(async (tx) => { + return await signer.signAndSubmitUnsignedTx({ + signerAddress: signer2.publicKey, + unsignedTx: tx.unsignedTx + }) + }) + ) + + const signer1Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer0.address) + const signer2Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer1.address) + const signer3Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer2.address) + + const gasCostTransferFrom0to1and2 = transferFrom0to1and2Result.reduce((sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), BigInt(0)) + const gasCostTransferFrom1to3and4 = transferFrom1to3and4Result.reduce((sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), BigInt(0)) + const gasCostTransferFrom2to3and4 = transferFrom2to3and4Result.reduce((sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), BigInt(0)) + const expectedSigner1Balance = 100n * ONE_ALPH - 10n * ONE_ALPH - gasCostTransferFrom0to1and2 + const expectedSigner2Balance = 10n * ONE_ALPH - 5n * ONE_ALPH - gasCostTransferFrom1to3and4 + const expectedSigner3Balance = 5n * ONE_ALPH + + expect(BigInt(signer1Balance.balance)).toBe(expectedSigner1Balance) + expect(BigInt(signer2Balance.balance)).toBe(expectedSigner2Balance) + expect(BigInt(signer3Balance.balance)).toBe(expectedSigner3Balance) + }) + it('should subscribe transaction status', async () => { const sub = Sub.contract const txParams = await sub.txParamsForDeployment(signer, { From 0efe7005381138dfda8c80ae24d2d64a5ee33196 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Mon, 7 Oct 2024 08:39:35 +0200 Subject: [PATCH 10/22] multi-group spec --- packages/web3-test/src/test-wallet.ts | 14 ++++--- test/transaction.test.ts | 59 ++++++++++++++++----------- 2 files changed, 44 insertions(+), 29 deletions(-) diff --git a/packages/web3-test/src/test-wallet.ts b/packages/web3-test/src/test-wallet.ts index f104e8f9e..cd732b301 100644 --- a/packages/web3-test/src/test-wallet.ts +++ b/packages/web3-test/src/test-wallet.ts @@ -96,11 +96,13 @@ export async function getSigner(alphAmount = ONE_ALPH * 100n, group = 0): Promis } const rootWallet = new PrivateKeyWallet({ privateKey: testPrivateKey }) const wallet = PrivateKeyWallet.Random(group) - const destinations = [{ address: wallet.address, attoAlphAmount: alphAmount }] - await rootWallet.signAndSubmitTransferTx({ signerAddress: testAddress, destinations }) + if (alphAmount > 0n) { + const destinations = [{ address: wallet.address, attoAlphAmount: alphAmount }] + await rootWallet.signAndSubmitTransferTx({ signerAddress: testAddress, destinations }) + } return wallet - } catch (_) { - throw new Error('Failed to get signer, please restart the devnet') + } catch (error) { + throw new Error(`Failed to get signer, please restart the devnet due to : ${error}`) } } @@ -118,8 +120,8 @@ export async function getSigners( wallets.push(wallet) } return wallets - } catch (_) { - throw new Error('Failed to get signers, please restart the devnet') + } catch (error) { + throw new Error(`Failed to get signers, please restart the devnet due tot : ${error}`) } } diff --git a/test/transaction.test.ts b/test/transaction.test.ts index a01f6584c..faf140f9c 100644 --- a/test/transaction.test.ts +++ b/test/transaction.test.ts @@ -16,7 +16,7 @@ You should have received a copy of the GNU Lesser General Public License along with the library. If not, see . */ -import { subscribeToTxStatus } from '../packages/web3' +import { subscribeToTxStatus, TransactionBuilder } from '../packages/web3' import { node } from '../packages/web3' import { SubscribeOptions, sleep } from '../packages/web3' import { web3 } from '../packages/web3' @@ -25,7 +25,8 @@ import { PrivateKeyWallet } from '@alephium/web3-wallet' import { ONE_ALPH } from '../packages/web3/src' import { Add, Sub, AddMain } from '../artifacts/ts' import { getSigner } from '@alephium/web3-test' -import { TransactionBuilder } from '@alephium/web3/dist/src/signer/tx-builder' + +jest.setTimeout(10_000) describe('transactions', function () { let signer: PrivateKeyWallet @@ -37,32 +38,40 @@ describe('transactions', function () { it('should build multi-group transfer', async () => { const nodeProvider = web3.getCurrentNodeProvider() - const signer0 = await getSigner(100n * ONE_ALPH, 0) - const signer1 = await getSigner(0n, 1) - const signer2 = await getSigner(0n, 2) + const signer0 = await getSigner(100n * ONE_ALPH, 1) + const signer1 = await getSigner(0n, 2) + const signer2 = await getSigner(0n, 3) const signer3 = await getSigner(0n, 3) const signer4 = await getSigner(0n, 0) + const signer0Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer0.address) + expect(BigInt(signer0Balance.balance)).toBe(100n * ONE_ALPH) + const transferFrom0to1and2 = await TransactionBuilder.from(nodeProvider).buildMultiGroupTransferTx( { signerAddress: signer0.address, destinations: [signer1, signer2].map((signer) => ({ address: signer.address, - attoAlphAmount: 2n * ONE_ALPH + attoAlphAmount: 10n * ONE_ALPH })) }, - signer0.publicKey + await signer0.getPublicKey(signer0.address) ) const transferFrom0to1and2Result = await Promise.all( transferFrom0to1and2.map(async (tx) => { - return await signer.signAndSubmitUnsignedTx({ - signerAddress: signer0.publicKey, + return await signer0.signAndSubmitUnsignedTx({ + signerAddress: signer0.address, unsignedTx: tx.unsignedTx }) }) ) + const signer1Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer1.address) + expect(BigInt(signer1Balance.balance)).toBe(10n * ONE_ALPH) + const signer2Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer2.address) + expect(BigInt(signer2Balance.balance)).toBe(10n * ONE_ALPH) + const transferFrom1to3and4 = await TransactionBuilder.from(nodeProvider).buildMultiGroupTransferTx( { signerAddress: signer1.address, @@ -76,8 +85,8 @@ describe('transactions', function () { const transferFrom1to3and4Result = await Promise.all( transferFrom1to3and4.map(async (tx) => { - return await signer.signAndSubmitUnsignedTx({ - signerAddress: signer1.publicKey, + return await signer1.signAndSubmitUnsignedTx({ + signerAddress: signer1.address, unsignedTx: tx.unsignedTx }) }) @@ -96,27 +105,31 @@ describe('transactions', function () { const transferFrom2to3and4Result = await Promise.all( transferFrom2to3and4.map(async (tx) => { - return await signer.signAndSubmitUnsignedTx({ - signerAddress: signer2.publicKey, + return await signer2.signAndSubmitUnsignedTx({ + signerAddress: signer2.address, unsignedTx: tx.unsignedTx }) }) ) - const signer1Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer0.address) - const signer2Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer1.address) - const signer3Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer2.address) + const signer0FinalBalance = await nodeProvider.addresses.getAddressesAddressBalance(signer0.address) + const signer1FinalBalance = await nodeProvider.addresses.getAddressesAddressBalance(signer1.address) + const signer2FinalBalance = await nodeProvider.addresses.getAddressesAddressBalance(signer2.address) + const signer3FinalBalance = await nodeProvider.addresses.getAddressesAddressBalance(signer3.address) + const signer4FinalBalance = await nodeProvider.addresses.getAddressesAddressBalance(signer4.address) const gasCostTransferFrom0to1and2 = transferFrom0to1and2Result.reduce((sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), BigInt(0)) const gasCostTransferFrom1to3and4 = transferFrom1to3and4Result.reduce((sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), BigInt(0)) const gasCostTransferFrom2to3and4 = transferFrom2to3and4Result.reduce((sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), BigInt(0)) - const expectedSigner1Balance = 100n * ONE_ALPH - 10n * ONE_ALPH - gasCostTransferFrom0to1and2 - const expectedSigner2Balance = 10n * ONE_ALPH - 5n * ONE_ALPH - gasCostTransferFrom1to3and4 - const expectedSigner3Balance = 5n * ONE_ALPH - - expect(BigInt(signer1Balance.balance)).toBe(expectedSigner1Balance) - expect(BigInt(signer2Balance.balance)).toBe(expectedSigner2Balance) - expect(BigInt(signer3Balance.balance)).toBe(expectedSigner3Balance) + const expectedSigner0Balance = 100n * ONE_ALPH - 20n * ONE_ALPH - gasCostTransferFrom0to1and2 + const expectedSigner1Balance = 10n * ONE_ALPH - 2n * ONE_ALPH - gasCostTransferFrom1to3and4 + const expectedSigner2Balance = 10n * ONE_ALPH - 2n * ONE_ALPH - gasCostTransferFrom2to3and4 + + expect(BigInt(signer0FinalBalance.balance)).toBe(expectedSigner0Balance) + expect(BigInt(signer1FinalBalance.balance)).toBe(expectedSigner1Balance) + expect(BigInt(signer2FinalBalance.balance)).toBe(expectedSigner2Balance) + expect(BigInt(signer3FinalBalance.balance)).toBe(4n * ONE_ALPH) + expect(BigInt(signer4FinalBalance.balance)).toBe(4n * ONE_ALPH) }) it('should subscribe transaction status', async () => { From 23a720d8139ddeb6301524582e31a47c40bbded1 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Mon, 7 Oct 2024 10:16:10 +0200 Subject: [PATCH 11/22] docker image with dev-alephium multi-group support --- docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index e67a71b41..09829fdd7 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -29,7 +29,7 @@ services: condition: service_healthy alephium: - image: alephium/alephium:v3.6.2 + image: pragmaxim/dev-alephium:3.6.2_33-69aaa47a-SNAPSHOT restart: unless-stopped ports: - 19973:19973/tcp From 00596a77f047d917d9ff26d0bd68c59da0002c92 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Mon, 7 Oct 2024 10:27:52 +0200 Subject: [PATCH 12/22] Transaction test fix --- test/transaction.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/transaction.test.ts b/test/transaction.test.ts index faf140f9c..310244914 100644 --- a/test/transaction.test.ts +++ b/test/transaction.test.ts @@ -128,8 +128,8 @@ describe('transactions', function () { expect(BigInt(signer0FinalBalance.balance)).toBe(expectedSigner0Balance) expect(BigInt(signer1FinalBalance.balance)).toBe(expectedSigner1Balance) expect(BigInt(signer2FinalBalance.balance)).toBe(expectedSigner2Balance) - expect(BigInt(signer3FinalBalance.balance)).toBe(4n * ONE_ALPH) - expect(BigInt(signer4FinalBalance.balance)).toBe(4n * ONE_ALPH) + expect(BigInt(signer3FinalBalance.balance)).toBe(2n * ONE_ALPH) + expect(BigInt(signer4FinalBalance.balance)).toBe(2n * ONE_ALPH) }) it('should subscribe transaction status', async () => { From f1cad930187cab0425bf4f795be26aea2f5ebabf Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Mon, 7 Oct 2024 18:09:52 +0200 Subject: [PATCH 13/22] using alephium docker image with multi-group feature --- docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 9bcb90e04..de5bdf6b6 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -29,7 +29,7 @@ services: condition: service_healthy alephium: - image: alephium/alephium:v3.7.0 + image: pragmaxim/dev-alephium:3.6.4_120-61c57fd2_20241007-1739-SNAPSHOT restart: unless-stopped ports: - 19973:19973/tcp From 68c694c9ac0f4c36e13d75ef0074ffabc57bdb8b Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Tue, 8 Oct 2024 10:12:06 +0200 Subject: [PATCH 14/22] fixing racing condition --- test/lending.test.ts | 18 ++++++++------- test/transaction.test.ts | 47 +++++++++++++++++++--------------------- 2 files changed, 32 insertions(+), 33 deletions(-) diff --git a/test/lending.test.ts b/test/lending.test.ts index 56e3aae41..a00615fe2 100644 --- a/test/lending.test.ts +++ b/test/lending.test.ts @@ -21,6 +21,7 @@ import { DEFAULT_GAS_ALPH_AMOUNT, NodeProvider, number256ToNumber, + ONE_ALPH, SignerProviderSimple, SignTransferTxParams, SignTransferTxResult, @@ -76,14 +77,15 @@ class LendingBot { params, await signer.getPublicKey(params.signerAddress) ) - return await Promise.all( - buildTxResults.map(async (tx) => { - return await signer.signAndSubmitUnsignedTx({ - signerAddress: params.signerAddress, - unsignedTx: tx.unsignedTx - }) + const results: SignTransferTxResult[] = [] + for (const tx of buildTxResults) { + const result = await signer.signAndSubmitUnsignedTx({ + signerAddress: params.signerAddress, + unsignedTx: tx.unsignedTx }) - ) + results.push(result) + } + return results } async getUserBalance(userId: string) { @@ -140,7 +142,7 @@ describe('lendingbot', function () { // each user will start with 1 ALPH const users = ['user0', 'user1', 'user2'] - const deposit = convertAlphAmountWithDecimals('1.0')! + const deposit = ONE_ALPH await track('Distributing alphs among users', async () => { await lendingBot.distributeWealth(users, deposit) diff --git a/test/transaction.test.ts b/test/transaction.test.ts index 310244914..71668c853 100644 --- a/test/transaction.test.ts +++ b/test/transaction.test.ts @@ -16,7 +16,7 @@ You should have received a copy of the GNU Lesser General Public License along with the library. If not, see . */ -import { subscribeToTxStatus, TransactionBuilder } from '../packages/web3' +import { SignTransferTxResult, SignUnsignedTxResult, subscribeToTxStatus, TransactionBuilder } from '../packages/web3' import { node } from '../packages/web3' import { SubscribeOptions, sleep } from '../packages/web3' import { web3 } from '../packages/web3' @@ -28,6 +28,23 @@ import { getSigner } from '@alephium/web3-test' jest.setTimeout(10_000) +async function signAndSubmitTransactions( + transactions: Omit[], + signer: PrivateKeyWallet +): Promise { + const signedResults: SignTransferTxResult[] = []; + + for (const tx of transactions) { + const result = await signer.signAndSubmitUnsignedTx({ + signerAddress: signer.address, + unsignedTx: tx.unsignedTx + }); + signedResults.push(result); + } + + return signedResults; +} + describe('transactions', function () { let signer: PrivateKeyWallet @@ -58,14 +75,7 @@ describe('transactions', function () { await signer0.getPublicKey(signer0.address) ) - const transferFrom0to1and2Result = await Promise.all( - transferFrom0to1and2.map(async (tx) => { - return await signer0.signAndSubmitUnsignedTx({ - signerAddress: signer0.address, - unsignedTx: tx.unsignedTx - }) - }) - ) + const transferFrom0to1and2Result = await signAndSubmitTransactions(transferFrom0to1and2, signer0) const signer1Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer1.address) expect(BigInt(signer1Balance.balance)).toBe(10n * ONE_ALPH) @@ -83,14 +93,7 @@ describe('transactions', function () { signer1.publicKey ) - const transferFrom1to3and4Result = await Promise.all( - transferFrom1to3and4.map(async (tx) => { - return await signer1.signAndSubmitUnsignedTx({ - signerAddress: signer1.address, - unsignedTx: tx.unsignedTx - }) - }) - ) + const transferFrom1to3and4Result = await signAndSubmitTransactions(transferFrom1to3and4, signer1) const transferFrom2to3and4 = await TransactionBuilder.from(nodeProvider).buildMultiGroupTransferTx( { @@ -103,14 +106,8 @@ describe('transactions', function () { signer2.publicKey ) - const transferFrom2to3and4Result = await Promise.all( - transferFrom2to3and4.map(async (tx) => { - return await signer2.signAndSubmitUnsignedTx({ - signerAddress: signer2.address, - unsignedTx: tx.unsignedTx - }) - }) - ) + + const transferFrom2to3and4Result = await signAndSubmitTransactions(transferFrom2to3and4, signer2) const signer0FinalBalance = await nodeProvider.addresses.getAddressesAddressBalance(signer0.address) const signer1FinalBalance = await nodeProvider.addresses.getAddressesAddressBalance(signer1.address) From 0748c1c6c347ae302a32f98ad3f31707672f0e6d Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Tue, 8 Oct 2024 10:38:48 +0200 Subject: [PATCH 15/22] lint:fix lending and transaction tests --- test/lending.test.ts | 1 - test/transaction.test.ts | 26 +++++++++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/test/lending.test.ts b/test/lending.test.ts index a00615fe2..6e7c89d16 100644 --- a/test/lending.test.ts +++ b/test/lending.test.ts @@ -107,7 +107,6 @@ class LendingBot { signerAddress, destinations }) - } async transfer(fromUserId: string, toUserData: [string, number][]) { diff --git a/test/transaction.test.ts b/test/transaction.test.ts index 71668c853..14f7535ca 100644 --- a/test/transaction.test.ts +++ b/test/transaction.test.ts @@ -29,20 +29,20 @@ import { getSigner } from '@alephium/web3-test' jest.setTimeout(10_000) async function signAndSubmitTransactions( - transactions: Omit[], + transactions: Omit[], signer: PrivateKeyWallet ): Promise { - const signedResults: SignTransferTxResult[] = []; + const signedResults: SignTransferTxResult[] = [] for (const tx of transactions) { const result = await signer.signAndSubmitUnsignedTx({ signerAddress: signer.address, unsignedTx: tx.unsignedTx - }); - signedResults.push(result); + }) + signedResults.push(result) } - return signedResults; + return signedResults } describe('transactions', function () { @@ -106,7 +106,6 @@ describe('transactions', function () { signer2.publicKey ) - const transferFrom2to3and4Result = await signAndSubmitTransactions(transferFrom2to3and4, signer2) const signer0FinalBalance = await nodeProvider.addresses.getAddressesAddressBalance(signer0.address) @@ -115,9 +114,18 @@ describe('transactions', function () { const signer3FinalBalance = await nodeProvider.addresses.getAddressesAddressBalance(signer3.address) const signer4FinalBalance = await nodeProvider.addresses.getAddressesAddressBalance(signer4.address) - const gasCostTransferFrom0to1and2 = transferFrom0to1and2Result.reduce((sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), BigInt(0)) - const gasCostTransferFrom1to3and4 = transferFrom1to3and4Result.reduce((sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), BigInt(0)) - const gasCostTransferFrom2to3and4 = transferFrom2to3and4Result.reduce((sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), BigInt(0)) + const gasCostTransferFrom0to1and2 = transferFrom0to1and2Result.reduce( + (sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), + BigInt(0) + ) + const gasCostTransferFrom1to3and4 = transferFrom1to3and4Result.reduce( + (sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), + BigInt(0) + ) + const gasCostTransferFrom2to3and4 = transferFrom2to3and4Result.reduce( + (sum, item) => sum + BigInt(item.gasAmount) * BigInt(item.gasPrice), + BigInt(0) + ) const expectedSigner0Balance = 100n * ONE_ALPH - 20n * ONE_ALPH - gasCostTransferFrom0to1and2 const expectedSigner1Balance = 10n * ONE_ALPH - 2n * ONE_ALPH - gasCostTransferFrom1to3and4 const expectedSigner2Balance = 10n * ONE_ALPH - 2n * ONE_ALPH - gasCostTransferFrom2to3and4 From bdc704c45397d7dc06142c0c31129dd96c0ba784 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Tue, 8 Oct 2024 11:21:11 +0200 Subject: [PATCH 16/22] cleanup after merging master --- .project.json | 2 +- artifacts/add/Add.ral.json | 2 +- artifacts/add/AddMain.ral.json | 2 +- artifacts/add/DestroyAdd.ral.json | 2 +- artifacts/greeter/Greeter.ral.json | 2 +- artifacts/greeter/GreeterMain.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest1.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest2.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest3.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest4.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest5.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest6.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest7.ral.json | 2 +- artifacts/nft/MintNFTTest.ral.json | 2 +- artifacts/nft/NFTCollectionTest.ral.json | 2 +- artifacts/nft/NFTCollectionWithRoyaltyTest.ral.json | 2 +- artifacts/nft/NFTTest.ral.json | 2 +- artifacts/nft/NFTTestStd.ral.json | 2 +- artifacts/nft/WithdrawNFTCollectionTest.ral.json | 2 +- artifacts/nft/WrongNFTTest.ral.json | 2 +- artifacts/sub/Sub.ral.json | 2 +- artifacts/test/Assert.ral.json | 2 +- artifacts/test/CallScript0.ral.json | 2 +- artifacts/test/CallScript1.ral.json | 2 +- artifacts/test/Debug.ral.json | 2 +- artifacts/test/InsertIntoMap.ral.json | 2 +- artifacts/test/MapTest.ral.json | 2 +- artifacts/test/MapTestWrapper.ral.json | 2 +- artifacts/test/MetaData.ral.json | 2 +- artifacts/test/MultiDeposit.ral.json | 2 +- artifacts/test/MultiWithdraw.ral.json | 2 +- artifacts/test/OwnerOnly.ral.json | 2 +- artifacts/test/RemoveFromMap.ral.json | 2 +- artifacts/test/TemplateArrayVar.ral.json | 2 +- artifacts/test/TestAssert.ral.json | 2 +- artifacts/test/Transact.ral.json | 2 +- artifacts/test/UpdateMapValue.ral.json | 2 +- artifacts/test/UpdateUserAccount.ral.json | 2 +- artifacts/test/UserAccount.ral.json | 2 +- artifacts/test/Warnings.ral.json | 2 +- artifacts/token/FakeTokenTest.ral.json | 2 +- artifacts/token/TokenTest.ral.json | 2 +- artifacts/token/TokenTestStd.ral.json | 2 +- 43 files changed, 43 insertions(+), 43 deletions(-) diff --git a/.project.json b/.project.json index f597732fb..3a3fa1f92 100644 --- a/.project.json +++ b/.project.json @@ -1,5 +1,5 @@ { - "fullNodeVersion": "v3.7.0", + "fullNodeVersion": "v3.6.4", "compilerOptionsUsed": { "ignoreUnusedConstantsWarnings": false, "ignoreUnusedVariablesWarnings": false, diff --git a/artifacts/add/Add.ral.json b/artifacts/add/Add.ral.json index 0cd3d840a..f84c22afe 100644 --- a/artifacts/add/Add.ral.json +++ b/artifacts/add/Add.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "Add", "bytecode": "0206124024404f407440a140af010002100205d34fbb20db1600160100020201000c0c0205d36a51f82d1600160100020200000202021805160016015f06160016015f075da00016002a16012aa100a000160016010e0dce000100020103040c0011d319adf50e1300641600130164170517041603d1a21601160216041605c118010104060015d3f6ce55a6130064160013016417051704160316021340c8ac1603d1a21601160216041605c118010201010003d320f98f621600b0", "codeHash": "6a1f1415a68d55365e205b39e5418cd1f6fc8c2c7926d3662c77d69b55c92681", diff --git a/artifacts/add/AddMain.ral.json b/artifacts/add/AddMain.ral.json index 2346e9271..d82d916d4 100644 --- a/artifacts/add/AddMain.ral.json +++ b/artifacts/add/AddMain.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "AddMain", "bytecodeTemplate": "0101030002000c{1}{2}17011700160016010e0e{0}01001818", "fieldsSig": { diff --git a/artifacts/add/DestroyAdd.ral.json b/artifacts/add/DestroyAdd.ral.json index 3d5523901..3b9081756 100644 --- a/artifacts/add/DestroyAdd.ral.json +++ b/artifacts/add/DestroyAdd.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "DestroyAdd", "bytecodeTemplate": "01010300000005{1}0d0c{0}0105", "fieldsSig": { diff --git a/artifacts/greeter/Greeter.ral.json b/artifacts/greeter/Greeter.ral.json index 5d86b7d54..860e5f6d5 100644 --- a/artifacts/greeter/Greeter.ral.json +++ b/artifacts/greeter/Greeter.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "Greeter", "bytecode": "190111010000000106d3952f757b030c7bce0002", "codeHash": "4bbf82c83dcb0a3df905c290fbc12a19ce5160a7b655c1a347913481da12d747", diff --git a/artifacts/greeter/GreeterMain.ral.json b/artifacts/greeter/GreeterMain.ral.json index 3d52470e8..596e8e4ef 100644 --- a/artifacts/greeter/GreeterMain.ral.json +++ b/artifacts/greeter/GreeterMain.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "GreeterMain", "bytecodeTemplate": "01010300020014{0}17000c0d160001000d2f0c7b{0}17010c0d1601d4952f757b0d2f0c7b", "fieldsSig": { diff --git a/artifacts/nft/DeprecatedNFTTest1.ral.json b/artifacts/nft/DeprecatedNFTTest1.ral.json index f42df4c37..1e8548cb5 100644 --- a/artifacts/nft/DeprecatedNFTTest1.ral.json +++ b/artifacts/nft/DeprecatedNFTTest1.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "DeprecatedNFTTest1", "bytecode": "02010e010000000103d3ee6a5cd5ce0102", "codeHash": "cc6928c9c6777077abcb5b9c4f7c5d620d6cae07ec6f00f5e8b0efe6a7b913c4", diff --git a/artifacts/nft/DeprecatedNFTTest2.ral.json b/artifacts/nft/DeprecatedNFTTest2.ral.json index 562ded2a2..38c4b756c 100644 --- a/artifacts/nft/DeprecatedNFTTest2.ral.json +++ b/artifacts/nft/DeprecatedNFTTest2.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "DeprecatedNFTTest2", "bytecode": "02020e1c010000000103d3ee6a5cd5ce0102010000000103d33e65d93dce0002", "codeHash": "ade9aee476ee752050a1e9e1b19039f05261cb3f53941152617174faf9eae572", diff --git a/artifacts/nft/DeprecatedNFTTest3.ral.json b/artifacts/nft/DeprecatedNFTTest3.ral.json index 9622f83aa..7b994e1fe 100644 --- a/artifacts/nft/DeprecatedNFTTest3.ral.json +++ b/artifacts/nft/DeprecatedNFTTest3.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "DeprecatedNFTTest3", "bytecode": "02020e19010000000103d3ee6a5cd5ce0102010000000001d34d12f529", "codeHash": "465bc3739cd1649e58e0470971bd2fabf21363ab9fc2c15052fb2440dd06ada5", diff --git a/artifacts/nft/DeprecatedNFTTest4.ral.json b/artifacts/nft/DeprecatedNFTTest4.ral.json index 23e328087..8853bf9df 100644 --- a/artifacts/nft/DeprecatedNFTTest4.ral.json +++ b/artifacts/nft/DeprecatedNFTTest4.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "DeprecatedNFTTest4", "bytecode": "02020e1b010000000103d3ee6a5cd5ce0102010000000103d35f9a418a0402", "codeHash": "a5de0fa0b3580303ac63423f09ce5ed95fccbf789679b32130a53c26fef182e9", diff --git a/artifacts/nft/DeprecatedNFTTest5.ral.json b/artifacts/nft/DeprecatedNFTTest5.ral.json index d90859197..6822cfc31 100644 --- a/artifacts/nft/DeprecatedNFTTest5.ral.json +++ b/artifacts/nft/DeprecatedNFTTest5.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "DeprecatedNFTTest5", "bytecode": "02020e1e010000000103d3ee6a5cd5ce0102010000000305d35c9ec8a3ce000c0c02", "codeHash": "8b1374f39db98c485af3dd05d0b0ce861e9528f290ca9dc0d7108e8b48b50161", diff --git a/artifacts/nft/DeprecatedNFTTest6.ral.json b/artifacts/nft/DeprecatedNFTTest6.ral.json index 6f0b007bd..ecb0de73b 100644 --- a/artifacts/nft/DeprecatedNFTTest6.ral.json +++ b/artifacts/nft/DeprecatedNFTTest6.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "DeprecatedNFTTest6", "bytecode": "02020e1c010000000103d3ee6a5cd5ce0102010000000204d30e0a3ac10c0d02", "codeHash": "8bc0d39f0607d4a771ec70ae1057b71dbcde404177cb3b25fd7d93d553a2b8cd", diff --git a/artifacts/nft/DeprecatedNFTTest7.ral.json b/artifacts/nft/DeprecatedNFTTest7.ral.json index 162c230d5..b205325a0 100644 --- a/artifacts/nft/DeprecatedNFTTest7.ral.json +++ b/artifacts/nft/DeprecatedNFTTest7.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "DeprecatedNFTTest7", "bytecode": "02020e1d010000000103d3ee6a5cd5ce0102010000000204d3289dd321ce000b02", "codeHash": "b95c9acf088b090f5d9d34f28ab079cf22b9e53af8ae6864113c71172231ef4c", diff --git a/artifacts/nft/MintNFTTest.ral.json b/artifacts/nft/MintNFTTest.ral.json index f20e228e1..6a3a3f47d 100644 --- a/artifacts/nft/MintNFTTest.ral.json +++ b/artifacts/nft/MintNFTTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "MintNFTTest", "bytecodeTemplate": "01010300000015{2}4c0ab413c40de0b6b3a7640000a2{1}0d0d{0}0107184a09b413c40de0b6b3a7640000a2{1}0d0d{0}010418", "fieldsSig": { diff --git a/artifacts/nft/NFTCollectionTest.ral.json b/artifacts/nft/NFTCollectionTest.ral.json index 5a6d6bb6a..4f196a7a3 100644 --- a/artifacts/nft/NFTCollectionTest.ral.json +++ b/artifacts/nft/NFTCollectionTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "NFTCollectionTest", "bytecode": "04050912402d4040408a010000000102ce0102010000000102a0000201000102010f16000001310c7b160040cb17011601c50d7b16010201000203000816010002170216001602410e7b01030105011fd3b8b591eeb41701b1a00016001406414c5048000313046413006417031702160113c40de0b6b3a7640000a2a00040ce00160216030d1601c91704a0000d2aa100160402", "codeHash": "087f9292bb326a4d39a6fac09928cb25edf2837718f830f3a166a937f8724779", diff --git a/artifacts/nft/NFTCollectionWithRoyaltyTest.ral.json b/artifacts/nft/NFTCollectionWithRoyaltyTest.ral.json index bea6907af..4082191d8 100644 --- a/artifacts/nft/NFTCollectionWithRoyaltyTest.ral.json +++ b/artifacts/nft/NFTCollectionWithRoyaltyTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "NFTCollectionWithRoyaltyTest", "bytecode": "06080912402d40404050405b406c40b6010000000102ce0102010000000102a0000201000102010f16000001310c7b160040cb17011601c50d7b16010201000203000816010002170216001602410e7b0100020201061601ce032c1367102d0201010202000316001601a9010202020008b4ce02450f7b16001601a801030105011fd3b8b591eeb41701b1a00016001406414c5048000313046413006417031702160113c40de0b6b3a7640000a2a00040ce00160216030d1601c91704a0000d2aa100160402", "codeHash": "3b64d5e360566a4e4f568f773536a3ea74e66d12231aa44f19d2214ba87b38d6", diff --git a/artifacts/nft/NFTTest.ral.json b/artifacts/nft/NFTTest.ral.json index 8d65b5dec..bac5953d1 100644 --- a/artifacts/nft/NFTTest.ral.json +++ b/artifacts/nft/NFTTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "NFTTest", "bytecode": "04020914010000000102ce0202010000000203ce00ce0102", "codeHash": "4897086210869e612d82995b765a447c5319a55a56e8a0c3c07b4d9ca81e15b1", diff --git a/artifacts/nft/NFTTestStd.ral.json b/artifacts/nft/NFTTestStd.ral.json index 4567efc95..b152fff0a 100644 --- a/artifacts/nft/NFTTestStd.ral.json +++ b/artifacts/nft/NFTTestStd.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "NFTTestStd", "bytecode": "040309144020010000000102ce0202010000000203ce00ce0102010000000002d36811cfdd02", "codeHash": "b7ff3fa8dfacc7ae5edbabd6573d0699dffc5a0f07ad14023f682a201b7bce55", diff --git a/artifacts/nft/WithdrawNFTCollectionTest.ral.json b/artifacts/nft/WithdrawNFTCollectionTest.ral.json index 934185ad3..63f8182a5 100644 --- a/artifacts/nft/WithdrawNFTCollectionTest.ral.json +++ b/artifacts/nft/WithdrawNFTCollectionTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "WithdrawNFTCollectionTest", "bytecodeTemplate": "01010300000006b4{1}0e0c{0}0106", "fieldsSig": { diff --git a/artifacts/nft/WrongNFTTest.ral.json b/artifacts/nft/WrongNFTTest.ral.json index a4c9159a4..d8a1f3254 100644 --- a/artifacts/nft/WrongNFTTest.ral.json +++ b/artifacts/nft/WrongNFTTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "WrongNFTTest", "bytecode": "04020917010000000102ce0202010000000206040c7bce00ce0102", "codeHash": "7dd2ed643a98b2a1a52a9b9e536fcdae60d961b583b8109f777d846bfdfcae8d", diff --git a/artifacts/sub/Sub.ral.json b/artifacts/sub/Sub.ral.json index 372779f4f..27ea2cd8c 100644 --- a/artifacts/sub/Sub.ral.json +++ b/artifacts/sub/Sub.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "Sub", "bytecode": "01011e01000202010dd321939f9e05160016015fa00016002a16012ba100a00002", "codeHash": "3461ebfaca02ad0a3f587a5b67a461c0cbd82d14261407b1d9277ed4ad129234", diff --git a/artifacts/test/Assert.ral.json b/artifacts/test/Assert.ral.json index 3a4248600..8cd118721 100644 --- a/artifacts/test/Assert.ral.json +++ b/artifacts/test/Assert.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "Assert", "bytecode": "000110010000000006d362d460120d0e2f0f7b", "codeHash": "46dc5e3835be6551dacbf81565912ec67575aa77522312ceed88472817735d6b", diff --git a/artifacts/test/CallScript0.ral.json b/artifacts/test/CallScript0.ral.json index e87ef14af..ee63e35e9 100644 --- a/artifacts/test/CallScript0.ral.json +++ b/artifacts/test/CallScript0.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "CallScript0", "bytecodeTemplate": "01010000000206{1}0d0e{0}010302", "fieldsSig": { diff --git a/artifacts/test/CallScript1.ral.json b/artifacts/test/CallScript1.ral.json index 9c2bf295a..8584508a1 100644 --- a/artifacts/test/CallScript1.ral.json +++ b/artifacts/test/CallScript1.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "CallScript1", "bytecodeTemplate": "0101000000070a{1}0d0e{0}01030c11{2}010202", "fieldsSig": { diff --git a/artifacts/test/Debug.ral.json b/artifacts/test/Debug.ral.json index 3901b8d9d..daf79d950 100644 --- a/artifacts/test/Debug.ral.json +++ b/artifacts/test/Debug.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "Debug", "bytecode": "00010b010000000001d38681d619", "codeHash": "cc0e1966e6847f2c03384e78df1dcd9a0c2b5db1b7c1e901d66e26e2b000eb2c", diff --git a/artifacts/test/InsertIntoMap.ral.json b/artifacts/test/InsertIntoMap.ral.json index f41ddde15..dec5b873b 100644 --- a/artifacts/test/InsertIntoMap.ral.json +++ b/artifacts/test/InsertIntoMap.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "InsertIntoMap", "bytecodeTemplate": "01010300020010{2}{3}17011700{1}d10f2ca2{1}160016010f0c{0}0100", "fieldsSig": { diff --git a/artifacts/test/MapTest.ral.json b/artifacts/test/MapTest.ral.json index b3f9551e3..13f9f5114 100644 --- a/artifacts/test/MapTest.ral.json +++ b/artifacts/test/MapTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "MapTest", "bytecode": "0004405c40dc4153418001030303001fd3a9cdcc691600d1a2140a5f5f6d61705f5f305f5f160047441601b11602d202011600d1a2140a5f5f6d61705f5f315f5f16014044b11602d201011600d1a2140a5f5f6d61705f5f325f5f1402001144b11602d2010101000104004036d3c50ed2bb0c0d0d140a5f5f6d61705f5f305f5f16004744cb1703160301000c0d0d160301011702170116020d2a0c0e0c140a5f5f6d61705f5f305f5f16004744cb010216020d2a0c0e0c140a5f5f6d61705f5f315f5f16014044cb010216020d2a0c0e0c140a5f5f6d61705f5f325f5f1402001144cb01020100010400402dd392ac08660c0d0d140a5f5f6d61705f5f305f5f16004744cb1703160301000c0d0d160301011702170116000d0c140a5f5f6d61705f5f305f5f16004744cb010316000d0c140a5f5f6d61705f5f315f5f16014044cb010316000d0c140a5f5f6d61705f5f325f5f1402001144cb0103010001020212d3143f7dc50c0d0d140a5f5f6d61705f5f305f5f16004744cb1701160101000c0d0d1601010102", "codeHash": "9c0dad73dd47255270a366794f84539f06816e30c68b1f1cca767707fa8db596", diff --git a/artifacts/test/MapTestWrapper.ral.json b/artifacts/test/MapTestWrapper.ral.json index 61dd5c3be..4b9dedaf2 100644 --- a/artifacts/test/MapTestWrapper.ral.json +++ b/artifacts/test/MapTestWrapper.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "MapTestWrapper", "bytecode": "01031d4030404301030303000dd3a9cdcc691600d10f2ca21600160116020f0cce000100010001010006d3c50ed2bb16000d0cce000101010001010006d392ac086616000d0cce000102", "codeHash": "1d525d3e4cbd1c8f4c0431bf6881e888eeebae012a14532530097f62dd766e9a", diff --git a/artifacts/test/MetaData.ral.json b/artifacts/test/MetaData.ral.json index d2c01c178..d7d148210 100644 --- a/artifacts/test/MetaData.ral.json +++ b/artifacts/test/MetaData.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "MetaData", "bytecode": "000319402c4033010300000006d38d0b3636b4b413c40de0b6b3a7640000a702000200000004b413c40de0b6b3a7640000a80200000000000102", "codeHash": "5b113459525557465f1cc5aeee453dfd5823d1a6094372cee6067f7466b40896", diff --git a/artifacts/test/MultiDeposit.ral.json b/artifacts/test/MultiDeposit.ral.json index 044e6f42c..402e9fca8 100644 --- a/artifacts/test/MultiDeposit.ral.json +++ b/artifacts/test/MultiDeposit.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "MultiDeposit", "bytecodeTemplate": "0101030002004024{0}{1}17011700b413c40de0b6b3a7640000a20c0c16000100b413c40de0b6b3a7640000a20c0c16010100b4{2}13c40de0b6b3a7640000a313c40de0b6b3a76400000d0c16000102b4{2}13c40de0b6b3a7640000a313c40de0b6b3a76400000d0c16010102", "fieldsSig": { diff --git a/artifacts/test/MultiWithdraw.ral.json b/artifacts/test/MultiWithdraw.ral.json index bd997a759..dc0f7fb00 100644 --- a/artifacts/test/MultiWithdraw.ral.json +++ b/artifacts/test/MultiWithdraw.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "MultiWithdraw", "bytecodeTemplate": "01010300020016{0}{1}170117000c0c160001010c0c1601010113c40de0b6b3a76400000d0c1600010313c40de0b6b3a76400000d0c16010103", "fieldsSig": { diff --git a/artifacts/test/OwnerOnly.ral.json b/artifacts/test/OwnerOnly.ral.json index cbe2a6d92..74da3a935 100644 --- a/artifacts/test/OwnerOnly.ral.json +++ b/artifacts/test/OwnerOnly.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "OwnerOnly", "bytecode": "010111010000000006d3bf853dbdb4ce00450c7b", "codeHash": "c8ecfd7b7e1f3d0169d80e0abb59702516eeff301d47e0e7be70a631bd9414ca", diff --git a/artifacts/test/RemoveFromMap.ral.json b/artifacts/test/RemoveFromMap.ral.json index b00032afb..a39ebb7ef 100644 --- a/artifacts/test/RemoveFromMap.ral.json +++ b/artifacts/test/RemoveFromMap.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "RemoveFromMap", "bytecodeTemplate": "01010300000005{1}0d0c{0}0102", "fieldsSig": { diff --git a/artifacts/test/TemplateArrayVar.ral.json b/artifacts/test/TemplateArrayVar.ral.json index fedced160..63d9bf9ec 100644 --- a/artifacts/test/TemplateArrayVar.ral.json +++ b/artifacts/test/TemplateArrayVar.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "TemplateArrayVar", "bytecodeTemplate": "010103000e00408d{1}{2}{3}{4}1703170217011700{6}{7}{8}170617051704{0}18{5}1816030f2f16020e2f1a16010d2f1a16000c2f1a0c7b160016011708170716070c2f16080d2f1a0c7b16021603170a170916090e2f160a0f2f1a0c7b16060e2f16050d2f1a16040c2f1a0c7b0c170b160b0e314c40260c170c160c0e314c1b160b7a0e314d0e2c160c7a0e314d2a78160b0e2c160c2a2f0c7b160c0d2a170c4a21160b0d2a170b4a7fd60c170d160d0f314c11160d7a0f314d102a78160d2f0c7b160d0d2a170d4a2b", "fieldsSig": { diff --git a/artifacts/test/TestAssert.ral.json b/artifacts/test/TestAssert.ral.json index 5776feb27..51f1fa37e 100644 --- a/artifacts/test/TestAssert.ral.json +++ b/artifacts/test/TestAssert.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "TestAssert", "bytecodeTemplate": "010103000000040c0c{0}0100", "fieldsSig": { diff --git a/artifacts/test/Transact.ral.json b/artifacts/test/Transact.ral.json index 6862b1a8c..1f92a7c3c 100644 --- a/artifacts/test/Transact.ral.json +++ b/artifacts/test/Transact.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "Transact", "bytecode": "03064027404e40674080408e409c010100010009d353dbb7aab413c40de0b6b3a7640000a9a00013c40de0b6b3a76400002aa10002010200010009d3a248861cb413c40de0b6b3a7640000a8a00013c40de0b6b3a76400002ba1000201010101000ad3bf2d01bdb4ce001600aca00116002aa1010201020101000ad35496306fb4ce001600aba00116002ba10102010000000103d3815a8d0da00002010000000103d3a51b051ca00102", "codeHash": "85e3e9a803741af8e92bd43b1b07cde53f39b86cab0ef1a85bab12b10d691b55", diff --git a/artifacts/test/UpdateMapValue.ral.json b/artifacts/test/UpdateMapValue.ral.json index e90bc5fe4..c2199a9e6 100644 --- a/artifacts/test/UpdateMapValue.ral.json +++ b/artifacts/test/UpdateMapValue.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "UpdateMapValue", "bytecodeTemplate": "01010300000005{1}0d0c{0}0101", "fieldsSig": { diff --git a/artifacts/test/UpdateUserAccount.ral.json b/artifacts/test/UpdateUserAccount.ral.json index c67f74d03..2eef4d96a 100644 --- a/artifacts/test/UpdateUserAccount.ral.json +++ b/artifacts/test/UpdateUserAccount.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "UpdateUserAccount", "bytecodeTemplate": "01010300040015{1}{2}{3}{4}17031702170117001600160116021603100c{0}0100{5}0d0c{0}0101", "fieldsSig": { diff --git a/artifacts/test/UserAccount.ral.json b/artifacts/test/UserAccount.ral.json index d35746f21..b53b1e2e3 100644 --- a/artifacts/test/UserAccount.ral.json +++ b/artifacts/test/UserAccount.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "UserAccount", "bytecode": "080340284037404d010004040013d388b067e71600ce01410c7b1602ce02410c7b1601a1021603a103160116032aa101010001010003d3185a39e11600a100010000000507d384cc0995a001ce01a002ce02a00302", "codeHash": "4e9f7eac1b76eaa2268b5af6ebb5640252892dc170aad6c1ee7b639131a55816", diff --git a/artifacts/test/Warnings.ral.json b/artifacts/test/Warnings.ral.json index 2a6275177..822a3ac40 100644 --- a/artifacts/test/Warnings.ral.json +++ b/artifacts/test/Warnings.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "Warnings", "bytecode": "02010c010002020002d31bbce4a602", "codeHash": "873e095edb39cdb4b11b1157003daeacad06d259a938cd270e22b8e89b75feea", diff --git a/artifacts/token/FakeTokenTest.ral.json b/artifacts/token/FakeTokenTest.ral.json index 75f5c1968..37715ec9b 100644 --- a/artifacts/token/FakeTokenTest.ral.json +++ b/artifacts/token/FakeTokenTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "FakeTokenTest", "bytecode": "010509121b4024402f010000000103044d18010000000103044d18010000000103044d18010000000103044d18010000000001d38d0b3636", "codeHash": "52f971cb44d54a5353e94dc8db991d2726f76760af782e79bd8a66a9b5b294b7", diff --git a/artifacts/token/TokenTest.ral.json b/artifacts/token/TokenTest.ral.json index 4e978f331..4db08fe55 100644 --- a/artifacts/token/TokenTest.ral.json +++ b/artifacts/token/TokenTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "TokenTest", "bytecode": "050409121b4024010000000102ce0002010000000102ce0102010000000102ce0202010000000102ce0302", "codeHash": "a2800413eb2c5c23d48068db23df5f8eeaba04653e12c8ed59d589720d96dadd", diff --git a/artifacts/token/TokenTestStd.ral.json b/artifacts/token/TokenTestStd.ral.json index 0cf25b55d..82aef4740 100644 --- a/artifacts/token/TokenTestStd.ral.json +++ b/artifacts/token/TokenTestStd.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.7.0", + "version": "v3.6.4", "name": "TokenTestStd", "bytecode": "050509121b40244030010000000102ce0002010000000102ce0102010000000102ce0202010000000102ce0302010000000002d36811cfdd02", "codeHash": "4aa5c769148cada8eeb1cd3791f6e793ed92009ac79ebb64dc79d4d7f2969c8b", From b881c4170a46a8ee22dbcd77119531ce49ed5ae4 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Tue, 8 Oct 2024 11:24:35 +0200 Subject: [PATCH 17/22] update schemas after merging master --- packages/web3/src/api/api-alephium.ts | 50 ++++++++------------------- 1 file changed, 14 insertions(+), 36 deletions(-) diff --git a/packages/web3/src/api/api-alephium.ts b/packages/web3/src/api/api-alephium.ts index f92f3b67b..d943d1066 100644 --- a/packages/web3/src/api/api-alephium.ts +++ b/packages/web3/src/api/api-alephium.ts @@ -1498,8 +1498,8 @@ export class HttpClient { property instanceof Blob ? property : typeof property === 'object' && property !== null - ? JSON.stringify(property) - : `${property}` + ? JSON.stringify(property) + : `${property}` ) return formData }, new FormData()), @@ -1579,18 +1579,18 @@ export class HttpClient { const data = !responseFormat ? r : await response[responseFormat]() - .then((data) => { - if (r.ok) { - r.data = data - } else { - r.error = data - } - return r - }) - .catch((e) => { - r.error = e - return r - }) + .then((data) => { + if (r.ok) { + r.data = data + } else { + r.error = data + } + return r + }) + .catch((e) => { + r.error = e + return r + }) if (cancelToken) { this.abortControllers.delete(cancelToken) @@ -2545,28 +2545,6 @@ export class Api extends HttpClient - this.request< - BuildTransactionResult[], - BadRequest | Unauthorized | NotFound | InternalServerError | ServiceUnavailable - >({ - path: `/transactions/build-multi-group`, - method: 'POST', - body: data, - type: ContentType.Json, - format: 'json', - ...params - }).then(convertHttpResponse), - - /** * No description * From 85a0835c8b57d8b97c9b1944e4af0a98c00dc2a6 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Tue, 5 Nov 2024 10:44:31 +0100 Subject: [PATCH 18/22] fixes after merging new features --- packages/web3/src/api/api-alephium.ts | 39 ++++++++++++++++++++------ packages/web3/src/signer/tx-builder.ts | 6 ++-- test/lending.test.ts | 8 +++--- test/transaction.test.ts | 8 +++--- 4 files changed, 41 insertions(+), 20 deletions(-) diff --git a/packages/web3/src/api/api-alephium.ts b/packages/web3/src/api/api-alephium.ts index a6d2f12eb..f3d3eea58 100644 --- a/packages/web3/src/api/api-alephium.ts +++ b/packages/web3/src/api/api-alephium.ts @@ -1406,11 +1406,6 @@ export interface WalletCreationResult { mnemonic: string } -/** WalletDeletion */ -export interface WalletDeletion { - password: string -} - /** WalletRestore */ export interface WalletRestore { password: string @@ -1651,7 +1646,7 @@ export class HttpClient { /** * @title Alephium API - * @version 3.8.6 + * @version 3.8.8 * @baseUrl ../ */ export class Api extends HttpClient { @@ -1738,12 +1733,17 @@ export class Api extends HttpClient + deleteWalletsWalletName: ( + walletName: string, + query: { + password: string + }, + params: RequestParams = {} + ) => this.request({ path: `/wallets/${walletName}`, method: 'DELETE', - body: data, - type: ContentType.Json, + query: query, ...params }).then(convertHttpResponse), @@ -2593,6 +2593,27 @@ export class Api extends HttpClient + this.request< + BuildTransferTxResult[], + BadRequest | Unauthorized | NotFound | InternalServerError | ServiceUnavailable + >({ + path: `/transactions/build-multi-transfer`, + method: 'POST', + body: data, + type: ContentType.Json, + format: 'json', + ...params + }).then(convertHttpResponse), + /** * No description * diff --git a/packages/web3/src/signer/tx-builder.ts b/packages/web3/src/signer/tx-builder.ts index bf61171af..7d8617f14 100644 --- a/packages/web3/src/signer/tx-builder.ts +++ b/packages/web3/src/signer/tx-builder.ts @@ -72,21 +72,21 @@ export abstract class TransactionBuilder { return this.convertTransferTxResult(response) } - async buildMultiGroupTransferTx( + async buildMultiTransferTx( params: SignTransferTxParams, publicKey: string ): Promise[]> { TransactionBuilder.validatePublicKey(params, publicKey, params.signerKeyType) const { destinations, gasPrice, ...rest } = params - const data: node.BuildTransaction = { + const data: node.BuildTransferTx = { fromPublicKey: publicKey, fromPublicKeyType: params.signerKeyType, destinations: toApiDestinations(destinations), gasPrice: toApiNumber256Optional(gasPrice), ...rest } - const results = await this.nodeProvider.transactions.postTransactionsBuildMultiGroup(data) + const results = await this.nodeProvider.transactions.postTransactionsBuildMultiTransfer(data) const response = results.map((result) => ({ ...result, gasPrice: fromApiNumber256(result.gasPrice) diff --git a/test/lending.test.ts b/test/lending.test.ts index 6e7c89d16..1e0cc900e 100644 --- a/test/lending.test.ts +++ b/test/lending.test.ts @@ -69,11 +69,11 @@ class LendingBot { return this.getUserWallet(userId).address } - async signAndSubmitMultiGroupTransferTx( + async signAndSubmitMultiTransferTx( signer: SignerProviderSimple, params: SignTransferTxParams ): Promise { - const buildTxResults = await TransactionBuilder.from(this.nodeProvider).buildMultiGroupTransferTx( + const buildTxResults = await TransactionBuilder.from(this.nodeProvider).buildMultiTransferTx( params, await signer.getPublicKey(params.signerAddress) ) @@ -103,7 +103,7 @@ class LendingBot { attoAlphAmount: deposit })) - await this.signAndSubmitMultiGroupTransferTx(signer, { + await this.signAndSubmitMultiTransferTx(signer, { signerAddress, destinations }) @@ -118,7 +118,7 @@ class LendingBot { attoAlphAmount: convertAlphAmountWithDecimals(amount)! })) - await this.signAndSubmitMultiGroupTransferTx(signer, { + await this.signAndSubmitMultiTransferTx(signer, { signerAddress, destinations }) diff --git a/test/transaction.test.ts b/test/transaction.test.ts index a650fbd07..9f7d91644 100644 --- a/test/transaction.test.ts +++ b/test/transaction.test.ts @@ -54,7 +54,7 @@ describe('transactions', function () { signer = await getSigner() }) - it('should build multi-group transfer', async () => { + it('should build multi-transfer', async () => { const nodeProvider = web3.getCurrentNodeProvider() const signer0 = await getSigner(100n * ONE_ALPH, 1) const signer1 = await getSigner(0n, 2) @@ -65,7 +65,7 @@ describe('transactions', function () { const signer0Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer0.address) expect(BigInt(signer0Balance.balance)).toBe(100n * ONE_ALPH) - const transferFrom0to1and2 = await TransactionBuilder.from(nodeProvider).buildMultiGroupTransferTx( + const transferFrom0to1and2 = await TransactionBuilder.from(nodeProvider).buildMultiTransferTx( { signerAddress: signer0.address, destinations: [signer1, signer2].map((signer) => ({ @@ -83,7 +83,7 @@ describe('transactions', function () { const signer2Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer2.address) expect(BigInt(signer2Balance.balance)).toBe(10n * ONE_ALPH) - const transferFrom1to3and4 = await TransactionBuilder.from(nodeProvider).buildMultiGroupTransferTx( + const transferFrom1to3and4 = await TransactionBuilder.from(nodeProvider).buildMultiTransferTx( { signerAddress: signer1.address, destinations: [signer3, signer4].map((signer) => ({ @@ -96,7 +96,7 @@ describe('transactions', function () { const transferFrom1to3and4Result = await signAndSubmitTransactions(transferFrom1to3and4, signer1) - const transferFrom2to3and4 = await TransactionBuilder.from(nodeProvider).buildMultiGroupTransferTx( + const transferFrom2to3and4 = await TransactionBuilder.from(nodeProvider).buildMultiTransferTx( { signerAddress: signer2.address, destinations: [signer3, signer4].map((signer) => ({ From 2efbdf78c3a1a4d6a5319e38d0e5154d10ad5ff9 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Wed, 6 Nov 2024 16:20:29 +0100 Subject: [PATCH 19/22] removing test.only modifier --- test/transaction.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/transaction.test.ts b/test/transaction.test.ts index 9f7d91644..573181aad 100644 --- a/test/transaction.test.ts +++ b/test/transaction.test.ts @@ -314,7 +314,7 @@ describe('transactions', function () { expect(BigInt(contractBalance.balance)).toBe(ONE_ALPH) }) - it.only('should build chain txs that interact with dApp in another group', async () => { + it('should build chain txs that interact with dApp in another group', async () => { const nodeProvider = web3.getCurrentNodeProvider() const [wallet, account1, account2] = await prepareChainedTxTest() From d24185334a73f752594554b67320e43a06094f31 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Fri, 22 Nov 2024 13:35:06 +0100 Subject: [PATCH 20/22] rename multi-transfer to transfer-from-one-to-many-groups --- packages/web3/src/api/api-alephium.ts | 10 +++++----- packages/web3/src/signer/tx-builder.ts | 4 ++-- test/lending.test.ts | 8 ++++---- test/transaction.test.ts | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/web3/src/api/api-alephium.ts b/packages/web3/src/api/api-alephium.ts index f3d3eea58..5bc533d40 100644 --- a/packages/web3/src/api/api-alephium.ts +++ b/packages/web3/src/api/api-alephium.ts @@ -2597,16 +2597,16 @@ export class Api extends HttpClient + postTransactionsBuildTransferFromOneToManyGroups: (data: BuildTransferTx, params: RequestParams = {}) => this.request< BuildTransferTxResult[], BadRequest | Unauthorized | NotFound | InternalServerError | ServiceUnavailable >({ - path: `/transactions/build-multi-transfer`, + path: `/transactions/build-transfer-from-one-to-many-groups`, method: 'POST', body: data, type: ContentType.Json, diff --git a/packages/web3/src/signer/tx-builder.ts b/packages/web3/src/signer/tx-builder.ts index 7d8617f14..4d2409895 100644 --- a/packages/web3/src/signer/tx-builder.ts +++ b/packages/web3/src/signer/tx-builder.ts @@ -72,7 +72,7 @@ export abstract class TransactionBuilder { return this.convertTransferTxResult(response) } - async buildMultiTransferTx( + async buildTransferFromOneToManyGroups( params: SignTransferTxParams, publicKey: string ): Promise[]> { @@ -86,7 +86,7 @@ export abstract class TransactionBuilder { gasPrice: toApiNumber256Optional(gasPrice), ...rest } - const results = await this.nodeProvider.transactions.postTransactionsBuildMultiTransfer(data) + const results = await this.nodeProvider.transactions.postTransactionsBuildTransferFromOneToManyGroups(data) const response = results.map((result) => ({ ...result, gasPrice: fromApiNumber256(result.gasPrice) diff --git a/test/lending.test.ts b/test/lending.test.ts index 1e0cc900e..667d86f1c 100644 --- a/test/lending.test.ts +++ b/test/lending.test.ts @@ -69,11 +69,11 @@ class LendingBot { return this.getUserWallet(userId).address } - async signAndSubmitMultiTransferTx( + async signAndSubmitTransferFromOneToManyGroups( signer: SignerProviderSimple, params: SignTransferTxParams ): Promise { - const buildTxResults = await TransactionBuilder.from(this.nodeProvider).buildMultiTransferTx( + const buildTxResults = await TransactionBuilder.from(this.nodeProvider).buildTransferFromOneToManyGroups( params, await signer.getPublicKey(params.signerAddress) ) @@ -103,7 +103,7 @@ class LendingBot { attoAlphAmount: deposit })) - await this.signAndSubmitMultiTransferTx(signer, { + await this.signAndSubmitTransferFromOneToManyGroups(signer, { signerAddress, destinations }) @@ -118,7 +118,7 @@ class LendingBot { attoAlphAmount: convertAlphAmountWithDecimals(amount)! })) - await this.signAndSubmitMultiTransferTx(signer, { + await this.signAndSubmitTransferFromOneToManyGroups(signer, { signerAddress, destinations }) diff --git a/test/transaction.test.ts b/test/transaction.test.ts index 573181aad..263c6d81c 100644 --- a/test/transaction.test.ts +++ b/test/transaction.test.ts @@ -65,7 +65,7 @@ describe('transactions', function () { const signer0Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer0.address) expect(BigInt(signer0Balance.balance)).toBe(100n * ONE_ALPH) - const transferFrom0to1and2 = await TransactionBuilder.from(nodeProvider).buildMultiTransferTx( + const transferFrom0to1and2 = await TransactionBuilder.from(nodeProvider).buildTransferFromOneToManyGroups( { signerAddress: signer0.address, destinations: [signer1, signer2].map((signer) => ({ @@ -83,7 +83,7 @@ describe('transactions', function () { const signer2Balance = await nodeProvider.addresses.getAddressesAddressBalance(signer2.address) expect(BigInt(signer2Balance.balance)).toBe(10n * ONE_ALPH) - const transferFrom1to3and4 = await TransactionBuilder.from(nodeProvider).buildMultiTransferTx( + const transferFrom1to3and4 = await TransactionBuilder.from(nodeProvider).buildTransferFromOneToManyGroups( { signerAddress: signer1.address, destinations: [signer3, signer4].map((signer) => ({ @@ -96,7 +96,7 @@ describe('transactions', function () { const transferFrom1to3and4Result = await signAndSubmitTransactions(transferFrom1to3and4, signer1) - const transferFrom2to3and4 = await TransactionBuilder.from(nodeProvider).buildMultiTransferTx( + const transferFrom2to3and4 = await TransactionBuilder.from(nodeProvider).buildTransferFromOneToManyGroups( { signerAddress: signer2.address, destinations: [signer3, signer4].map((signer) => ({ From 76fd33c34068e255ea49e7da1fe81c5d25925201 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Fri, 22 Nov 2024 17:50:43 +0100 Subject: [PATCH 21/22] upgrade to 3.9.0 --- .project.json | 2 +- artifacts/add/Add.ral.json | 2 +- artifacts/add/AddMain.ral.json | 2 +- artifacts/add/DestroyAdd.ral.json | 2 +- artifacts/greeter/Greeter.ral.json | 2 +- artifacts/greeter/GreeterMain.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest1.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest2.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest3.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest4.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest5.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest6.ral.json | 2 +- artifacts/nft/DeprecatedNFTTest7.ral.json | 2 +- artifacts/nft/MintNFTTest.ral.json | 2 +- artifacts/nft/NFTCollectionTest.ral.json | 2 +- artifacts/nft/NFTCollectionWithRoyaltyTest.ral.json | 2 +- artifacts/nft/NFTTest.ral.json | 2 +- artifacts/nft/NFTTestStd.ral.json | 2 +- artifacts/nft/WithdrawNFTCollectionTest.ral.json | 2 +- artifacts/nft/WrongNFTTest.ral.json | 2 +- artifacts/sub/Sub.ral.json | 2 +- artifacts/test/Assert.ral.json | 2 +- artifacts/test/CallScript0.ral.json | 2 +- artifacts/test/CallScript1.ral.json | 2 +- artifacts/test/Debug.ral.json | 2 +- artifacts/test/Deposit.ral.json | 2 +- artifacts/test/DepositToken.ral.json | 2 +- artifacts/test/InsertIntoMap.ral.json | 2 +- artifacts/test/MapTest.ral.json | 2 +- artifacts/test/MapTestWrapper.ral.json | 2 +- artifacts/test/MetaData.ral.json | 2 +- artifacts/test/MultiDeposit.ral.json | 2 +- artifacts/test/MultiWithdraw.ral.json | 2 +- artifacts/test/OwnerOnly.ral.json | 2 +- artifacts/test/RemoveFromMap.ral.json | 2 +- artifacts/test/TemplateArrayVar.ral.json | 2 +- artifacts/test/TestAssert.ral.json | 2 +- artifacts/test/Transact.ral.json | 2 +- artifacts/test/UpdateMapValue.ral.json | 2 +- artifacts/test/UpdateUserAccount.ral.json | 2 +- artifacts/test/UserAccount.ral.json | 2 +- artifacts/test/Warnings.ral.json | 2 +- artifacts/test/Withdraw.ral.json | 2 +- artifacts/token/FakeTokenTest.ral.json | 2 +- artifacts/token/TokenTest.ral.json | 2 +- artifacts/token/TokenTestStd.ral.json | 2 +- docker/docker-compose.yml | 2 +- packages/web3/package.json | 2 +- packages/web3/src/api/api-alephium.ts | 3 ++- packages/web3/src/signer/tx-builder.ts | 4 ++-- packages/web3/src/signer/types.ts | 1 + 51 files changed, 53 insertions(+), 51 deletions(-) diff --git a/.project.json b/.project.json index 24bbb9be8..2aafd558a 100644 --- a/.project.json +++ b/.project.json @@ -1,5 +1,5 @@ { - "fullNodeVersion": "v3.8.6", + "fullNodeVersion": "v3.9.0", "compilerOptionsUsed": { "ignoreUnusedConstantsWarnings": false, "ignoreUnusedVariablesWarnings": false, diff --git a/artifacts/add/Add.ral.json b/artifacts/add/Add.ral.json index a41f74eef..c3add7e60 100644 --- a/artifacts/add/Add.ral.json +++ b/artifacts/add/Add.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "Add", "bytecode": "0206124024404f407440a140af010002100205d34fbb20db1600160100020201000c0c0205d36a51f82d1600160100020200000202021805160016015f06160016015f075da00016002a16012aa100a000160016010e0dce000100020103040c0011d319adf50e1300641600130164170517041603d1a21601160216041605c118010104060015d3f6ce55a6130064160013016417051704160316021340c8ac1603d1a21601160216041605c118010201010003d320f98f621600b0", "codeHash": "6a1f1415a68d55365e205b39e5418cd1f6fc8c2c7926d3662c77d69b55c92681", diff --git a/artifacts/add/AddMain.ral.json b/artifacts/add/AddMain.ral.json index d0621bcc1..bc09fa32c 100644 --- a/artifacts/add/AddMain.ral.json +++ b/artifacts/add/AddMain.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "AddMain", "bytecodeTemplate": "0101030002000c{1}{2}17011700160016010e0e{0}01001818", "fieldsSig": { diff --git a/artifacts/add/DestroyAdd.ral.json b/artifacts/add/DestroyAdd.ral.json index fa85e254e..d972b02ef 100644 --- a/artifacts/add/DestroyAdd.ral.json +++ b/artifacts/add/DestroyAdd.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "DestroyAdd", "bytecodeTemplate": "01010300000005{1}0d0c{0}0105", "fieldsSig": { diff --git a/artifacts/greeter/Greeter.ral.json b/artifacts/greeter/Greeter.ral.json index 6e83653d5..0cbcaf39a 100644 --- a/artifacts/greeter/Greeter.ral.json +++ b/artifacts/greeter/Greeter.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "Greeter", "bytecode": "190111010000000106d3952f757b030c7bce0002", "codeHash": "4bbf82c83dcb0a3df905c290fbc12a19ce5160a7b655c1a347913481da12d747", diff --git a/artifacts/greeter/GreeterMain.ral.json b/artifacts/greeter/GreeterMain.ral.json index dad7e1725..3c5f475f2 100644 --- a/artifacts/greeter/GreeterMain.ral.json +++ b/artifacts/greeter/GreeterMain.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "GreeterMain", "bytecodeTemplate": "01010300020014{0}17000c0d160001000d2f0c7b{0}17010c0d1601d4952f757b0d2f0c7b", "fieldsSig": { diff --git a/artifacts/nft/DeprecatedNFTTest1.ral.json b/artifacts/nft/DeprecatedNFTTest1.ral.json index 6867ca8cf..e7f86ff40 100644 --- a/artifacts/nft/DeprecatedNFTTest1.ral.json +++ b/artifacts/nft/DeprecatedNFTTest1.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "DeprecatedNFTTest1", "bytecode": "02010e010000000103d3ee6a5cd5ce0102", "codeHash": "cc6928c9c6777077abcb5b9c4f7c5d620d6cae07ec6f00f5e8b0efe6a7b913c4", diff --git a/artifacts/nft/DeprecatedNFTTest2.ral.json b/artifacts/nft/DeprecatedNFTTest2.ral.json index 1b754195d..2796570c9 100644 --- a/artifacts/nft/DeprecatedNFTTest2.ral.json +++ b/artifacts/nft/DeprecatedNFTTest2.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "DeprecatedNFTTest2", "bytecode": "02020e1c010000000103d3ee6a5cd5ce0102010000000103d33e65d93dce0002", "codeHash": "ade9aee476ee752050a1e9e1b19039f05261cb3f53941152617174faf9eae572", diff --git a/artifacts/nft/DeprecatedNFTTest3.ral.json b/artifacts/nft/DeprecatedNFTTest3.ral.json index bd3b878eb..09097b04d 100644 --- a/artifacts/nft/DeprecatedNFTTest3.ral.json +++ b/artifacts/nft/DeprecatedNFTTest3.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "DeprecatedNFTTest3", "bytecode": "02020e19010000000103d3ee6a5cd5ce0102010000000001d34d12f529", "codeHash": "465bc3739cd1649e58e0470971bd2fabf21363ab9fc2c15052fb2440dd06ada5", diff --git a/artifacts/nft/DeprecatedNFTTest4.ral.json b/artifacts/nft/DeprecatedNFTTest4.ral.json index c5f414e41..ab6b803af 100644 --- a/artifacts/nft/DeprecatedNFTTest4.ral.json +++ b/artifacts/nft/DeprecatedNFTTest4.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "DeprecatedNFTTest4", "bytecode": "02020e1b010000000103d3ee6a5cd5ce0102010000000103d35f9a418a0402", "codeHash": "a5de0fa0b3580303ac63423f09ce5ed95fccbf789679b32130a53c26fef182e9", diff --git a/artifacts/nft/DeprecatedNFTTest5.ral.json b/artifacts/nft/DeprecatedNFTTest5.ral.json index 675d2b78c..a10840489 100644 --- a/artifacts/nft/DeprecatedNFTTest5.ral.json +++ b/artifacts/nft/DeprecatedNFTTest5.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "DeprecatedNFTTest5", "bytecode": "02020e1e010000000103d3ee6a5cd5ce0102010000000305d35c9ec8a3ce000c0c02", "codeHash": "8b1374f39db98c485af3dd05d0b0ce861e9528f290ca9dc0d7108e8b48b50161", diff --git a/artifacts/nft/DeprecatedNFTTest6.ral.json b/artifacts/nft/DeprecatedNFTTest6.ral.json index 4ba6c36bd..f6a916442 100644 --- a/artifacts/nft/DeprecatedNFTTest6.ral.json +++ b/artifacts/nft/DeprecatedNFTTest6.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "DeprecatedNFTTest6", "bytecode": "02020e1c010000000103d3ee6a5cd5ce0102010000000204d30e0a3ac10c0d02", "codeHash": "8bc0d39f0607d4a771ec70ae1057b71dbcde404177cb3b25fd7d93d553a2b8cd", diff --git a/artifacts/nft/DeprecatedNFTTest7.ral.json b/artifacts/nft/DeprecatedNFTTest7.ral.json index d377c55af..5b80b012e 100644 --- a/artifacts/nft/DeprecatedNFTTest7.ral.json +++ b/artifacts/nft/DeprecatedNFTTest7.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "DeprecatedNFTTest7", "bytecode": "02020e1d010000000103d3ee6a5cd5ce0102010000000204d3289dd321ce000b02", "codeHash": "b95c9acf088b090f5d9d34f28ab079cf22b9e53af8ae6864113c71172231ef4c", diff --git a/artifacts/nft/MintNFTTest.ral.json b/artifacts/nft/MintNFTTest.ral.json index 720c2fc0c..b6e504e5c 100644 --- a/artifacts/nft/MintNFTTest.ral.json +++ b/artifacts/nft/MintNFTTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "MintNFTTest", "bytecodeTemplate": "01010300000015{2}4c0ab413c40de0b6b3a7640000a2{1}0d0d{0}0107184a09b413c40de0b6b3a7640000a2{1}0d0d{0}010418", "fieldsSig": { diff --git a/artifacts/nft/NFTCollectionTest.ral.json b/artifacts/nft/NFTCollectionTest.ral.json index f733efa91..6168b4b77 100644 --- a/artifacts/nft/NFTCollectionTest.ral.json +++ b/artifacts/nft/NFTCollectionTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "NFTCollectionTest", "bytecode": "04050912402d4040408a010000000102ce0102010000000102a0000201000102010f16000001310c7b160040cb17011601c50d7b16010201000203000816010002170216001602410e7b01030105011fd3b8b591eeb41701b1a00016001406414c5048000313046413006417031702160113c40de0b6b3a7640000a2a00040ce00160216030d1601c91704a0000d2aa100160402", "codeHash": "087f9292bb326a4d39a6fac09928cb25edf2837718f830f3a166a937f8724779", diff --git a/artifacts/nft/NFTCollectionWithRoyaltyTest.ral.json b/artifacts/nft/NFTCollectionWithRoyaltyTest.ral.json index 87b40eec0..a37463cd3 100644 --- a/artifacts/nft/NFTCollectionWithRoyaltyTest.ral.json +++ b/artifacts/nft/NFTCollectionWithRoyaltyTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "NFTCollectionWithRoyaltyTest", "bytecode": "06080912402d40404050405b406c40b6010000000102ce0102010000000102a0000201000102010f16000001310c7b160040cb17011601c50d7b16010201000203000816010002170216001602410e7b0100020201061601ce032c1367102d0201010202000316001601a9010202020008b4ce02450f7b16001601a801030105011fd3b8b591eeb41701b1a00016001406414c5048000313046413006417031702160113c40de0b6b3a7640000a2a00040ce00160216030d1601c91704a0000d2aa100160402", "codeHash": "3b64d5e360566a4e4f568f773536a3ea74e66d12231aa44f19d2214ba87b38d6", diff --git a/artifacts/nft/NFTTest.ral.json b/artifacts/nft/NFTTest.ral.json index 67393754a..acb775d72 100644 --- a/artifacts/nft/NFTTest.ral.json +++ b/artifacts/nft/NFTTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "NFTTest", "bytecode": "04020914010000000102ce0202010000000203ce00ce0102", "codeHash": "4897086210869e612d82995b765a447c5319a55a56e8a0c3c07b4d9ca81e15b1", diff --git a/artifacts/nft/NFTTestStd.ral.json b/artifacts/nft/NFTTestStd.ral.json index fb346cd91..a2e8460cc 100644 --- a/artifacts/nft/NFTTestStd.ral.json +++ b/artifacts/nft/NFTTestStd.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "NFTTestStd", "bytecode": "040309144020010000000102ce0202010000000203ce00ce0102010000000002d36811cfdd02", "codeHash": "b7ff3fa8dfacc7ae5edbabd6573d0699dffc5a0f07ad14023f682a201b7bce55", diff --git a/artifacts/nft/WithdrawNFTCollectionTest.ral.json b/artifacts/nft/WithdrawNFTCollectionTest.ral.json index c8d1a05e1..ce80b2c7e 100644 --- a/artifacts/nft/WithdrawNFTCollectionTest.ral.json +++ b/artifacts/nft/WithdrawNFTCollectionTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "WithdrawNFTCollectionTest", "bytecodeTemplate": "01010300000006b4{1}0e0c{0}0106", "fieldsSig": { diff --git a/artifacts/nft/WrongNFTTest.ral.json b/artifacts/nft/WrongNFTTest.ral.json index 351673626..c38f9e059 100644 --- a/artifacts/nft/WrongNFTTest.ral.json +++ b/artifacts/nft/WrongNFTTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "WrongNFTTest", "bytecode": "04020917010000000102ce0202010000000206040c7bce00ce0102", "codeHash": "7dd2ed643a98b2a1a52a9b9e536fcdae60d961b583b8109f777d846bfdfcae8d", diff --git a/artifacts/sub/Sub.ral.json b/artifacts/sub/Sub.ral.json index 7a8f9475f..2909cefa0 100644 --- a/artifacts/sub/Sub.ral.json +++ b/artifacts/sub/Sub.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "Sub", "bytecode": "01011e01000202010dd321939f9e05160016015fa00016002a16012ba100a00002", "codeHash": "3461ebfaca02ad0a3f587a5b67a461c0cbd82d14261407b1d9277ed4ad129234", diff --git a/artifacts/test/Assert.ral.json b/artifacts/test/Assert.ral.json index 406d3e191..8841064f1 100644 --- a/artifacts/test/Assert.ral.json +++ b/artifacts/test/Assert.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "Assert", "bytecode": "000110010000000006d362d460120d0e2f0f7b", "codeHash": "46dc5e3835be6551dacbf81565912ec67575aa77522312ceed88472817735d6b", diff --git a/artifacts/test/CallScript0.ral.json b/artifacts/test/CallScript0.ral.json index b98bd8264..6eaf9e8b2 100644 --- a/artifacts/test/CallScript0.ral.json +++ b/artifacts/test/CallScript0.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "CallScript0", "bytecodeTemplate": "01010000000206{1}0d0e{0}010302", "fieldsSig": { diff --git a/artifacts/test/CallScript1.ral.json b/artifacts/test/CallScript1.ral.json index b74391e5f..a4ee4d947 100644 --- a/artifacts/test/CallScript1.ral.json +++ b/artifacts/test/CallScript1.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "CallScript1", "bytecodeTemplate": "0101000000070a{1}0d0e{0}01030c11{2}010202", "fieldsSig": { diff --git a/artifacts/test/Debug.ral.json b/artifacts/test/Debug.ral.json index 0685b26ac..d98f4e05f 100644 --- a/artifacts/test/Debug.ral.json +++ b/artifacts/test/Debug.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "Debug", "bytecode": "00010b010000000001d38681d619", "codeHash": "cc0e1966e6847f2c03384e78df1dcd9a0c2b5db1b7c1e901d66e26e2b000eb2c", diff --git a/artifacts/test/Deposit.ral.json b/artifacts/test/Deposit.ral.json index 8dfb4f7b4..5e3ca78e6 100644 --- a/artifacts/test/Deposit.ral.json +++ b/artifacts/test/Deposit.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "Deposit", "bytecodeTemplate": "01010300000007b413c40de0b6b3a7640000a20c0c{0}0100", "fieldsSig": { diff --git a/artifacts/test/DepositToken.ral.json b/artifacts/test/DepositToken.ral.json index c6945469d..e64b9f2c6 100644 --- a/artifacts/test/DepositToken.ral.json +++ b/artifacts/test/DepositToken.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "DepositToken", "bytecodeTemplate": "01010300000009b4{1}{2}a3{2}0d0c{0}0102", "fieldsSig": { diff --git a/artifacts/test/InsertIntoMap.ral.json b/artifacts/test/InsertIntoMap.ral.json index 6f526ff77..8da7bb8bd 100644 --- a/artifacts/test/InsertIntoMap.ral.json +++ b/artifacts/test/InsertIntoMap.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "InsertIntoMap", "bytecodeTemplate": "01010300020010{2}{3}17011700{1}d10f2ca2{1}160016010f0c{0}0100", "fieldsSig": { diff --git a/artifacts/test/MapTest.ral.json b/artifacts/test/MapTest.ral.json index c23354efa..7861373a0 100644 --- a/artifacts/test/MapTest.ral.json +++ b/artifacts/test/MapTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "MapTest", "bytecode": "0004405c40dc4153418001030303001fd3a9cdcc691600d1a2140a5f5f6d61705f5f305f5f160047441601b11602d202011600d1a2140a5f5f6d61705f5f315f5f16014044b11602d201011600d1a2140a5f5f6d61705f5f325f5f1402001144b11602d2010101000104004036d3c50ed2bb0c0d0d140a5f5f6d61705f5f305f5f16004744cb1703160301000c0d0d160301011702170116020d2a0c0e0c140a5f5f6d61705f5f305f5f16004744cb010216020d2a0c0e0c140a5f5f6d61705f5f315f5f16014044cb010216020d2a0c0e0c140a5f5f6d61705f5f325f5f1402001144cb01020100010400402dd392ac08660c0d0d140a5f5f6d61705f5f305f5f16004744cb1703160301000c0d0d160301011702170116000d0c140a5f5f6d61705f5f305f5f16004744cb010316000d0c140a5f5f6d61705f5f315f5f16014044cb010316000d0c140a5f5f6d61705f5f325f5f1402001144cb0103010001020212d3143f7dc50c0d0d140a5f5f6d61705f5f305f5f16004744cb1701160101000c0d0d1601010102", "codeHash": "9c0dad73dd47255270a366794f84539f06816e30c68b1f1cca767707fa8db596", diff --git a/artifacts/test/MapTestWrapper.ral.json b/artifacts/test/MapTestWrapper.ral.json index 230aa4e71..2fbf27b0e 100644 --- a/artifacts/test/MapTestWrapper.ral.json +++ b/artifacts/test/MapTestWrapper.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "MapTestWrapper", "bytecode": "01031d4030404301030303000dd3a9cdcc691600d10f2ca21600160116020f0cce000100010001010006d3c50ed2bb16000d0cce000101010001010006d392ac086616000d0cce000102", "codeHash": "1d525d3e4cbd1c8f4c0431bf6881e888eeebae012a14532530097f62dd766e9a", diff --git a/artifacts/test/MetaData.ral.json b/artifacts/test/MetaData.ral.json index 6447b7cca..8e4d8ecf3 100644 --- a/artifacts/test/MetaData.ral.json +++ b/artifacts/test/MetaData.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "MetaData", "bytecode": "000319402c4033010300000006d38d0b3636b4b413c40de0b6b3a7640000a702000200000004b413c40de0b6b3a7640000a80200000000000102", "codeHash": "5b113459525557465f1cc5aeee453dfd5823d1a6094372cee6067f7466b40896", diff --git a/artifacts/test/MultiDeposit.ral.json b/artifacts/test/MultiDeposit.ral.json index 0964f6bbd..24455f114 100644 --- a/artifacts/test/MultiDeposit.ral.json +++ b/artifacts/test/MultiDeposit.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "MultiDeposit", "bytecodeTemplate": "0101030002004024{0}{1}17011700b413c40de0b6b3a7640000a20c0c16000100b413c40de0b6b3a7640000a20c0c16010100b4{2}13c40de0b6b3a7640000a313c40de0b6b3a76400000d0c16000102b4{2}13c40de0b6b3a7640000a313c40de0b6b3a76400000d0c16010102", "fieldsSig": { diff --git a/artifacts/test/MultiWithdraw.ral.json b/artifacts/test/MultiWithdraw.ral.json index 548409af8..d665af2de 100644 --- a/artifacts/test/MultiWithdraw.ral.json +++ b/artifacts/test/MultiWithdraw.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "MultiWithdraw", "bytecodeTemplate": "01010300020016{0}{1}170117000c0c160001010c0c1601010113c40de0b6b3a76400000d0c1600010313c40de0b6b3a76400000d0c16010103", "fieldsSig": { diff --git a/artifacts/test/OwnerOnly.ral.json b/artifacts/test/OwnerOnly.ral.json index bf9bc4cbb..151627277 100644 --- a/artifacts/test/OwnerOnly.ral.json +++ b/artifacts/test/OwnerOnly.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "OwnerOnly", "bytecode": "010111010000000006d3bf853dbdb4ce00450c7b", "codeHash": "c8ecfd7b7e1f3d0169d80e0abb59702516eeff301d47e0e7be70a631bd9414ca", diff --git a/artifacts/test/RemoveFromMap.ral.json b/artifacts/test/RemoveFromMap.ral.json index 4cbf28928..586df9024 100644 --- a/artifacts/test/RemoveFromMap.ral.json +++ b/artifacts/test/RemoveFromMap.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "RemoveFromMap", "bytecodeTemplate": "01010300000005{1}0d0c{0}0102", "fieldsSig": { diff --git a/artifacts/test/TemplateArrayVar.ral.json b/artifacts/test/TemplateArrayVar.ral.json index 419ca9ba5..d7cca2c1a 100644 --- a/artifacts/test/TemplateArrayVar.ral.json +++ b/artifacts/test/TemplateArrayVar.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "TemplateArrayVar", "bytecodeTemplate": "010103000e00408d{1}{2}{3}{4}1703170217011700{6}{7}{8}170617051704{0}18{5}1816030f2f16020e2f1a16010d2f1a16000c2f1a0c7b160016011708170716070c2f16080d2f1a0c7b16021603170a170916090e2f160a0f2f1a0c7b16060e2f16050d2f1a16040c2f1a0c7b0c170b160b0e314c40260c170c160c0e314c1b160b7a0e314d0e2c160c7a0e314d2a78160b0e2c160c2a2f0c7b160c0d2a170c4a21160b0d2a170b4a7fd60c170d160d0f314c11160d7a0f314d102a78160d2f0c7b160d0d2a170d4a2b", "fieldsSig": { diff --git a/artifacts/test/TestAssert.ral.json b/artifacts/test/TestAssert.ral.json index 007b7123c..89db5c9f5 100644 --- a/artifacts/test/TestAssert.ral.json +++ b/artifacts/test/TestAssert.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "TestAssert", "bytecodeTemplate": "010103000000040c0c{0}0100", "fieldsSig": { diff --git a/artifacts/test/Transact.ral.json b/artifacts/test/Transact.ral.json index 8fa52f72b..82687dd67 100644 --- a/artifacts/test/Transact.ral.json +++ b/artifacts/test/Transact.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "Transact", "bytecode": "03064027404e40674080408e409c010100010009d353dbb7aab413c40de0b6b3a7640000a9a00013c40de0b6b3a76400002aa10002010200010009d3a248861cb413c40de0b6b3a7640000a8a00013c40de0b6b3a76400002ba1000201010101000ad3bf2d01bdb4ce001600aca00116002aa1010201020101000ad35496306fb4ce001600aba00116002ba10102010000000103d3815a8d0da00002010000000103d3a51b051ca00102", "codeHash": "85e3e9a803741af8e92bd43b1b07cde53f39b86cab0ef1a85bab12b10d691b55", diff --git a/artifacts/test/UpdateMapValue.ral.json b/artifacts/test/UpdateMapValue.ral.json index c2d108d00..4cac34526 100644 --- a/artifacts/test/UpdateMapValue.ral.json +++ b/artifacts/test/UpdateMapValue.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "UpdateMapValue", "bytecodeTemplate": "01010300000005{1}0d0c{0}0101", "fieldsSig": { diff --git a/artifacts/test/UpdateUserAccount.ral.json b/artifacts/test/UpdateUserAccount.ral.json index e19e636c9..45da16296 100644 --- a/artifacts/test/UpdateUserAccount.ral.json +++ b/artifacts/test/UpdateUserAccount.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "UpdateUserAccount", "bytecodeTemplate": "01010300040015{1}{2}{3}{4}17031702170117001600160116021603100c{0}0100{5}0d0c{0}0101", "fieldsSig": { diff --git a/artifacts/test/UserAccount.ral.json b/artifacts/test/UserAccount.ral.json index b67128f92..b4084112f 100644 --- a/artifacts/test/UserAccount.ral.json +++ b/artifacts/test/UserAccount.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "UserAccount", "bytecode": "080340284037404d010004040013d388b067e71600ce01410c7b1602ce02410c7b1601a1021603a103160116032aa101010001010003d3185a39e11600a100010000000507d384cc0995a001ce01a002ce02a00302", "codeHash": "4e9f7eac1b76eaa2268b5af6ebb5640252892dc170aad6c1ee7b639131a55816", diff --git a/artifacts/test/Warnings.ral.json b/artifacts/test/Warnings.ral.json index 00a5d589b..0ec9d29a1 100644 --- a/artifacts/test/Warnings.ral.json +++ b/artifacts/test/Warnings.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "Warnings", "bytecode": "02010c010002020002d31bbce4a602", "codeHash": "873e095edb39cdb4b11b1157003daeacad06d259a938cd270e22b8e89b75feea", diff --git a/artifacts/test/Withdraw.ral.json b/artifacts/test/Withdraw.ral.json index 424cd3f7f..8672865ca 100644 --- a/artifacts/test/Withdraw.ral.json +++ b/artifacts/test/Withdraw.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "Withdraw", "bytecodeTemplate": "010103000000040c0c{0}0101", "fieldsSig": { diff --git a/artifacts/token/FakeTokenTest.ral.json b/artifacts/token/FakeTokenTest.ral.json index a2e1d8d7c..adf5e5e81 100644 --- a/artifacts/token/FakeTokenTest.ral.json +++ b/artifacts/token/FakeTokenTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "FakeTokenTest", "bytecode": "010509121b4024402f010000000103044d18010000000103044d18010000000103044d18010000000103044d18010000000001d38d0b3636", "codeHash": "52f971cb44d54a5353e94dc8db991d2726f76760af782e79bd8a66a9b5b294b7", diff --git a/artifacts/token/TokenTest.ral.json b/artifacts/token/TokenTest.ral.json index fa0e9c84b..a97204d07 100644 --- a/artifacts/token/TokenTest.ral.json +++ b/artifacts/token/TokenTest.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "TokenTest", "bytecode": "050409121b4024010000000102ce0002010000000102ce0102010000000102ce0202010000000102ce0302", "codeHash": "a2800413eb2c5c23d48068db23df5f8eeaba04653e12c8ed59d589720d96dadd", diff --git a/artifacts/token/TokenTestStd.ral.json b/artifacts/token/TokenTestStd.ral.json index 43a3c84b8..a013d4791 100644 --- a/artifacts/token/TokenTestStd.ral.json +++ b/artifacts/token/TokenTestStd.ral.json @@ -1,5 +1,5 @@ { - "version": "v3.8.6", + "version": "v3.9.0", "name": "TokenTestStd", "bytecode": "050509121b40244030010000000102ce0002010000000102ce0102010000000102ce0202010000000102ce0302010000000002d36811cfdd02", "codeHash": "4aa5c769148cada8eeb1cd3791f6e793ed92009ac79ebb64dc79d4d7f2969c8b", diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 90f3fb582..7a8a35cdc 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -29,7 +29,7 @@ services: condition: service_healthy alephium: - image: alephium/alephium:v3.8.6 + image: alephium/alephium:3.9.0 restart: unless-stopped ports: - 19973:19973/tcp diff --git a/packages/web3/package.json b/packages/web3/package.json index 20df1c309..56572329f 100644 --- a/packages/web3/package.json +++ b/packages/web3/package.json @@ -33,7 +33,7 @@ }, "author": "Alephium dev ", "config": { - "alephium_version": "3.8.6", + "alephium_version": "3.9.0", "explorer_backend_version": "2.2.6" }, "scripts": { diff --git a/packages/web3/src/api/api-alephium.ts b/packages/web3/src/api/api-alephium.ts index 5bc533d40..2c79a9d0c 100644 --- a/packages/web3/src/api/api-alephium.ts +++ b/packages/web3/src/api/api-alephium.ts @@ -308,6 +308,7 @@ export interface BuildExecuteScriptTxResult { gasPrice: string /** @format 32-byte-hash */ txId: string + simulatedOutputs: Output[] } /** BuildInfo */ @@ -1646,7 +1647,7 @@ export class HttpClient { /** * @title Alephium API - * @version 3.8.8 + * @version 3.9.0 * @baseUrl ../ */ export class Api extends HttpClient { diff --git a/packages/web3/src/signer/tx-builder.ts b/packages/web3/src/signer/tx-builder.ts index 4d2409895..b98c05056 100644 --- a/packages/web3/src/signer/tx-builder.ts +++ b/packages/web3/src/signer/tx-builder.ts @@ -39,7 +39,7 @@ import { import { unsignedTxCodec } from '../codec' import { groupIndexOfTransaction } from '../transaction' import { blakeHash } from '../codec/hash' -import { BuildDeployContractTxResult, BuildChainedTx } from '../api/api-alephium' +import { BuildDeployContractTxResult, BuildChainedTx, BuildExecuteScriptTxResult } from '../api/api-alephium' export abstract class TransactionBuilder { abstract get nodeProvider(): NodeProvider @@ -162,7 +162,7 @@ export abstract class TransactionBuilder { } as SignDeployContractChainedTxResult } case 'ExecuteScript': { - const buildExecuteScriptTxResult = buildResult.value + const buildExecuteScriptTxResult = buildResult.value as BuildExecuteScriptTxResult return { ...this.convertExecuteScriptTxResult(buildExecuteScriptTxResult), type: buildResultType diff --git a/packages/web3/src/signer/types.ts b/packages/web3/src/signer/types.ts index a5d6cb034..61130db2a 100644 --- a/packages/web3/src/signer/types.ts +++ b/packages/web3/src/signer/types.ts @@ -113,6 +113,7 @@ export interface SignExecuteScriptTxResult { signature: string gasAmount: number gasPrice: Number256 + simulatedOutputs: node.Output[] } assertType< Eq< From 45b9e7b6df913cfbc85eee43bcb8a9a91b70f032 Mon Sep 17 00:00:00 2001 From: pragmaxim Date: Fri, 22 Nov 2024 18:03:20 +0100 Subject: [PATCH 22/22] docker image version fix --- docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 7a8a35cdc..2cd4b9fc1 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -29,7 +29,7 @@ services: condition: service_healthy alephium: - image: alephium/alephium:3.9.0 + image: alephium/alephium:v3.9.0 restart: unless-stopped ports: - 19973:19973/tcp