Skip to content

Commit 3fa7018

Browse files
authored
fix: transaction note metadata format (#1379)
Fixes #978 Now compliant with CIP-20 for strings less than 64 bytes
1 parent a4be9da commit 3fa7018

File tree

6 files changed

+155
-67
lines changed

6 files changed

+155
-67
lines changed

apps/browser-extension-wallet/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"@cardano-sdk/core": "0.38.1",
4646
"@cardano-sdk/dapp-connector": "0.12.30",
4747
"@cardano-sdk/input-selection": "0.13.12",
48-
"@cardano-sdk/tx-construction": "0.20.1",
48+
"@cardano-sdk/tx-construction": "0.21.0",
4949
"@cardano-sdk/util": "0.15.4",
5050
"@cardano-sdk/wallet": "0.42.2",
5151
"@cardano-sdk/web-extension": "0.31.2",

packages/cardano/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"@cardano-sdk/hardware-ledger": "0.11.2",
4747
"@cardano-sdk/hardware-trezor": "0.5.2",
4848
"@cardano-sdk/key-management": "0.23.1",
49+
"@cardano-sdk/tx-construction": "0.21.0",
4950
"@cardano-sdk/util": "0.15.4",
5051
"@cardano-sdk/wallet": "0.42.2",
5152
"@cardano-sdk/web-extension": "0.31.2",

packages/cardano/src/wallet/lib/__tests__/get-auxiliary-data.test.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { cardanoMetadatumToObj, getChunks } from '../get-auxiliary-data';
1+
import { cardanoMetadatumToObj } from '../get-auxiliary-data';
22

33
const bigIntNumber = 1_000_000;
44
const metadataString = 'test metadata';
@@ -27,12 +27,3 @@ describe('Testing cardanoMetadatumToObj function', () => {
2727
expect(JSON.stringify(result)).toBe('[[{"msg":[{"msg":"test metadata"}]}],[{"msg":"test metadata"}]]');
2828
});
2929
});
30-
31-
describe('Testing getChunks function', () => {
32-
test('given a byte size of 2 and a sentence with 13 characters, should return an array of length 7', async () => {
33-
const chunkSize = 2;
34-
const arrayLength = 7;
35-
const result = getChunks(metadataString, chunkSize);
36-
expect(result.length).toBe(arrayLength);
37-
});
38-
});
Lines changed: 2 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import { Cardano } from '@cardano-sdk/core';
2-
3-
const metadatumLabel = '674';
4-
const defaultSizeInBytes = 64;
2+
import { CIP20 } from '@cardano-sdk/tx-construction';
53

