From 76ef300e82949839b064998a9315ba7a52e31093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lasse=20M=C3=B8ldrup?= Date: Wed, 13 Dec 2023 15:53:29 +0100 Subject: [PATCH 1/3] Use new transaction fromJSON and toJSON --- examples/add-example-Web3Id/package.json | 2 +- examples/eSealing/package.json | 2 +- examples/nft-minting/package.json | 2 +- examples/piggybank/package.json | 2 +- examples/two-step-transfer/package.json | 2 +- examples/voting/package.json | 2 +- examples/wCCD/package.json | 2 +- packages/browser-wallet-api/package.json | 2 +- packages/browser-wallet-api/src/util.ts | 4 +-- packages/browser-wallet-api/src/wallet-api.ts | 28 ++++++++++++++++++- packages/browser-wallet/package.json | 2 +- .../src/shared/utils/payload-helpers.ts | 10 ++++++- yarn.lock | 26 ++++++++--------- 13 files changed, 60 insertions(+), 26 deletions(-) diff --git a/examples/add-example-Web3Id/package.json b/examples/add-example-Web3Id/package.json index 76cccf3c6..7bcb81c25 100644 --- a/examples/add-example-Web3Id/package.json +++ b/examples/add-example-Web3Id/package.json @@ -8,6 +8,6 @@ "start": "live-server ./index.html --mount=/sdk.js:../../node_modules/@concordium/web-sdk/lib/concordium.min.js --mount=/helpers.js:../../packages/browser-wallet-api-helpers/lib/concordiumHelpers.min.js" }, "dependencies": { - "@concordium/web-sdk": "^7.1.0" + "@concordium/web-sdk": "alpha" } } diff --git a/examples/eSealing/package.json b/examples/eSealing/package.json index 489da9cf7..e3e6d5e43 100644 --- a/examples/eSealing/package.json +++ b/examples/eSealing/package.json @@ -5,7 +5,7 @@ "license": "Apache-2.0", "dependencies": { "@concordium/react-components": "^0.4.0", - "@concordium/web-sdk": "^7.1.0", + "@concordium/web-sdk": "alpha", "@thi.ng/leb128": "^2.1.18", "@types/sha256": "^0.2.0", "@walletconnect/types": "^2.1.4", diff --git a/examples/nft-minting/package.json b/examples/nft-minting/package.json index 4c1b450db..d9085a958 100644 --- a/examples/nft-minting/package.json +++ b/examples/nft-minting/package.json @@ -3,7 +3,7 @@ "packageManager": "yarn@3.2.0", "dependencies": { "@concordium/browser-wallet-api-helpers": "workspace:^", - "@concordium/web-sdk": "^7.1.0", + "@concordium/web-sdk": "alpha", "cors": "^2.8.5", "express": "^4.18.1", "express-fileupload": "^1.4.0", diff --git a/examples/piggybank/package.json b/examples/piggybank/package.json index 5f2fff6eb..6503571de 100644 --- a/examples/piggybank/package.json +++ b/examples/piggybank/package.json @@ -3,7 +3,7 @@ "packageManager": "yarn@3.2.0", "dependencies": { "@concordium/browser-wallet-api-helpers": "workspace:^", - "@concordium/web-sdk": "^7.1.0", + "@concordium/web-sdk": "alpha", "react": "^18.1.0", "react-dom": "^18.1.0" }, diff --git a/examples/two-step-transfer/package.json b/examples/two-step-transfer/package.json index 8891289a9..73a69040d 100644 --- a/examples/two-step-transfer/package.json +++ b/examples/two-step-transfer/package.json @@ -8,6 +8,6 @@ "start": "live-server ../two-step-transfer/index.html --mount=/sdk.js:../../node_modules/@concordium/web-sdk/lib/min/concordium.web.min.js --mount=/helpers.js:../../packages/browser-wallet-api-helpers/lib/concordiumHelpers.min.js" }, "dependencies": { - "@concordium/web-sdk": "^7.1.0" + "@concordium/web-sdk": "alpha" } } diff --git a/examples/voting/package.json b/examples/voting/package.json index c25494d2a..50e4448ec 100644 --- a/examples/voting/package.json +++ b/examples/voting/package.json @@ -5,7 +5,7 @@ "packageManager": "yarn@3.2.0", "dependencies": { "@concordium/browser-wallet-api-helpers": "^3.0.0", - "@concordium/web-sdk": "^7.1.0", + "@concordium/web-sdk": "alpha", "bootstrap": "^5.2.1", "moment": "^2.29.4", "react": "^18.2.0", diff --git a/examples/wCCD/package.json b/examples/wCCD/package.json index f721f0e3d..4da04da04 100644 --- a/examples/wCCD/package.json +++ b/examples/wCCD/package.json @@ -5,7 +5,7 @@ "license": "Apache-2.0", "dependencies": { "@concordium/react-components": "^0.4.0", - "@concordium/web-sdk": "^7.1.0", + "@concordium/web-sdk": "alpha", "@thi.ng/leb128": "^2.1.18", "@walletconnect/types": "^2.1.4", "mathjs": "^11.4.0", diff --git a/packages/browser-wallet-api/package.json b/packages/browser-wallet-api/package.json index bdc43aa02..986cd238c 100644 --- a/packages/browser-wallet-api/package.json +++ b/packages/browser-wallet-api/package.json @@ -9,7 +9,7 @@ "dependencies": { "@concordium/browser-wallet-api-helpers": "workspace:^", "@concordium/browser-wallet-message-hub": "workspace:^", - "@concordium/web-sdk": "^7.1.0", + "@concordium/web-sdk": "alpha", "@concordium/web-sdk-legacy": "npm:@concordium/web-sdk@6", "@protobuf-ts/grpcweb-transport": "^2.8.2", "@protobuf-ts/runtime-rpc": "^2.8.2", diff --git a/packages/browser-wallet-api/src/util.ts b/packages/browser-wallet-api/src/util.ts index 78f12a677..6a248e11c 100644 --- a/packages/browser-wallet-api/src/util.ts +++ b/packages/browser-wallet-api/src/util.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { CcdAmount, jsonStringify } from '@concordium/web-sdk/types'; +import { CcdAmount } from '@concordium/web-sdk/types'; import { Buffer } from 'buffer/'; import { isGtuAmount } from './compatibility'; import { serializationTypes } from './constants'; @@ -29,5 +29,5 @@ export function replacer(this: any, k: string, value: any) { * Stringify that acts as an inverse for parse from browser-wallet @shared/utils/payload-helpers */ export function stringify(input: any) { - return jsonStringify(input, replacer); + return JSON.stringify(input, replacer); } diff --git a/packages/browser-wallet-api/src/wallet-api.ts b/packages/browser-wallet-api/src/wallet-api.ts index d9302771c..605043834 100644 --- a/packages/browser-wallet-api/src/wallet-api.ts +++ b/packages/browser-wallet-api/src/wallet-api.ts @@ -12,6 +12,9 @@ import { SchemaVersion, ContractAddress, VerifiablePresentation, + getAccountTransactionHandler, + AccountTransactionPayload, + Parameter, } from '@concordium/web-sdk/types'; import { WalletApi as IWalletApi, @@ -24,6 +27,8 @@ import { AccountAddressSource, SchemaSource, SendTransactionPayload, + SendTransactionUpdateContractPayload, + SendTransactionInitContractPayload, } from '@concordium/browser-wallet-api-helpers'; import EventEmitter from 'events'; import { IdProofOutput, IdStatement } from '@concordium/web-sdk/id'; @@ -132,12 +137,33 @@ class WalletApi extends EventEmitter implements IWalletApi { schemaVersion?: SchemaVersion ): Promise { const input = sanitizeSendTransactionInput(accountAddress, type, payload, parameters, schema, schemaVersion); + + let accountTransactionPayload: AccountTransactionPayload; + switch (type) { + case AccountTransactionType.Update: + accountTransactionPayload = { + ...(payload as SendTransactionUpdateContractPayload), + message: Parameter.empty(), + }; + break; + case AccountTransactionType.InitContract: + accountTransactionPayload = { + ...(payload as SendTransactionInitContractPayload), + param: Parameter.empty(), + }; + break; + default: + accountTransactionPayload = payload as AccountTransactionPayload; + break; + } + + const handler = getAccountTransactionHandler(type); const response = await this.messageHandler.sendMessage>( MessageType.SendTransaction, { ...input, accountAddress: AccountAddress.toBase58(input.accountAddress), - payload: stringify(input.payload), + payload: stringify(handler.toJSON(accountTransactionPayload)), } ); diff --git a/packages/browser-wallet/package.json b/packages/browser-wallet/package.json index cd35ef401..5a58e0687 100644 --- a/packages/browser-wallet/package.json +++ b/packages/browser-wallet/package.json @@ -22,7 +22,7 @@ "@concordium/browser-wallet-api": "workspace:^", "@concordium/browser-wallet-api-helpers": "workspace:^", "@concordium/browser-wallet-message-hub": "workspace:^", - "@concordium/web-sdk": "^7.1.0", + "@concordium/web-sdk": "alpha", "@noble/ed25519": "^1.7.0", "@protobuf-ts/runtime-rpc": "^2.8.2", "@scure/bip39": "^1.1.0", diff --git a/packages/browser-wallet/src/shared/utils/payload-helpers.ts b/packages/browser-wallet/src/shared/utils/payload-helpers.ts index e3e89e687..9a1af1cd3 100644 --- a/packages/browser-wallet/src/shared/utils/payload-helpers.ts +++ b/packages/browser-wallet/src/shared/utils/payload-helpers.ts @@ -12,6 +12,7 @@ import { EntrypointName, Parameter, jsonParse, + getAccountTransactionHandler, } from '@concordium/web-sdk'; import { Buffer } from 'buffer/'; import { SmartContractParameters, SchemaType, SchemaWithContext } from '@concordium/browser-wallet-api-helpers'; @@ -60,7 +61,9 @@ export function parsePayload( schema?: SchemaWithContext, schemaVersion: SchemaVersion = 0 ): HeadlessTransaction { - const payload = parse(stringifiedPayload); + const payloadJSON = parse(stringifiedPayload); + const handler = getAccountTransactionHandler(type); + const payload = handler.fromJSON(payloadJSON); switch (type) { case AccountTransactionType.Update: { @@ -116,6 +119,11 @@ export function parsePayload( }, }; } + case AccountTransactionType.Transfer: + return { + type, + payload: payload as SimpleTransferPayload, + }; default: return { type, diff --git a/yarn.lock b/yarn.lock index 7b9fd0c11..c65b16383 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2184,7 +2184,7 @@ __metadata: dependencies: "@concordium/browser-wallet-api-helpers": "workspace:^" "@concordium/browser-wallet-message-hub": "workspace:^" - "@concordium/web-sdk": ^7.1.0 + "@concordium/web-sdk": alpha "@concordium/web-sdk-legacy": "npm:@concordium/web-sdk@6" "@protobuf-ts/grpcweb-transport": ^2.8.2 "@protobuf-ts/runtime-rpc": ^2.8.2 @@ -2213,7 +2213,7 @@ __metadata: "@concordium/browser-wallet-api": "workspace:^" "@concordium/browser-wallet-api-helpers": "workspace:^" "@concordium/browser-wallet-message-hub": "workspace:^" - "@concordium/web-sdk": ^7.1.0 + "@concordium/web-sdk": alpha "@craftamap/esbuild-plugin-html": ^0.4.0 "@mdx-js/react": ^1.6.22 "@noble/ed25519": ^1.7.0 @@ -2358,9 +2358,9 @@ __metadata: languageName: node linkType: hard -"@concordium/web-sdk@npm:^7.1.0": - version: 7.1.0 - resolution: "@concordium/web-sdk@npm:7.1.0" +"@concordium/web-sdk@npm:alpha": + version: 7.2.0-rc.1 + resolution: "@concordium/web-sdk@npm:7.2.0-rc.1" dependencies: "@concordium/rust-bindings": 2.0.1 "@grpc/grpc-js": ^1.9.4 @@ -2378,7 +2378,7 @@ __metadata: iso-3166-1: ^2.1.1 json-bigint: ^1.0.0 uuid: ^8.3.2 - checksum: 471518fee52c45fc9bc826c4025f7da890c51a02cffaaaeab22c4b4eea0848c0ef47164719fa0c4053335c40c1e37dab323cc40c59b5b09e37790088caf517a5 + checksum: e6d92a20a8c28d9ed6542ea1646ee1c03a2b17a8e498bf67de9b5cf08927a5d4a39f3c404f6b8fe2e3eb89727f5d8630c9d035d5da4c0445324968cdf8ab91f7 languageName: node linkType: hard @@ -7529,7 +7529,7 @@ __metadata: resolution: "NFT-Minting@workspace:examples/nft-minting" dependencies: "@concordium/browser-wallet-api-helpers": "workspace:^" - "@concordium/web-sdk": ^7.1.0 + "@concordium/web-sdk": alpha "@craftamap/esbuild-plugin-html": ^0.4.0 "@types/react": ^18.0.9 "@types/react-dom": ^18.0.5 @@ -7681,7 +7681,7 @@ __metadata: version: 0.0.0-use.local resolution: "add-example-web3-id@workspace:examples/add-example-Web3Id" dependencies: - "@concordium/web-sdk": ^7.1.0 + "@concordium/web-sdk": alpha live-server: ^1.2.2 languageName: unknown linkType: soft @@ -11075,7 +11075,7 @@ __metadata: resolution: "e_sealing@workspace:examples/eSealing" dependencies: "@concordium/react-components": ^0.4.0 - "@concordium/web-sdk": ^7.1.0 + "@concordium/web-sdk": alpha "@thi.ng/leb128": ^2.1.18 "@types/node": ^18.7.23 "@types/react": ^18.0.9 @@ -18359,7 +18359,7 @@ __metadata: resolution: "piggybank@workspace:examples/piggybank" dependencies: "@concordium/browser-wallet-api-helpers": "workspace:^" - "@concordium/web-sdk": ^7.1.0 + "@concordium/web-sdk": alpha "@types/react": ^18.0.9 "@types/react-dom": ^18.0.5 "@vitejs/plugin-react-swc": ^3.4.0 @@ -22465,7 +22465,7 @@ __metadata: version: 0.0.0-use.local resolution: "two-step-transfer@workspace:examples/two-step-transfer" dependencies: - "@concordium/web-sdk": ^7.1.0 + "@concordium/web-sdk": alpha live-server: ^1.2.2 languageName: unknown linkType: soft @@ -23241,7 +23241,7 @@ __metadata: resolution: "voting@workspace:examples/voting" dependencies: "@concordium/browser-wallet-api-helpers": ^3.0.0 - "@concordium/web-sdk": ^7.1.0 + "@concordium/web-sdk": alpha "@types/node": ^18.7.23 "@types/react": ^18.0.9 "@types/react-dom": ^18.0.5 @@ -23365,7 +23365,7 @@ __metadata: resolution: "wccd@workspace:examples/wCCD" dependencies: "@concordium/react-components": ^0.4.0 - "@concordium/web-sdk": ^7.1.0 + "@concordium/web-sdk": alpha "@thi.ng/leb128": ^2.1.18 "@types/node": ^18.7.23 "@types/react": ^18.0.9 From 3cdd7a252d6016dfeebc6c30e946a103e990b65f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lasse=20M=C3=B8ldrup?= Date: Fri, 2 Feb 2024 16:05:53 +0100 Subject: [PATCH 2/3] Fix type error in wallet --- .../DisplayStatement/DisplayStatement.tsx | 2 +- .../IdProofRequest/DisplayStatement/utils.ts | 15 --------------- .../src/shared/utils/proof-helpers.ts | 5 ++++- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/packages/browser-wallet/src/popup/pages/IdProofRequest/DisplayStatement/DisplayStatement.tsx b/packages/browser-wallet/src/popup/pages/IdProofRequest/DisplayStatement/DisplayStatement.tsx index 92fb4f9a8..04f31f823 100644 --- a/packages/browser-wallet/src/popup/pages/IdProofRequest/DisplayStatement/DisplayStatement.tsx +++ b/packages/browser-wallet/src/popup/pages/IdProofRequest/DisplayStatement/DisplayStatement.tsx @@ -18,9 +18,9 @@ import { useDisplayAttributeValue, useGetAttributeName } from '@popup/shared/uti import { ConfirmedIdentity } from '@shared/storage/types'; import ExternalLink from '@popup/shared/ExternalLink'; import urls from '@shared/constants/url'; +import { canProveStatement } from '@shared/utils/proof-helpers'; import { SecretStatement, - canProveStatement, useStatementDescription, useStatementHeader, useStatementValue, diff --git a/packages/browser-wallet/src/popup/pages/IdProofRequest/DisplayStatement/utils.ts b/packages/browser-wallet/src/popup/pages/IdProofRequest/DisplayStatement/utils.ts index 3e31f77b4..e79700d7f 100644 --- a/packages/browser-wallet/src/popup/pages/IdProofRequest/DisplayStatement/utils.ts +++ b/packages/browser-wallet/src/popup/pages/IdProofRequest/DisplayStatement/utils.ts @@ -268,18 +268,3 @@ export function useStatementDescription(statement: SecretStatement, identity?: C return getStatementDescription(statement, t, i18n.resolvedLanguage); } - -export function canProveStatement(statement: SecretStatement, identity: ConfirmedIdentity) { - const attribute = identity.idObject.value.attributeList.chosenAttributes[statement.attributeTag]; - - switch (statement.type) { - case StatementTypes.AttributeInSet: - return statement.set.includes(attribute); - case StatementTypes.AttributeNotInSet: - return !statement.set.includes(attribute); - case StatementTypes.AttributeInRange: - return statement.upper > attribute && attribute >= statement.lower; - default: - throw new Error(`Statement type not supported in ${JSON.stringify(statement)}`); - } -} diff --git a/packages/browser-wallet/src/shared/utils/proof-helpers.ts b/packages/browser-wallet/src/shared/utils/proof-helpers.ts index 074b6b06b..caec74c15 100644 --- a/packages/browser-wallet/src/shared/utils/proof-helpers.ts +++ b/packages/browser-wallet/src/shared/utils/proof-helpers.ts @@ -14,6 +14,9 @@ import { BackgroundResponseStatus, ProofBackgroundResponse } from './types'; export function canProveStatement(statement: AtomicStatement, identity: ConfirmedIdentity) { const attribute = identity.idObject.value.attributeList.chosenAttributes[statement.attributeTag]; + if (attribute === undefined) { + return false; + } switch (statement.type) { case StatementTypes.AttributeInSet: @@ -23,7 +26,7 @@ export function canProveStatement(statement: AtomicStatement, identity: Confirme case StatementTypes.AttributeInRange: return statement.upper > attribute && attribute >= statement.lower; case StatementTypes.RevealAttribute: - return attribute !== undefined; + return true; default: throw new Error(`Statement type of ${statement.type} is not supported`); } From 62d16f67941bc30c7529f72d60b56811267c742a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lasse=20M=C3=B8ldrup?= Date: Fri, 9 Feb 2024 15:15:16 +0100 Subject: [PATCH 3/3] Move JSON conversion to sanitizeSendTransactionInput --- examples/add-example-Web3Id/package.json | 2 +- examples/eSealing/package.json | 2 +- examples/nft-minting/package.json | 2 +- examples/piggybank/package.json | 2 +- examples/two-step-transfer/package.json | 2 +- examples/voting/package.json | 2 +- examples/wCCD/package.json | 2 +- packages/browser-wallet-api/package.json | 2 +- .../browser-wallet-api/src/compatibility.ts | 30 ++++++- packages/browser-wallet-api/src/wallet-api.ts | 27 +----- .../test/compatibility.test.ts | 83 +++++++++++++------ packages/browser-wallet/package.json | 2 +- yarn.lock | 26 +++--- 13 files changed, 109 insertions(+), 75 deletions(-) diff --git a/examples/add-example-Web3Id/package.json b/examples/add-example-Web3Id/package.json index 016b82153..69610348f 100644 --- a/examples/add-example-Web3Id/package.json +++ b/examples/add-example-Web3Id/package.json @@ -8,6 +8,6 @@ "start": "live-server ./index.html --mount=/sdk.js:../../node_modules/@concordium/web-sdk/lib/concordium.min.js --mount=/helpers.js:../../packages/browser-wallet-api-helpers/lib/concordiumHelpers.min.js" }, "dependencies": { - "@concordium/web-sdk": "^7.3.0" + "@concordium/web-sdk": "^7.3.2" } } diff --git a/examples/eSealing/package.json b/examples/eSealing/package.json index 0ee3fe366..1633cdf91 100644 --- a/examples/eSealing/package.json +++ b/examples/eSealing/package.json @@ -5,7 +5,7 @@ "license": "Apache-2.0", "dependencies": { "@concordium/react-components": "^0.4.0", - "@concordium/web-sdk": "^7.3.0", + "@concordium/web-sdk": "^7.3.2", "@thi.ng/leb128": "^2.1.18", "@types/sha256": "^0.2.0", "@walletconnect/types": "^2.1.4", diff --git a/examples/nft-minting/package.json b/examples/nft-minting/package.json index 165b9aa35..f4ce4127f 100644 --- a/examples/nft-minting/package.json +++ b/examples/nft-minting/package.json @@ -3,7 +3,7 @@ "packageManager": "yarn@3.2.0", "dependencies": { "@concordium/browser-wallet-api-helpers": "workspace:^", - "@concordium/web-sdk": "^7.3.0", + "@concordium/web-sdk": "^7.3.2", "cors": "^2.8.5", "express": "^4.18.1", "express-fileupload": "^1.4.0", diff --git a/examples/piggybank/package.json b/examples/piggybank/package.json index 3441f40c5..717597e7a 100644 --- a/examples/piggybank/package.json +++ b/examples/piggybank/package.json @@ -3,7 +3,7 @@ "packageManager": "yarn@3.2.0", "dependencies": { "@concordium/browser-wallet-api-helpers": "workspace:^", - "@concordium/web-sdk": "^7.3.0", + "@concordium/web-sdk": "^7.3.2", "react": "^18.1.0", "react-dom": "^18.1.0" }, diff --git a/examples/two-step-transfer/package.json b/examples/two-step-transfer/package.json index 50f889f63..11ebb85c0 100644 --- a/examples/two-step-transfer/package.json +++ b/examples/two-step-transfer/package.json @@ -8,6 +8,6 @@ "start": "live-server ../two-step-transfer/index.html --mount=/sdk.js:../../node_modules/@concordium/web-sdk/lib/min/concordium.web.min.js --mount=/helpers.js:../../packages/browser-wallet-api-helpers/lib/concordiumHelpers.min.js" }, "dependencies": { - "@concordium/web-sdk": "^7.3.0" + "@concordium/web-sdk": "^7.3.2" } } diff --git a/examples/voting/package.json b/examples/voting/package.json index b8518ba7d..14e7cea59 100644 --- a/examples/voting/package.json +++ b/examples/voting/package.json @@ -5,7 +5,7 @@ "packageManager": "yarn@3.2.0", "dependencies": { "@concordium/browser-wallet-api-helpers": "^3.0.0", - "@concordium/web-sdk": "^7.3.0", + "@concordium/web-sdk": "^7.3.2", "bootstrap": "^5.2.1", "moment": "^2.29.4", "react": "^18.2.0", diff --git a/examples/wCCD/package.json b/examples/wCCD/package.json index ccbc7c399..e92f0ec63 100644 --- a/examples/wCCD/package.json +++ b/examples/wCCD/package.json @@ -5,7 +5,7 @@ "license": "Apache-2.0", "dependencies": { "@concordium/react-components": "^0.4.0", - "@concordium/web-sdk": "^7.3.0", + "@concordium/web-sdk": "^7.3.2", "@thi.ng/leb128": "^2.1.18", "@walletconnect/types": "^2.1.4", "mathjs": "^11.4.0", diff --git a/packages/browser-wallet-api/package.json b/packages/browser-wallet-api/package.json index 08397ddf9..1bdbf3e1c 100644 --- a/packages/browser-wallet-api/package.json +++ b/packages/browser-wallet-api/package.json @@ -9,7 +9,7 @@ "dependencies": { "@concordium/browser-wallet-api-helpers": "workspace:^", "@concordium/browser-wallet-message-hub": "workspace:^", - "@concordium/web-sdk": "^7.3.0", + "@concordium/web-sdk": "^7.3.2", "@protobuf-ts/grpcweb-transport": "^2.8.2", "@protobuf-ts/runtime-rpc": "^2.8.2", "buffer": "^6.0.3", diff --git a/packages/browser-wallet-api/src/compatibility.ts b/packages/browser-wallet-api/src/compatibility.ts index 44b078f14..9b43b91b9 100644 --- a/packages/browser-wallet-api/src/compatibility.ts +++ b/packages/browser-wallet-api/src/compatibility.ts @@ -30,6 +30,10 @@ import { SimpleTransferWithMemoPayload, UpdateCredentialsPayload, DataBlob, + AccountTransactionPayload, + Parameter, + getAccountTransactionHandler, + AccountTransactionPayloadJSON, } from '@concordium/web-sdk/types'; import { IdStatement } from '@concordium/web-sdk/id'; @@ -346,7 +350,7 @@ function sanitizePayload(type: AccountTransactionType, payload: SendTransactionP export type SanitizedSendTransactionInput = { accountAddress: AccountAddress.Type; type: AccountTransactionType; - payload: SendTransactionPayload; + payload: AccountTransactionPayloadJSON; parameters?: SmartContractParameters; schema?: SchemaWithContext; schemaVersion?: SchemaVersion; @@ -366,6 +370,28 @@ export function sanitizeSendTransactionInput( const sanitizedAccountAddress = sanitizeAccountAddress(accountAddress); const sanitizedPayload = sanitizePayload(type, payload); + let accountTransactionPayload: AccountTransactionPayload; + switch (type) { + case AccountTransactionType.Update: + accountTransactionPayload = { + ...(sanitizedPayload as SendTransactionUpdateContractPayload), + message: Parameter.empty(), + }; + break; + case AccountTransactionType.InitContract: + accountTransactionPayload = { + ...(sanitizedPayload as SendTransactionInitContractPayload), + param: Parameter.empty(), + }; + break; + default: + accountTransactionPayload = sanitizedPayload as AccountTransactionPayload; + break; + } + + const handler = getAccountTransactionHandler(type); + const sanitizedPayloadJSON = handler.toJSON(accountTransactionPayload); + let sanitizedSchema: SchemaWithContext | undefined; if (typeof schema === 'string' || schema instanceof String) { sanitizedSchema = { @@ -379,7 +405,7 @@ export function sanitizeSendTransactionInput( return { accountAddress: sanitizedAccountAddress, type, - payload: sanitizedPayload, + payload: sanitizedPayloadJSON, parameters, schema: sanitizedSchema, schemaVersion, diff --git a/packages/browser-wallet-api/src/wallet-api.ts b/packages/browser-wallet-api/src/wallet-api.ts index 1203c880a..b29f9e6e0 100644 --- a/packages/browser-wallet-api/src/wallet-api.ts +++ b/packages/browser-wallet-api/src/wallet-api.ts @@ -12,9 +12,6 @@ import { SchemaVersion, ContractAddress, VerifiablePresentation, - getAccountTransactionHandler, - AccountTransactionPayload, - Parameter, } from '@concordium/web-sdk/types'; import { CredentialStatements } from '@concordium/web-sdk/web3-id'; import { @@ -28,8 +25,6 @@ import { AccountAddressSource, SchemaSource, SendTransactionPayload, - SendTransactionUpdateContractPayload, - SendTransactionInitContractPayload, } from '@concordium/browser-wallet-api-helpers'; import EventEmitter from 'events'; import { IdProofOutput, IdStatement } from '@concordium/web-sdk/id'; @@ -139,32 +134,12 @@ class WalletApi extends EventEmitter implements IWalletApi { ): Promise { const input = sanitizeSendTransactionInput(accountAddress, type, payload, parameters, schema, schemaVersion); - let accountTransactionPayload: AccountTransactionPayload; - switch (type) { - case AccountTransactionType.Update: - accountTransactionPayload = { - ...(payload as SendTransactionUpdateContractPayload), - message: Parameter.empty(), - }; - break; - case AccountTransactionType.InitContract: - accountTransactionPayload = { - ...(payload as SendTransactionInitContractPayload), - param: Parameter.empty(), - }; - break; - default: - accountTransactionPayload = payload as AccountTransactionPayload; - break; - } - - const handler = getAccountTransactionHandler(type); const response = await this.messageHandler.sendMessage>( MessageType.SendTransaction, { ...input, accountAddress: AccountAddress.toBase58(input.accountAddress), - payload: stringify(handler.toJSON(accountTransactionPayload)), + payload: stringify(input.payload), parameters: JSONBig.stringify(input.parameters), } ); diff --git a/packages/browser-wallet-api/test/compatibility.test.ts b/packages/browser-wallet-api/test/compatibility.test.ts index ce49ec456..147c08a18 100644 --- a/packages/browser-wallet-api/test/compatibility.test.ts +++ b/packages/browser-wallet-api/test/compatibility.test.ts @@ -14,16 +14,18 @@ import { DeployModulePayload, Energy, EntrypointName, + getAccountTransactionHandler, IdStatementBuilder, - jsonParse, - jsonStringify, + InitContractPayload, ModuleReference, OpenStatus, + Parameter, ReceiveName, RegisterDataPayload, SchemaVersion, SimpleTransferPayload, SimpleTransferWithMemoPayload, + UpdateContractPayload, UpdateCredentialsPayload, } from '@concordium/web-sdk'; import { @@ -146,10 +148,17 @@ describe(sanitizeSendTransactionInput, () => { const parameters: SmartContractParameters = { obj: 'test' }; const schema = 'VGhpcyBpcyBiYXNlNjQK'; + const handler = getAccountTransactionHandler(type); + const accountTransactionPayload = { + ...payload, + message: Parameter.empty(), + }; + const payloadJSON = handler.toJSON(accountTransactionPayload); + let expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload, + payload: payloadJSON, }; let result = sanitizeSendTransactionInput(accountAddress, type, payload); @@ -174,16 +183,20 @@ describe(sanitizeSendTransactionInput, () => { '23513bcb5dbc81216fa4e12d3165a818e2b8699a1c9ef5c699f46ca3b1024ebf' ); - const expectedPayload: SendTransactionInitContractPayload = { + const expectedPayload: InitContractPayload = { moduleRef, maxContractExecutionEnergy: Energy.create(maxContractExecutionEnergy), amount: CcdAmount.fromMicroCcd(amount), initName: ContractName.fromString(contractName), + param: Parameter.empty(), }; + const handler = getAccountTransactionHandler(type); + const expectedPayloadJSON = handler.toJSON(expectedPayload); + const expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload: expectedPayload, + payload: expectedPayloadJSON, }; const v0: InitContractPayloadV0 = { @@ -231,7 +244,7 @@ describe(sanitizeSendTransactionInput, () => { const type = AccountTransactionType.Update; const receiveName = `${contractName}.${entrypointName}`; - const expectedPayload: SendTransactionUpdateContractPayload = { + const expectedPayload: UpdateContractPayload = { maxContractExecutionEnergy: Energy.create(maxContractExecutionEnergy), amount: CcdAmount.fromMicroCcd(amount), address: ContractAddress.create(contractIndex, contractSubindex), @@ -239,11 +252,14 @@ describe(sanitizeSendTransactionInput, () => { ContractName.fromString(contractName), EntrypointName.fromString(entrypointName) ), + message: Parameter.empty(), }; + const handler = getAccountTransactionHandler(type); + const expectedPayloadJSON = handler.toJSON(expectedPayload); const expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload: expectedPayload, + payload: expectedPayloadJSON, }; const v0: UpdateContractPayloadV0 = { @@ -289,10 +305,12 @@ describe(sanitizeSendTransactionInput, () => { version, source, }; + const handler = getAccountTransactionHandler(type); + const expectedPayloadJSON = handler.toJSON(expectedPayload); const expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload: expectedPayload, + payload: expectedPayloadJSON, }; const v0: DeployModulePayloadV0 = { @@ -319,10 +337,12 @@ describe(sanitizeSendTransactionInput, () => { toAddress: AccountAddress.fromBase58(accountAddress), amount: CcdAmount.fromMicroCcd(amount), }; + const handler = getAccountTransactionHandler(type); + const expectedPayloadJSON = handler.toJSON(expectedPayload); const expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload: expectedPayload, + payload: expectedPayloadJSON, }; const v0: SimpleTransferPayloadV0 = { @@ -359,10 +379,12 @@ describe(sanitizeSendTransactionInput, () => { amount: CcdAmount.fromMicroCcd(amount), memo, }; + const handler = getAccountTransactionHandler(type); + const expectedPayloadJSON = handler.toJSON(expectedPayload); const expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload: expectedPayload, + payload: expectedPayloadJSON, }; const v0: SimpleTransferWithMemoPayloadV0 = { @@ -403,11 +425,13 @@ describe(sanitizeSendTransactionInput, () => { amount: CcdAmount.fromMicroCcd(amount), memo, }; + const handler = getAccountTransactionHandler(type); + const expectedPayloadJSON = handler.toJSON(expectedPayload); const expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload: expectedPayload, + payload: expectedPayloadJSON, }; const payload: SimpleTransferWithMemoPayload = { @@ -428,9 +452,6 @@ describe(sanitizeSendTransactionInput, () => { const result = sanitizeSendTransactionInput(accountAddress, type, payload); expect(result).toEqual(expected); - const parsed = jsonParse(jsonStringify(result)); - expect(() => parsed.payload.memo.toJSON()).not.toThrow(); - expect(parsed).toEqual(expected); }); test('Transforms "ConfigureBaker" transaction input as expected', () => { @@ -460,10 +481,13 @@ describe(sanitizeSendTransactionInput, () => { transactionFeeCommission, finalizationRewardCommission, }; + const handler = getAccountTransactionHandler(type); + const expectedPayloadJSON = handler.toJSON(expectedPayload); + const expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload: expectedPayload, + payload: expectedPayloadJSON, }; const v0: ConfigureBakerPayloadV0 = { @@ -505,10 +529,13 @@ describe(sanitizeSendTransactionInput, () => { restakeEarnings, delegationTarget, }; + const handler = getAccountTransactionHandler(type); + const expectedPayloadJSON = handler.toJSON(expectedPayload); + const expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload: expectedPayload, + payload: expectedPayloadJSON, }; const v0: ConfigureDelegationPayloadV0 = { @@ -536,14 +563,16 @@ describe(sanitizeSendTransactionInput, () => { const payload: RegisterDataPayload = { data: new DataBlob(Buffer.from('This is data!')), }; + const handler = getAccountTransactionHandler(type); + const expectedPayloadJSON = handler.toJSON(payload); + const expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload, + payload: expectedPayloadJSON, }; const result = sanitizeSendTransactionInput(accountAddress, type, payload); expect(result).toEqual(expected); - expect((result.payload as RegisterDataPayload).data).toStrictEqual(payload.data); }); test('Transformed "RegisterData" transaction input with "DataBlob"-like parameter can be parsed', () => { @@ -556,19 +585,20 @@ describe(sanitizeSendTransactionInput, () => { } as unknown as DataBlob, }; + const expectedPayload: RegisterDataPayload = { + data: new DataBlob(Buffer.from('This is data!')), + }; + const handler = getAccountTransactionHandler(type); + const expectedPayloadJSON = handler.toJSON(expectedPayload); + const expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload: { - data: new DataBlob(Buffer.from('This is data!')), - }, + payload: expectedPayloadJSON, }; const result = sanitizeSendTransactionInput(accountAddress, type, payload); expect(result).toEqual(expected); - const parsed = jsonParse(jsonStringify(result)); - expect(() => parsed.payload.data.toJSON()).not.toThrow(); - expect(parsed).toEqual(expected); }); test('Transforms "UpdateCredentials" transaction input as expected', () => { @@ -607,10 +637,13 @@ describe(sanitizeSendTransactionInput, () => { removeCredentialIds: ['010302'], currentNumberOfCredentials: 1n, }; + const handler = getAccountTransactionHandler(type); + const expectedPayloadJSON = handler.toJSON(payload); + const expected: SanitizedSendTransactionInput = { accountAddress: AccountAddress.fromBase58(accountAddress), type, - payload, + payload: expectedPayloadJSON, }; const result = sanitizeSendTransactionInput(accountAddress, type, payload); expect(result).toEqual(expected); diff --git a/packages/browser-wallet/package.json b/packages/browser-wallet/package.json index 99b5e52bd..a7f52a035 100644 --- a/packages/browser-wallet/package.json +++ b/packages/browser-wallet/package.json @@ -22,7 +22,7 @@ "@concordium/browser-wallet-api": "workspace:^", "@concordium/browser-wallet-api-helpers": "workspace:^", "@concordium/browser-wallet-message-hub": "workspace:^", - "@concordium/web-sdk": "^7.3.0", + "@concordium/web-sdk": "^7.3.2", "@noble/ed25519": "^1.7.0", "@protobuf-ts/runtime-rpc": "^2.8.2", "@scure/bip39": "^1.1.0", diff --git a/yarn.lock b/yarn.lock index d71e481a2..25b95ad18 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2184,7 +2184,7 @@ __metadata: dependencies: "@concordium/browser-wallet-api-helpers": "workspace:^" "@concordium/browser-wallet-message-hub": "workspace:^" - "@concordium/web-sdk": ^7.3.0 + "@concordium/web-sdk": ^7.3.2 "@protobuf-ts/grpcweb-transport": ^2.8.2 "@protobuf-ts/runtime-rpc": ^2.8.2 "@types/json-bigint": ^1.0.2 @@ -2214,7 +2214,7 @@ __metadata: "@concordium/browser-wallet-api": "workspace:^" "@concordium/browser-wallet-api-helpers": "workspace:^" "@concordium/browser-wallet-message-hub": "workspace:^" - "@concordium/web-sdk": ^7.3.0 + "@concordium/web-sdk": ^7.3.2 "@craftamap/esbuild-plugin-html": ^0.4.0 "@mdx-js/react": ^1.6.22 "@noble/ed25519": ^1.7.0 @@ -2317,9 +2317,9 @@ __metadata: languageName: node linkType: hard -"@concordium/web-sdk@npm:^7.3.0": - version: 7.3.0 - resolution: "@concordium/web-sdk@npm:7.3.0" +"@concordium/web-sdk@npm:^7.3.2": + version: 7.3.2 + resolution: "@concordium/web-sdk@npm:7.3.2" dependencies: "@concordium/rust-bindings": 3.0.0 "@grpc/grpc-js": ^1.9.4 @@ -2337,7 +2337,7 @@ __metadata: iso-3166-1: ^2.1.1 json-bigint: ^1.0.0 uuid: ^8.3.2 - checksum: 5d15e49284d0ef1e8ca9b7e241117c6ff1b95fc4259fee9d0131df89f58c88070550280a2c4ac230d6ffac4bf369c32c3650b0dfbde7fe843ac05b1281dfcc89 + checksum: 90ff080ebd422f504e1d0a05db0df32506c8bbf844957ac999efdd8d8eebb7d164fb68a1116f73d65d0dd2c5bfc74ad5169ad7d2406f8484175927f353a47a70 languageName: node linkType: hard @@ -7488,7 +7488,7 @@ __metadata: resolution: "NFT-Minting@workspace:examples/nft-minting" dependencies: "@concordium/browser-wallet-api-helpers": "workspace:^" - "@concordium/web-sdk": ^7.3.0 + "@concordium/web-sdk": ^7.3.2 "@craftamap/esbuild-plugin-html": ^0.4.0 "@types/react": ^18.0.9 "@types/react-dom": ^18.0.5 @@ -7640,7 +7640,7 @@ __metadata: version: 0.0.0-use.local resolution: "add-example-web3-id@workspace:examples/add-example-Web3Id" dependencies: - "@concordium/web-sdk": ^7.3.0 + "@concordium/web-sdk": ^7.3.2 live-server: ^1.2.2 languageName: unknown linkType: soft @@ -10996,7 +10996,7 @@ __metadata: resolution: "e_sealing@workspace:examples/eSealing" dependencies: "@concordium/react-components": ^0.4.0 - "@concordium/web-sdk": ^7.3.0 + "@concordium/web-sdk": ^7.3.2 "@thi.ng/leb128": ^2.1.18 "@types/node": ^18.7.23 "@types/react": ^18.0.9 @@ -18280,7 +18280,7 @@ __metadata: resolution: "piggybank@workspace:examples/piggybank" dependencies: "@concordium/browser-wallet-api-helpers": "workspace:^" - "@concordium/web-sdk": ^7.3.0 + "@concordium/web-sdk": ^7.3.2 "@types/react": ^18.0.9 "@types/react-dom": ^18.0.5 "@vitejs/plugin-react-swc": ^3.4.0 @@ -22386,7 +22386,7 @@ __metadata: version: 0.0.0-use.local resolution: "two-step-transfer@workspace:examples/two-step-transfer" dependencies: - "@concordium/web-sdk": ^7.3.0 + "@concordium/web-sdk": ^7.3.2 live-server: ^1.2.2 languageName: unknown linkType: soft @@ -23162,7 +23162,7 @@ __metadata: resolution: "voting@workspace:examples/voting" dependencies: "@concordium/browser-wallet-api-helpers": ^3.0.0 - "@concordium/web-sdk": ^7.3.0 + "@concordium/web-sdk": ^7.3.2 "@types/node": ^18.7.23 "@types/react": ^18.0.9 "@types/react-dom": ^18.0.5 @@ -23286,7 +23286,7 @@ __metadata: resolution: "wccd@workspace:examples/wCCD" dependencies: "@concordium/react-components": ^0.4.0 - "@concordium/web-sdk": ^7.3.0 + "@concordium/web-sdk": ^7.3.2 "@thi.ng/leb128": ^2.1.18 "@types/node": ^18.7.23 "@types/react": ^18.0.9