64
export const cardanoMetadatumToObj = (metadatum: Cardano.Metadatum): string | unknown[] => {
75
if (typeof metadatum === 'string') {
@@ -25,55 +23,6 @@ export const cardanoMetadatumToObj = (metadatum: Cardano.Metadatum): string | un
2523
return new TextDecoder().decode(metadatum);
2624
};
2725

28-
const getSizeInBytes = (character: string) => Buffer.from(character, 'utf8').length;
29-
30-
export const getChunks = (input: string, chunkByteSize: number): string[] => {
31-
let size = 0;
32-
let start = 0;
33-
34-
const lines = [];
35-
36-
for (let char = 0; char < input.length; char++) {
37-
const isEndOfArray = char === input.length - 1;
38-
39-
const currentSize = size + getSizeInBytes(input[char]);
40-
const nextCharSize = !isEndOfArray ? currentSize + getSizeInBytes(input[char + 1]) : chunkByteSize + 1;
41-
42-
const shouldSliceString = currentSize === chunkByteSize || nextCharSize > chunkByteSize || isEndOfArray;
43-
44-
if (shouldSliceString) {
45-
const chunk = input.slice(start, char + 1);
46-
47-
lines.push(chunk);
48-
start = char + 1;
49-
size = 0;
50-
} else {
51-
size = currentSize;
52-
}
53-
}
54-
55-
return lines;
56-
};
57-
58-
const getCIP20Metadata = (msg: Cardano.Metadatum) => {
59-
// this follows https://github.com/cardano-foundation/CIPs/blob/master/CIP-0020/README.md basic JSON schema spec
60-
const label = BigInt(metadatumLabel);
61-
const msgMap = new Map([['msg', msg]]);
62-
return new Map([[label, msgMap]]);
63-
};
64-
65-
export const createMetadata = (metadataString: string, customSizeInBytes?: number): Cardano.TxMetadata => {
66-
const sizeInBytes = customSizeInBytes ?? defaultSizeInBytes;
67-
68-
if (getSizeInBytes(metadataString) <= sizeInBytes) {
69-
return getCIP20Metadata(metadataString);
70-
}
71-
72-
// splits string into chunks no greater than n bytes in size
73-
const splittedMsg = getChunks(metadataString, sizeInBytes);
74-
return getCIP20Metadata(splittedMsg);
75-
};
76-
7726
export const getAuxiliaryData = (auxiliaryData: { metadataString: string }): Cardano.AuxiliaryData => ({
78-
blob: createMetadata(auxiliaryData.metadataString)
27+
blob: CIP20.toTxMetadata(auxiliaryData.metadataString)
7928
});

packages/staking/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@
127127
},
128128
"peerDependencies": {
129129
"@cardano-sdk/input-selection": "0.13.12",
130-
"@cardano-sdk/tx-construction": "0.20.1",
130+
"@cardano-sdk/tx-construction": "0.21.0",
131131
"@cardano-sdk/util": "0.15.4",
132132
"@cardano-sdk/wallet": "0.42.2",
133133
"@cardano-sdk/web-extension": "0.31.2",

yarn.lock

Lines changed: 149 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7814,6 +7814,31 @@ __metadata:
78147814
languageName: node
78157815
linkType: hard
78167816

7817+
"@cardano-sdk/core@npm:~0.39.0":
7818+
version: 0.39.0
7819+
resolution: "@cardano-sdk/core@npm:0.39.0"
7820+
dependencies:
7821+
"@cardano-ogmios/client": 6.5.0
7822+
"@cardano-ogmios/schema": 6.5.0
7823+
"@cardano-sdk/crypto": ~0.1.30
7824+
"@cardano-sdk/util": ~0.15.5
7825+
"@foxglove/crc": ^0.0.3
7826+
"@scure/base": ^1.1.1
7827+
fraction.js: 4.0.1
7828+
ip-address: ^9.0.5
7829+
lodash: ^4.17.21
7830+
ts-custom-error: ^3.2.0
7831+
ts-log: ^2.2.4
7832+
web-encoding: ^1.1.5
7833+
peerDependencies:
7834+
rxjs: ^7.4.0
7835+
peerDependenciesMeta:
7836+
rxjs:
7837+
optional: true
7838+
checksum: d7a5cc8ba3dcaaf23570ff766418e2e950f41dd1199c8224f4b0c61fb02b5fb35a5200aec08a6426ea2af3aa3a523365fc8d5370940f3a7038127aec3837a521
7839+
languageName: node
7840+
linkType: hard
7841+
78177842
"@cardano-sdk/crypto@npm:0.1.29, @cardano-sdk/crypto@npm:~0.1.29":
78187843
version: 0.1.29
78197844
resolution: "@cardano-sdk/crypto@npm:0.1.29"
@@ -7842,6 +7867,34 @@ __metadata:
78427867
languageName: node
78437868
linkType: hard
78447869

7870+
"@cardano-sdk/crypto@npm:~0.1.30":
7871+
version: 0.1.30
7872+
resolution: "@cardano-sdk/crypto@npm:0.1.30"
7873+
dependencies:
7874+
"@cardano-sdk/util": ~0.15.5
7875+
blake2b: ^2.1.4
7876+
i: ^0.3.7
7877+
libsodium-wrappers-sumo: ^0.7.5
7878+
lodash: ^4.17.21
7879+
npm: ^9.3.0
7880+
pbkdf2: ^3.1.2
7881+
ts-custom-error: ^3.2.0
7882+
ts-log: ^2.2.4
7883+
peerDependencies:
7884+
"@dcspark/cardano-multiplatform-lib-asmjs": ^3.1.1
7885+
"@dcspark/cardano-multiplatform-lib-browser": ^3.1.1
7886+
"@dcspark/cardano-multiplatform-lib-nodejs": ^3.1.1
7887+
peerDependenciesMeta:
7888+
"@dcspark/cardano-multiplatform-lib-asmjs":
7889+
optional: true
7890+
"@dcspark/cardano-multiplatform-lib-browser":
7891+
optional: true
7892+
"@dcspark/cardano-multiplatform-lib-nodejs":
7893+
optional: true
7894+
checksum: a722186ee3d48d6f31773c066547af985ffa21c156fdb56f836240bcbefac866d4bd420f7d7e4956dc8a1963e965ee37658a565d376599d375d0b78b84492a2d
7895+
languageName: node
7896+
linkType: hard
7897+
78457898
"@cardano-sdk/dapp-connector@npm:0.12.30, @cardano-sdk/dapp-connector@npm:~0.12.30":
78467899
version: 0.12.30
78477900
resolution: "@cardano-sdk/dapp-connector@npm:0.12.30"
@@ -7856,6 +7909,20 @@ __metadata:
78567909
languageName: node
78577910
linkType: hard
78587911

7912+
"@cardano-sdk/dapp-connector@npm:~0.12.33":
7913+
version: 0.12.33
7914+
resolution: "@cardano-sdk/dapp-connector@npm:0.12.33"
7915+
dependencies:
7916+
"@cardano-sdk/core": ~0.39.0
7917+
"@cardano-sdk/crypto": ~0.1.30
7918+
"@cardano-sdk/util": ~0.15.5
7919+
ts-custom-error: ^3.2.0
7920+
ts-log: ^2.2.4
7921+
webextension-polyfill: ^0.8.0
7922+
checksum: 181ce24769aba2b97c149c43b9c6f9f307aa3075f2cc42eebd69394a7e01f6681e2d3bdc562e1db4660631964baff8a89126221bf07d342eefc05feb2bdb1f58
7923+
languageName: node
7924+
linkType: hard
7925+
78597926
"@cardano-sdk/hardware-ledger@npm:0.11.2, @cardano-sdk/hardware-ledger@npm:~0.11.2":
78607927
version: 0.11.2
78617928
resolution: "@cardano-sdk/hardware-ledger@npm:0.11.2"
@@ -7911,6 +7978,20 @@ __metadata:
79117978
languageName: node
79127979
linkType: hard
79137980

7981+
"@cardano-sdk/input-selection@npm:~0.13.15":
7982+
version: 0.13.15
7983+
resolution: "@cardano-sdk/input-selection@npm:0.13.15"
7984+
dependencies:
7985+
"@cardano-sdk/core": ~0.39.0
7986+
"@cardano-sdk/key-management": ~0.23.4
7987+
"@cardano-sdk/util": ~0.15.5
7988+
bignumber.js: ^9.1.1
7989+
lodash: ^4.17.21
7990+
ts-custom-error: ^3.2.0
7991+
checksum: 8db1481749d3a1f80fcc91671ba1bfec6918a1578fb945e401f150143747a1dafea8f52d759ea1758d16bd1ee4dceda5281a3cc95cad1517788b45a6f94f3890
7992+
languageName: node
7993+
linkType: hard
7994+
79147995
"@cardano-sdk/key-management@npm:0.23.1, @cardano-sdk/key-management@npm:~0.23.1":
79157996
version: 0.23.1
79167997
resolution: "@cardano-sdk/key-management@npm:0.23.1"
@@ -7932,6 +8013,27 @@ __metadata:
79328013
languageName: node
79338014
linkType: hard
79348015

8016+
"@cardano-sdk/key-management@npm:~0.23.4":
8017+
version: 0.23.4
8018+
resolution: "@cardano-sdk/key-management@npm:0.23.4"
8019+
dependencies:
8020+
"@cardano-sdk/core": ~0.39.0
8021+
"@cardano-sdk/crypto": ~0.1.30
8022+
"@cardano-sdk/dapp-connector": ~0.12.33
8023+
"@cardano-sdk/util": ~0.15.5
8024+
"@emurgo/cardano-message-signing-nodejs": ^1.0.1
8025+
bip39: ^3.0.4
8026+
chacha: ^2.1.0
8027+
get-random-values: ^2.0.0
8028+
lodash: ^4.17.21
8029+
pbkdf2: ^3.1.2
8030+
rxjs: ^7.4.0
8031+
ts-custom-error: ^3.2.0
8032+
ts-log: ^2.2.4
8033+
checksum: f593cc23e4ecea6e456bbaa6ffd73b497a6b4e53bbf83f62be9e84591f86b2a40bde933c5bbad041217f09443f59372b8cafef070a9900cf4ec5b257fbe45a32
8034+
languageName: node
8035+
linkType: hard
8036+
79358037
"@cardano-sdk/tx-construction@npm:0.20.1, @cardano-sdk/tx-construction@npm:~0.20.1":
79368038
version: 0.20.1
79378039
resolution: "@cardano-sdk/tx-construction@npm:0.20.1"
@@ -7951,6 +8053,25 @@ __metadata:
79518053
languageName: node
79528054
linkType: hard
79538055

8056+
"@cardano-sdk/tx-construction@npm:0.21.0":
8057+
version: 0.21.0
8058+
resolution: "@cardano-sdk/tx-construction@npm:0.21.0"
8059+
dependencies:
8060+
"@cardano-sdk/core": ~0.39.0
8061+
"@cardano-sdk/crypto": ~0.1.30
8062+
"@cardano-sdk/input-selection": ~0.13.15
8063+
"@cardano-sdk/key-management": ~0.23.4
8064+
"@cardano-sdk/util": ~0.15.5
8065+
"@cardano-sdk/util-rxjs": ~0.7.28
8066+
lodash: ^4.17.21
8067+
npm: ^9.3.0
8068+
rxjs: ^7.4.0
8069+
ts-custom-error: ^3.2.0
8070+
ts-log: ^2.2.4
8071+
checksum: cf39f1dcf6febf3a02b887bdf63cd43ce8368d005714738014f6ccf743c0479bd0bcef1741a90475da4636415d896d602bb0f8e381a841515dd3e0e22debc999
8072+
languageName: node
8073+
linkType: hard
8074+
79548075
"@cardano-sdk/util-dev@npm:0.22.3":
79558076
version: 0.22.3
79568077
resolution: "@cardano-sdk/util-dev@npm:0.22.3"
@@ -7985,6 +8106,17 @@ __metadata:
79858106
languageName: node
79868107
linkType: hard
79878108

8109+
"@cardano-sdk/util-rxjs@npm:~0.7.28":
8110+
version: 0.7.28
8111+
resolution: "@cardano-sdk/util-rxjs@npm:0.7.28"
8112+
dependencies:
8113+
"@cardano-sdk/util": ~0.15.5
8114+
backoff-rxjs: ^7.0.0
8115+
rxjs: ^7.4.0
8116+
checksum: 01e1ef190108562bb725d6b2f6bbc52c36df30de519a1096b4070102dd0823f5680adde84d9afa65025a9d328beb033480a30c014f35814e4e880fb4fe638bec
8117+
languageName: node
8118+
linkType: hard
8119+
79888120
"@cardano-sdk/util@npm:0.15.4, @cardano-sdk/util@npm:~0.15.4":
79898121
version: 0.15.4
79908122
resolution: "@cardano-sdk/util@npm:0.15.4"
@@ -7999,6 +8131,20 @@ __metadata:
79998131
languageName: node
80008132
linkType: hard
80018133

8134+
"@cardano-sdk/util@npm:~0.15.5":
8135+
version: 0.15.5
8136+
resolution: "@cardano-sdk/util@npm:0.15.5"
8137+
dependencies:
8138+
bech32: ^2.0.0
8139+
lodash: ^4.17.21
8140+
serialize-error: ^8
8141+
ts-custom-error: ^3.2.0
8142+
ts-log: ^2.2.4
8143+
type-fest: ^2.19.0
8144+
checksum: 1c5e16e004bec6b3bbcad61f8235257bb04d7a43fb14e884484c039044b582bf7e75bbeb73c1b64d648e2d0a3dec0b1cef918e3b3b5edfe6e1288c80d5bcc730
8145+
languageName: node
8146+
linkType: hard
8147+
80028148
"@cardano-sdk/wallet@npm:0.42.2, @cardano-sdk/wallet@npm:~0.42.2":
80038149
version: 0.42.2
80048150
resolution: "@cardano-sdk/wallet@npm:0.42.2"
@@ -11054,7 +11200,7 @@ __metadata:
1105411200
"@cardano-sdk/dapp-connector": 0.12.30
1105511201
"@cardano-sdk/hardware-ledger": 0.11.2
1105611202
"@cardano-sdk/input-selection": 0.13.12
11057-
"@cardano-sdk/tx-construction": 0.20.1
11203+
"@cardano-sdk/tx-construction": 0.21.0
1105811204
"@cardano-sdk/util": 0.15.4
1105911205
"@cardano-sdk/wallet": 0.42.2
1106011206
"@cardano-sdk/web-extension": 0.31.2
@@ -11136,6 +11282,7 @@ __metadata:
1113611282
"@cardano-sdk/hardware-ledger": 0.11.2
1113711283
"@cardano-sdk/hardware-trezor": 0.5.2
1113811284
"@cardano-sdk/key-management": 0.23.1
11285+
"@cardano-sdk/tx-construction": 0.21.0
1113911286
"@cardano-sdk/util": 0.15.4
1114011287
"@cardano-sdk/util-dev": 0.22.3
1114111288
"@cardano-sdk/wallet": 0.42.2
@@ -11367,7 +11514,7 @@ __metadata:
1136711514
zustand: ^4.4.1
1136811515
peerDependencies:
1136911516
"@cardano-sdk/input-selection": 0.13.12
11370-
"@cardano-sdk/tx-construction": 0.20.1
11517+
"@cardano-sdk/tx-construction": 0.21.0
1137111518
"@cardano-sdk/util": 0.15.4
1137211519
"@cardano-sdk/wallet": 0.42.2
1137311520
"@cardano-sdk/web-extension": 0.31.2

0 commit comments

Comments
 (0)