@bitgo-beta/sdk-coin-canton 1.0.1-beta.22 → 1.0.1-beta.221
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/resources/hash/hash.d.ts +5 -0
- package/dist/resources/hash/hash.js +298 -0
- package/dist/resources/proto/damlTransaction.js +4 -4
- package/dist/resources/proto/damlTransactionNode.js +3 -3
- package/dist/resources/proto/damlTransactionNodeSeed.js +2 -2
- package/dist/resources/proto/metadata/metadataGlobalKeyMappingEntry.js +4 -4
- package/dist/resources/proto/metadata/metadataInputContract.js +3 -3
- package/dist/resources/proto/metadata/metadataSubmitterInfo.js +2 -2
- package/dist/resources/proto/metadata.js +5 -5
- package/dist/resources/proto/node/empty.js +2 -2
- package/dist/resources/proto/node/globalKey.js +4 -4
- package/dist/resources/proto/node/identifier.js +2 -2
- package/dist/resources/proto/node/node.js +16 -8
- package/dist/resources/proto/node/timestamp.js +3 -3
- package/dist/resources/proto/node/value.js +28 -14
- package/dist/resources/proto/preparedTransaction.js +4 -4
- package/dist/src/canton.d.ts +18 -2
- package/dist/src/canton.d.ts.map +1 -1
- package/dist/src/canton.js +107 -6
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/constant.d.ts +4 -0
- package/dist/src/lib/constant.d.ts.map +1 -1
- package/dist/src/lib/constant.js +6 -2
- package/dist/src/lib/iface.d.ts +83 -3
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +7 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +16 -2
- package/dist/src/lib/oneStepPreApprovalBuilder.d.ts +51 -0
- package/dist/src/lib/oneStepPreApprovalBuilder.d.ts.map +1 -0
- package/dist/src/lib/oneStepPreApprovalBuilder.js +101 -0
- package/dist/src/lib/transaction/transaction.d.ts +21 -5
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +207 -12
- package/dist/src/lib/transactionBuilder.d.ts +9 -16
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +31 -27
- package/dist/src/lib/transactionBuilderFactory.d.ts +17 -3
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +63 -6
- package/dist/src/lib/transferAcceptanceBuilder.d.ts +59 -0
- package/dist/src/lib/transferAcceptanceBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferAcceptanceBuilder.js +116 -0
- package/dist/src/lib/transferAcknowledgeBuilder.d.ts +72 -0
- package/dist/src/lib/transferAcknowledgeBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferAcknowledgeBuilder.js +133 -0
- package/dist/src/lib/transferBuilder.d.ts +80 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +156 -1
- package/dist/src/lib/transferRejectionBuilder.d.ts +59 -0
- package/dist/src/lib/transferRejectionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferRejectionBuilder.js +116 -0
- package/dist/src/lib/utils.d.ts +23 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +152 -28
- package/dist/src/lib/walletInitBuilder.d.ts +5 -10
- package/dist/src/lib/walletInitBuilder.d.ts.map +1 -1
- package/dist/src/lib/walletInitBuilder.js +13 -18
- package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts +2 -2
- package/dist/src/lib/walletInitialization/walletInitTransaction.d.ts.map +1 -1
- package/dist/src/lib/walletInitialization/walletInitTransaction.js +47 -7
- package/dist/test/helper.d.ts +3 -0
- package/dist/test/helper.d.ts.map +1 -0
- package/dist/test/helper.js +9 -0
- package/dist/test/integration/canton.integration.d.ts +2 -0
- package/dist/test/integration/canton.integration.d.ts.map +1 -0
- package/dist/test/integration/canton.integration.js +157 -0
- package/dist/test/resources.d.ts +98 -1
- package/dist/test/resources.d.ts.map +1 -1
- package/dist/test/resources.js +103 -3
- package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.d.ts +2 -0
- package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/oneStepEnablement/oneStepEnablementBuilder.js +67 -0
- package/dist/test/unit/builder/transfer/transferBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transfer/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transfer/transferBuilder.js +63 -0
- package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transferAccept/transferAcceptBuilder.js +57 -0
- package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transferAcknowledge/transferAcknowledgeBuilder.js +32 -0
- package/dist/test/unit/builder/transferReject/transferRejectBuilder.d.ts +2 -0
- package/dist/test/unit/builder/transferReject/transferRejectBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/transferReject/transferRejectBuilder.js +57 -0
- package/dist/test/unit/builder/walletInit/walletInitBuilder.js +10 -13
- package/dist/test/unit/utils.js +103 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +24 -7
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
// This is the static helper file from canton SDK, replicating it here since we won't be using the canton wallet SDK
|
|
2
|
+
// TODO: https://bitgoinc.atlassian.net/browse/COIN-6016
|
|
3
|
+
const PREPARED_TRANSACTION_HASH_PURPOSE = Uint8Array.from([0x00, 0x00, 0x00, 0x30]);
|
|
4
|
+
const NODE_ENCODING_VERSION = Uint8Array.from([0x01]);
|
|
5
|
+
const HASHING_SCHEME_VERSION = Uint8Array.from([2]);
|
|
6
|
+
async function sha256(message) {
|
|
7
|
+
const msg = typeof message === 'string' ? new TextEncoder().encode(message) : message;
|
|
8
|
+
return crypto.subtle.digest('SHA-256', new Uint8Array(msg)).then((hash) => new Uint8Array(hash));
|
|
9
|
+
}
|
|
10
|
+
async function mkByteArray(...args) {
|
|
11
|
+
const normalizedArgs = args.map((arg) => {
|
|
12
|
+
if (typeof arg === 'number') {
|
|
13
|
+
return new Uint8Array([arg]);
|
|
14
|
+
} else {
|
|
15
|
+
return arg;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
let totalLength = 0;
|
|
19
|
+
normalizedArgs.forEach((arg) => {
|
|
20
|
+
totalLength += arg.length;
|
|
21
|
+
});
|
|
22
|
+
const mergedArray = new Uint8Array(totalLength);
|
|
23
|
+
let offset = 0;
|
|
24
|
+
normalizedArgs.forEach((arg) => {
|
|
25
|
+
mergedArray.set(arg, offset);
|
|
26
|
+
offset += arg.length;
|
|
27
|
+
});
|
|
28
|
+
return mergedArray;
|
|
29
|
+
}
|
|
30
|
+
async function encodeBool(value) {
|
|
31
|
+
return new Uint8Array([value ? 1 : 0]);
|
|
32
|
+
}
|
|
33
|
+
async function encodeInt32(value) {
|
|
34
|
+
const buffer = new ArrayBuffer(4);
|
|
35
|
+
const view = new DataView(buffer);
|
|
36
|
+
view.setInt32(0, value, false); // true for little-endian
|
|
37
|
+
return new Uint8Array(buffer);
|
|
38
|
+
}
|
|
39
|
+
async function encodeInt64(value) {
|
|
40
|
+
// eslint-disable-next-line no-undef
|
|
41
|
+
const num = typeof value === 'bigint' ? value : BigInt(value || 0);
|
|
42
|
+
const buffer = new ArrayBuffer(8);
|
|
43
|
+
const view = new DataView(buffer);
|
|
44
|
+
view.setBigInt64(0, num, false); // true for little-endian
|
|
45
|
+
return new Uint8Array(buffer);
|
|
46
|
+
}
|
|
47
|
+
async function encodeString(value = '') {
|
|
48
|
+
const utf8Bytes = new TextEncoder().encode(value);
|
|
49
|
+
return encodeBytes(utf8Bytes);
|
|
50
|
+
}
|
|
51
|
+
async function encodeBytes(value) {
|
|
52
|
+
const length = await encodeInt32(value.length);
|
|
53
|
+
return mkByteArray(length, value);
|
|
54
|
+
}
|
|
55
|
+
async function encodeHash(value) {
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
function encodeHexString(value = '') {
|
|
59
|
+
// Convert hex string to Uint8Array
|
|
60
|
+
const bytes = new Uint8Array(value.length / 2);
|
|
61
|
+
for (let i = 0; i < value.length; i += 2) {
|
|
62
|
+
bytes[i / 2] = parseInt(value.slice(i, i + 2), 16);
|
|
63
|
+
}
|
|
64
|
+
return encodeBytes(bytes);
|
|
65
|
+
}
|
|
66
|
+
// Maybe suspicious?
|
|
67
|
+
async function encodeOptional(value, encodeFn) {
|
|
68
|
+
if (value === undefined || value === null) {
|
|
69
|
+
return new Uint8Array([0]); // Return empty array for undefined fields
|
|
70
|
+
} else {
|
|
71
|
+
return mkByteArray(1, await encodeFn(value));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Maybe suspicious?
|
|
75
|
+
async function encodeProtoOptional(parentValue, fieldName, value, encodeFn) {
|
|
76
|
+
if (parentValue && parentValue[fieldName] !== undefined) {
|
|
77
|
+
return mkByteArray(1, await encodeFn(value));
|
|
78
|
+
} else {
|
|
79
|
+
return new Uint8Array([0]); // Return empty array for undefined fields
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function encodeRepeated(values = [], encodeFn) {
|
|
83
|
+
const length = await encodeInt32(values.length);
|
|
84
|
+
const encodedValues = await Promise.all(values.map(encodeFn));
|
|
85
|
+
return mkByteArray(length, ...encodedValues);
|
|
86
|
+
}
|
|
87
|
+
function findSeed(nodeId, nodeSeeds) {
|
|
88
|
+
const seed = nodeSeeds.find((seed) => seed.nodeId.toString() === nodeId)?.seed;
|
|
89
|
+
return seed;
|
|
90
|
+
}
|
|
91
|
+
async function encodeIdentifier(identifier) {
|
|
92
|
+
return mkByteArray(
|
|
93
|
+
await encodeString(identifier.packageId),
|
|
94
|
+
await encodeRepeated(identifier.moduleName.split('.'), encodeString),
|
|
95
|
+
await encodeRepeated(identifier.entityName.split('.'), encodeString)
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
async function encodeMetadata(metadata) {
|
|
99
|
+
return mkByteArray(
|
|
100
|
+
Uint8Array.from([0x01]),
|
|
101
|
+
await encodeRepeated(metadata.submitterInfo?.actAs, encodeString),
|
|
102
|
+
await encodeString(metadata.submitterInfo?.commandId),
|
|
103
|
+
await encodeString(metadata.transactionUuid),
|
|
104
|
+
await encodeInt32(metadata.mediatorGroup),
|
|
105
|
+
await encodeString(metadata.synchronizerId),
|
|
106
|
+
await encodeProtoOptional(metadata, 'minLedgerEffectiveTime', metadata.minLedgerEffectiveTime, encodeInt64),
|
|
107
|
+
await encodeProtoOptional(metadata, 'maxLedgerEffectiveTime', metadata.maxLedgerEffectiveTime, encodeInt64),
|
|
108
|
+
await encodeInt64(metadata.preparationTime),
|
|
109
|
+
await encodeRepeated(metadata.inputContracts, encodeInputContract)
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
async function encodeCreateNode(create, nodeId, nodeSeeds) {
|
|
113
|
+
return create
|
|
114
|
+
? mkByteArray(
|
|
115
|
+
NODE_ENCODING_VERSION,
|
|
116
|
+
await encodeString(create.lfVersion),
|
|
117
|
+
0 /** Create node tag */,
|
|
118
|
+
await encodeOptional(findSeed(nodeId, nodeSeeds), encodeHash),
|
|
119
|
+
await encodeHexString(create.contractId),
|
|
120
|
+
await encodeString(create.packageName),
|
|
121
|
+
await encodeIdentifier(create.templateId),
|
|
122
|
+
await encodeValue(create.argument),
|
|
123
|
+
await encodeRepeated(create.signatories, encodeString),
|
|
124
|
+
await encodeRepeated(create.stakeholders, encodeString)
|
|
125
|
+
)
|
|
126
|
+
: mkByteArray();
|
|
127
|
+
}
|
|
128
|
+
async function encodeExerciseNode(exercise, nodeId, nodesDict, nodeSeeds) {
|
|
129
|
+
return mkByteArray(
|
|
130
|
+
NODE_ENCODING_VERSION,
|
|
131
|
+
await encodeString(exercise.lfVersion),
|
|
132
|
+
1 /** Exercise node tag */,
|
|
133
|
+
await encodeHash(findSeed(nodeId, nodeSeeds)),
|
|
134
|
+
await encodeHexString(exercise.contractId),
|
|
135
|
+
await encodeString(exercise.packageName),
|
|
136
|
+
await encodeIdentifier(exercise.templateId),
|
|
137
|
+
await encodeRepeated(exercise.signatories, encodeString),
|
|
138
|
+
await encodeRepeated(exercise.stakeholders, encodeString),
|
|
139
|
+
await encodeRepeated(exercise.actingParties, encodeString),
|
|
140
|
+
await encodeProtoOptional(exercise, 'interfaceId', exercise.interfaceId, encodeIdentifier),
|
|
141
|
+
await encodeString(exercise.choiceId),
|
|
142
|
+
await encodeValue(exercise.chosenValue),
|
|
143
|
+
await encodeBool(exercise.consuming),
|
|
144
|
+
await encodeProtoOptional(exercise, 'exerciseResult', exercise.exerciseResult, encodeValue),
|
|
145
|
+
await encodeRepeated(exercise.choiceObservers, encodeString),
|
|
146
|
+
await encodeRepeated(exercise.children, encodeNodeId(nodesDict, nodeSeeds))
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
async function encodeFetchNode(fetch) {
|
|
150
|
+
return mkByteArray(
|
|
151
|
+
NODE_ENCODING_VERSION,
|
|
152
|
+
await encodeString(fetch.lfVersion),
|
|
153
|
+
2 /** Fetch node tag */,
|
|
154
|
+
await encodeHexString(fetch.contractId),
|
|
155
|
+
await encodeString(fetch.packageName),
|
|
156
|
+
await encodeIdentifier(fetch.templateId),
|
|
157
|
+
await encodeRepeated(fetch.signatories, encodeString),
|
|
158
|
+
await encodeRepeated(fetch.stakeholders, encodeString),
|
|
159
|
+
await encodeProtoOptional(fetch, 'interfaceId', fetch.interfaceId, encodeIdentifier),
|
|
160
|
+
await encodeRepeated(fetch.actingParties, encodeString)
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
async function encodeRollbackNode(rollback, nodesDict, nodeSeeds) {
|
|
164
|
+
return mkByteArray(
|
|
165
|
+
NODE_ENCODING_VERSION,
|
|
166
|
+
3 /** Rollback node tag */,
|
|
167
|
+
await encodeRepeated(rollback.children, encodeNodeId(nodesDict, nodeSeeds))
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
async function encodeInputContract(contract) {
|
|
171
|
+
if (contract.contract.oneofKind === 'v1')
|
|
172
|
+
return mkByteArray(
|
|
173
|
+
await encodeInt64(contract.createdAt),
|
|
174
|
+
await sha256(await encodeCreateNode(contract.contract.v1, 'unused_node_id', []))
|
|
175
|
+
);
|
|
176
|
+
else throw new Error('Unsupported contract version');
|
|
177
|
+
}
|
|
178
|
+
async function encodeValue(value) {
|
|
179
|
+
if (value.sum.oneofKind === 'unit') {
|
|
180
|
+
return Uint8Array.from([0]); // Unit value
|
|
181
|
+
} else if (value.sum.oneofKind === 'bool') {
|
|
182
|
+
return mkByteArray(Uint8Array.from([0x01]), await encodeBool(value.sum.bool));
|
|
183
|
+
} else if (value.sum.oneofKind === 'int64') {
|
|
184
|
+
return mkByteArray(Uint8Array.from([0x02]), await encodeInt64(parseInt(value.sum.int64, 10)));
|
|
185
|
+
} else if (value.sum.oneofKind === 'numeric') {
|
|
186
|
+
return mkByteArray(Uint8Array.from([0x03]), await encodeString(value.sum.numeric));
|
|
187
|
+
} else if (value.sum.oneofKind === 'timestamp') {
|
|
188
|
+
// eslint-disable-next-line no-undef
|
|
189
|
+
return mkByteArray(Uint8Array.from([0x04]), await encodeInt64(BigInt(value.sum.timestamp)));
|
|
190
|
+
} else if (value.sum.oneofKind === 'date') {
|
|
191
|
+
return mkByteArray(Uint8Array.from([0x05]), await encodeInt32(value.sum.date));
|
|
192
|
+
} else if (value.sum.oneofKind === 'party') {
|
|
193
|
+
return mkByteArray(Uint8Array.from([0x06]), await encodeString(value.sum.party));
|
|
194
|
+
} else if (value.sum.oneofKind === 'text') {
|
|
195
|
+
return mkByteArray(Uint8Array.from([0x07]), await encodeString(value.sum.text));
|
|
196
|
+
} else if (value.sum.oneofKind === 'contractId') {
|
|
197
|
+
return mkByteArray(Uint8Array.from([0x08]), await encodeHexString(value.sum.contractId));
|
|
198
|
+
} else if (value.sum.oneofKind === 'optional') {
|
|
199
|
+
return mkByteArray(
|
|
200
|
+
Uint8Array.from([0x09]),
|
|
201
|
+
await encodeProtoOptional(value.sum.optional, 'value', value.sum.optional.value, encodeValue)
|
|
202
|
+
);
|
|
203
|
+
} else if (value.sum.oneofKind === 'list') {
|
|
204
|
+
return mkByteArray(Uint8Array.from([0x0a]), await encodeRepeated(value.sum.list.elements, encodeValue));
|
|
205
|
+
} else if (value.sum.oneofKind === 'textMap') {
|
|
206
|
+
return mkByteArray(Uint8Array.from([0x0b]), await encodeRepeated(value.sum.textMap?.entries, encodeTextMapEntry));
|
|
207
|
+
} else if (value.sum.oneofKind === 'record') {
|
|
208
|
+
return mkByteArray(
|
|
209
|
+
Uint8Array.from([0x0c]),
|
|
210
|
+
await encodeProtoOptional(value.sum.record, 'recordId', value.sum.record.recordId, encodeIdentifier),
|
|
211
|
+
await encodeRepeated(value.sum.record.fields, encodeRecordField)
|
|
212
|
+
);
|
|
213
|
+
} else if (value.sum.oneofKind === 'variant') {
|
|
214
|
+
return mkByteArray(
|
|
215
|
+
Uint8Array.from([0x0d]),
|
|
216
|
+
await encodeProtoOptional(value.sum.variant, 'variantId', value.sum.variant.variantId, encodeIdentifier),
|
|
217
|
+
await encodeString(value.sum.variant.constructor),
|
|
218
|
+
await encodeValue(value.sum.variant.value)
|
|
219
|
+
);
|
|
220
|
+
} else if (value.sum.oneofKind === 'enum') {
|
|
221
|
+
return mkByteArray(
|
|
222
|
+
Uint8Array.from([0x0e]),
|
|
223
|
+
await encodeProtoOptional(value.sum.enum, 'enumId', value.sum.enum.enumId, encodeIdentifier),
|
|
224
|
+
await encodeString(value.sum.enum.constructor)
|
|
225
|
+
);
|
|
226
|
+
} else if (value.sum.oneofKind === 'genMap') {
|
|
227
|
+
return mkByteArray(Uint8Array.from([0x0f]), await encodeRepeated(value.sum.genMap?.entries, encodeGenMapEntry));
|
|
228
|
+
}
|
|
229
|
+
throw new Error('Unsupported value type: ' + JSON.stringify(value));
|
|
230
|
+
}
|
|
231
|
+
async function encodeTextMapEntry(entry) {
|
|
232
|
+
return mkByteArray(await encodeString(entry.key), await encodeValue(entry.value));
|
|
233
|
+
}
|
|
234
|
+
async function encodeRecordField(field) {
|
|
235
|
+
return mkByteArray(await encodeOptional(field.label, encodeString), await encodeValue(field.value));
|
|
236
|
+
}
|
|
237
|
+
async function encodeGenMapEntry(entry) {
|
|
238
|
+
return mkByteArray(await encodeValue(entry.key), await encodeValue(entry.value));
|
|
239
|
+
}
|
|
240
|
+
function encodeNodeId(nodesDict, nodeSeeds) {
|
|
241
|
+
return async (nodeId) => {
|
|
242
|
+
const node = nodesDict[nodeId];
|
|
243
|
+
if (!node) {
|
|
244
|
+
throw new Error(`Node with ID ${nodeId} not found in transaction`);
|
|
245
|
+
}
|
|
246
|
+
const encodedNode = await encodeNode(node, nodesDict, nodeSeeds);
|
|
247
|
+
return sha256(encodedNode);
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
async function encodeNode(node, nodesDict, nodeSeeds) {
|
|
251
|
+
if (node.versionedNode.oneofKind === 'v1') {
|
|
252
|
+
if (node.versionedNode.v1.nodeType.oneofKind === 'create') {
|
|
253
|
+
return encodeCreateNode(node.versionedNode.v1.nodeType.create, node.nodeId, nodeSeeds);
|
|
254
|
+
} else if (node.versionedNode.v1.nodeType.oneofKind === 'exercise') {
|
|
255
|
+
return encodeExerciseNode(node.versionedNode.v1.nodeType.exercise, node.nodeId, nodesDict, nodeSeeds);
|
|
256
|
+
} else if (node.versionedNode.v1.nodeType.oneofKind === 'fetch') {
|
|
257
|
+
return encodeFetchNode(node.versionedNode.v1.nodeType.fetch);
|
|
258
|
+
} else if (node.versionedNode.v1.nodeType.oneofKind === 'rollback') {
|
|
259
|
+
return encodeRollbackNode(node.versionedNode.v1.nodeType.rollback, nodesDict, nodeSeeds);
|
|
260
|
+
}
|
|
261
|
+
throw new Error('Unsupported node type');
|
|
262
|
+
} else {
|
|
263
|
+
throw new Error(`Unsupported node version`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
function createNodesDict(preparedTransaction) {
|
|
267
|
+
const nodesDict = {};
|
|
268
|
+
const nodes = preparedTransaction.transaction?.nodes || [];
|
|
269
|
+
for (const node of nodes) {
|
|
270
|
+
nodesDict[node.nodeId] = node;
|
|
271
|
+
}
|
|
272
|
+
return nodesDict;
|
|
273
|
+
}
|
|
274
|
+
async function encodeTransaction(transaction, nodesDict, nodeSeeds) {
|
|
275
|
+
return mkByteArray(
|
|
276
|
+
await encodeString(transaction.version),
|
|
277
|
+
await encodeRepeated(transaction.roots, encodeNodeId(nodesDict, nodeSeeds))
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
async function hashTransaction(transaction, nodesDict) {
|
|
281
|
+
const encodedTransaction = await encodeTransaction(transaction, nodesDict, transaction.nodeSeeds);
|
|
282
|
+
const hash = await sha256(await mkByteArray(PREPARED_TRANSACTION_HASH_PURPOSE, encodedTransaction));
|
|
283
|
+
return hash;
|
|
284
|
+
}
|
|
285
|
+
async function hashMetadata(metadata) {
|
|
286
|
+
const hash = await sha256(await mkByteArray(PREPARED_TRANSACTION_HASH_PURPOSE, await encodeMetadata(metadata)));
|
|
287
|
+
return hash;
|
|
288
|
+
}
|
|
289
|
+
async function encodePreparedTransaction(preparedTransaction) {
|
|
290
|
+
const nodesDict = createNodesDict(preparedTransaction);
|
|
291
|
+
const transactionHash = await hashTransaction(preparedTransaction.transaction, nodesDict);
|
|
292
|
+
const metadataHash = await hashMetadata(preparedTransaction.metadata);
|
|
293
|
+
return mkByteArray(PREPARED_TRANSACTION_HASH_PURPOSE, HASHING_SCHEME_VERSION, transactionHash, metadataHash);
|
|
294
|
+
}
|
|
295
|
+
async function computePreparedTransaction(preparedTransaction) {
|
|
296
|
+
return sha256(await encodePreparedTransaction(preparedTransaction));
|
|
297
|
+
}
|
|
298
|
+
module.exports.computePreparedTransaction = computePreparedTransaction;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial, WireType } = require('@protobuf-ts/runtime');
|
|
2
|
+
const { DamlTransaction_Node } = require('./damlTransactionNode.js');
|
|
3
|
+
const { DamlTransaction_NodeSeed } = require('./damlTransactionNodeSeed.js');
|
|
4
4
|
|
|
5
5
|
class DamlTransaction$Type extends MessageType {
|
|
6
6
|
constructor() {
|
|
@@ -97,4 +97,4 @@ class DamlTransaction$Type extends MessageType {
|
|
|
97
97
|
/**
|
|
98
98
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.DamlTransaction
|
|
99
99
|
*/
|
|
100
|
-
|
|
100
|
+
module.exports.DamlTransaction = new DamlTransaction$Type();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial, WireType } = require('@protobuf-ts/runtime');
|
|
2
|
+
const { Node } = require('./node/node.js');
|
|
3
3
|
|
|
4
4
|
class DamlTransaction_Node$Type extends MessageType {
|
|
5
5
|
constructor() {
|
|
@@ -68,4 +68,4 @@ class DamlTransaction_Node$Type extends MessageType {
|
|
|
68
68
|
/**
|
|
69
69
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.DamlTransaction.Node
|
|
70
70
|
*/
|
|
71
|
-
|
|
71
|
+
module.exports.DamlTransaction_Node = new DamlTransaction_Node$Type();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial, WireType } = require('@protobuf-ts/runtime');
|
|
2
2
|
|
|
3
3
|
class DamlTransaction_NodeSeed$Type extends MessageType {
|
|
4
4
|
constructor() {
|
|
@@ -53,4 +53,4 @@ class DamlTransaction_NodeSeed$Type extends MessageType {
|
|
|
53
53
|
/**
|
|
54
54
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.DamlTransaction.NodeSeed
|
|
55
55
|
*/
|
|
56
|
-
|
|
56
|
+
module.exports.DamlTransaction_NodeSeed = new DamlTransaction_NodeSeed$Type();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial, WireType } = require('@protobuf-ts/runtime');
|
|
2
|
+
const { Value } = require('../node/value.js');
|
|
3
|
+
const { GlobalKey } = require('../node/globalKey.js');
|
|
4
4
|
|
|
5
5
|
class Metadata_GlobalKeyMappingEntry$Type extends MessageType {
|
|
6
6
|
constructor() {
|
|
@@ -50,4 +50,4 @@ class Metadata_GlobalKeyMappingEntry$Type extends MessageType {
|
|
|
50
50
|
/**
|
|
51
51
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.Metadata.GlobalKeyMappingEntry
|
|
52
52
|
*/
|
|
53
|
-
|
|
53
|
+
module.exports.Metadata_GlobalKeyMappingEntry = new Metadata_GlobalKeyMappingEntry$Type();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial, WireType } = require('@protobuf-ts/runtime');
|
|
2
|
+
const { Create } = require('../node/node.js');
|
|
3
3
|
|
|
4
4
|
class Metadata_InputContract$Type extends MessageType {
|
|
5
5
|
constructor() {
|
|
@@ -77,4 +77,4 @@ class Metadata_InputContract$Type extends MessageType {
|
|
|
77
77
|
/**
|
|
78
78
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.Metadata.InputContract
|
|
79
79
|
*/
|
|
80
|
-
|
|
80
|
+
module.exports.Metadata_InputContract = new Metadata_InputContract$Type();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial, WireType } = require('@protobuf-ts/runtime');
|
|
2
2
|
|
|
3
3
|
class Metadata_SubmitterInfo$Type extends MessageType {
|
|
4
4
|
constructor() {
|
|
@@ -59,4 +59,4 @@ class Metadata_SubmitterInfo$Type extends MessageType {
|
|
|
59
59
|
/**
|
|
60
60
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.Metadata.SubmitterInfo
|
|
61
61
|
*/
|
|
62
|
-
|
|
62
|
+
module.exports.Metadata_SubmitterInfo = new Metadata_SubmitterInfo$Type();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial, WireType } = require('@protobuf-ts/runtime');
|
|
2
|
+
const { Metadata_GlobalKeyMappingEntry } = require('./metadata/metadataGlobalKeyMappingEntry.js');
|
|
3
|
+
const { Metadata_InputContract } = require('./metadata/metadataInputContract.js');
|
|
4
|
+
const { Metadata_SubmitterInfo } = require('./metadata/metadataSubmitterInfo.js');
|
|
5
5
|
|
|
6
6
|
class Metadata$Type extends MessageType {
|
|
7
7
|
constructor() {
|
|
@@ -186,4 +186,4 @@ class Metadata$Type extends MessageType {
|
|
|
186
186
|
/**
|
|
187
187
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.Metadata
|
|
188
188
|
*/
|
|
189
|
-
|
|
189
|
+
module.exports.Metadata = new Metadata$Type();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial } = require('@protobuf-ts/runtime');
|
|
2
2
|
|
|
3
3
|
class Empty$Type extends MessageType {
|
|
4
4
|
constructor() {
|
|
@@ -33,4 +33,4 @@ class Empty$Type extends MessageType {
|
|
|
33
33
|
/**
|
|
34
34
|
* @generated MessageType for protobuf message google.protobuf.Empty
|
|
35
35
|
*/
|
|
36
|
-
|
|
36
|
+
module.exports.Empty = new Empty$Type();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const { MessageType, reflectionMergePartial, UnknownFieldHandler, WireType } = require('@protobuf-ts/runtime');
|
|
2
|
+
const { Value } = require('./value.js');
|
|
3
|
+
const { Identifier } = require('./identifier.js');
|
|
4
4
|
|
|
5
5
|
class GlobalKey$Type extends MessageType {
|
|
6
6
|
constructor() {
|
|
@@ -78,4 +78,4 @@ class GlobalKey$Type extends MessageType {
|
|
|
78
78
|
/**
|
|
79
79
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.GlobalKey
|
|
80
80
|
*/
|
|
81
|
-
|
|
81
|
+
module.exports.GlobalKey = new GlobalKey$Type();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial, WireType } = require('@protobuf-ts/runtime');
|
|
2
2
|
|
|
3
3
|
class Identifier$Type extends MessageType {
|
|
4
4
|
constructor() {
|
|
@@ -70,4 +70,4 @@ class Identifier$Type extends MessageType {
|
|
|
70
70
|
/**
|
|
71
71
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.Identifier
|
|
72
72
|
*/
|
|
73
|
-
|
|
73
|
+
module.exports.Identifier = new Identifier$Type();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial, WireType } = require('@protobuf-ts/runtime');
|
|
2
|
+
const { Value } = require('./value.js');
|
|
3
|
+
const { Identifier } = require('./identifier.js');
|
|
4
4
|
|
|
5
5
|
class Fetch$Type extends MessageType {
|
|
6
6
|
constructor() {
|
|
@@ -146,7 +146,7 @@ class Fetch$Type extends MessageType {
|
|
|
146
146
|
/**
|
|
147
147
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.transaction.v1.Fetch
|
|
148
148
|
*/
|
|
149
|
-
|
|
149
|
+
const Fetch = new Fetch$Type();
|
|
150
150
|
// @generated message type with reflection information, may provide speed optimized methods
|
|
151
151
|
class Exercise$Type extends MessageType {
|
|
152
152
|
constructor() {
|
|
@@ -367,7 +367,7 @@ class Exercise$Type extends MessageType {
|
|
|
367
367
|
/**
|
|
368
368
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.transaction.v1.Exercise
|
|
369
369
|
*/
|
|
370
|
-
|
|
370
|
+
const Exercise = new Exercise$Type();
|
|
371
371
|
// @generated message type with reflection information, may provide speed optimized methods
|
|
372
372
|
class Create$Type extends MessageType {
|
|
373
373
|
constructor() {
|
|
@@ -490,7 +490,7 @@ class Create$Type extends MessageType {
|
|
|
490
490
|
/**
|
|
491
491
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.transaction.v1.Create
|
|
492
492
|
*/
|
|
493
|
-
|
|
493
|
+
const Create = new Create$Type();
|
|
494
494
|
// @generated message type with reflection information, may provide speed optimized methods
|
|
495
495
|
class Rollback$Type extends MessageType {
|
|
496
496
|
constructor() {
|
|
@@ -540,7 +540,7 @@ class Rollback$Type extends MessageType {
|
|
|
540
540
|
/**
|
|
541
541
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.transaction.v1.Rollback
|
|
542
542
|
*/
|
|
543
|
-
|
|
543
|
+
const Rollback = new Rollback$Type();
|
|
544
544
|
// @generated message type with reflection information, may provide speed optimized methods
|
|
545
545
|
class Node$Type extends MessageType {
|
|
546
546
|
constructor() {
|
|
@@ -653,4 +653,12 @@ class Node$Type extends MessageType {
|
|
|
653
653
|
/**
|
|
654
654
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.interactive.transaction.v1.Node
|
|
655
655
|
*/
|
|
656
|
-
|
|
656
|
+
const Node = new Node$Type();
|
|
657
|
+
|
|
658
|
+
module.exports = {
|
|
659
|
+
Fetch,
|
|
660
|
+
Exercise,
|
|
661
|
+
Create,
|
|
662
|
+
Rollback,
|
|
663
|
+
Node,
|
|
664
|
+
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
const {
|
|
2
2
|
MessageType,
|
|
3
3
|
UnknownFieldHandler,
|
|
4
4
|
reflectionMergePartial,
|
|
5
5
|
WireType,
|
|
6
6
|
PbLong,
|
|
7
7
|
typeofJsonValue,
|
|
8
|
-
}
|
|
8
|
+
} = require('@protobuf-ts/runtime');
|
|
9
9
|
|
|
10
10
|
class Timestamp$Type extends MessageType {
|
|
11
11
|
constructor() {
|
|
@@ -142,4 +142,4 @@ class Timestamp$Type extends MessageType {
|
|
|
142
142
|
/**
|
|
143
143
|
* @generated MessageType for protobuf message google.protobuf.Timestamp
|
|
144
144
|
*/
|
|
145
|
-
|
|
145
|
+
module.exports.Timestamp = new Timestamp$Type();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial, WireType } = require('@protobuf-ts/runtime');
|
|
2
|
+
const { Empty } = require('./empty.js');
|
|
3
|
+
const { Identifier } = require('./identifier.js');
|
|
4
4
|
|
|
5
5
|
class Value$Type extends MessageType {
|
|
6
6
|
constructor() {
|
|
@@ -289,7 +289,7 @@ class Value$Type extends MessageType {
|
|
|
289
289
|
/**
|
|
290
290
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.Value
|
|
291
291
|
*/
|
|
292
|
-
|
|
292
|
+
const Value = new Value$Type();
|
|
293
293
|
|
|
294
294
|
class Optional$Type extends MessageType {
|
|
295
295
|
constructor() {
|
|
@@ -330,7 +330,7 @@ class Optional$Type extends MessageType {
|
|
|
330
330
|
/**
|
|
331
331
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.Optional
|
|
332
332
|
*/
|
|
333
|
-
|
|
333
|
+
const Optional = new Optional$Type();
|
|
334
334
|
|
|
335
335
|
class List$Type extends MessageType {
|
|
336
336
|
constructor() {
|
|
@@ -380,7 +380,7 @@ class List$Type extends MessageType {
|
|
|
380
380
|
/**
|
|
381
381
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.List
|
|
382
382
|
*/
|
|
383
|
-
|
|
383
|
+
const List = new List$Type();
|
|
384
384
|
|
|
385
385
|
class TextMap$Type extends MessageType {
|
|
386
386
|
constructor() {
|
|
@@ -434,7 +434,7 @@ class TextMap$Type extends MessageType {
|
|
|
434
434
|
/**
|
|
435
435
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.TextMap
|
|
436
436
|
*/
|
|
437
|
-
|
|
437
|
+
const TextMap = new TextMap$Type();
|
|
438
438
|
|
|
439
439
|
class TextMap_Entry$Type extends MessageType {
|
|
440
440
|
constructor() {
|
|
@@ -484,7 +484,7 @@ class TextMap_Entry$Type extends MessageType {
|
|
|
484
484
|
/**
|
|
485
485
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.TextMap.Entry
|
|
486
486
|
*/
|
|
487
|
-
|
|
487
|
+
const TextMap_Entry = new TextMap_Entry$Type();
|
|
488
488
|
|
|
489
489
|
class GenMap$Type extends MessageType {
|
|
490
490
|
constructor() {
|
|
@@ -538,7 +538,7 @@ class GenMap$Type extends MessageType {
|
|
|
538
538
|
/**
|
|
539
539
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.GenMap
|
|
540
540
|
*/
|
|
541
|
-
|
|
541
|
+
const GenMap = new GenMap$Type();
|
|
542
542
|
|
|
543
543
|
class GenMap_Entry$Type extends MessageType {
|
|
544
544
|
constructor() {
|
|
@@ -588,7 +588,7 @@ class GenMap_Entry$Type extends MessageType {
|
|
|
588
588
|
/**
|
|
589
589
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.GenMap.Entry
|
|
590
590
|
*/
|
|
591
|
-
|
|
591
|
+
const GenMap_Entry = new GenMap_Entry$Type();
|
|
592
592
|
|
|
593
593
|
class Record$Type extends MessageType {
|
|
594
594
|
constructor() {
|
|
@@ -649,7 +649,7 @@ class Record$Type extends MessageType {
|
|
|
649
649
|
/**
|
|
650
650
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.Record
|
|
651
651
|
*/
|
|
652
|
-
|
|
652
|
+
const Record = new Record$Type();
|
|
653
653
|
|
|
654
654
|
class RecordField$Type extends MessageType {
|
|
655
655
|
constructor() {
|
|
@@ -704,7 +704,7 @@ class RecordField$Type extends MessageType {
|
|
|
704
704
|
/**
|
|
705
705
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.RecordField
|
|
706
706
|
*/
|
|
707
|
-
|
|
707
|
+
const RecordField = new RecordField$Type();
|
|
708
708
|
|
|
709
709
|
class Variant$Type extends MessageType {
|
|
710
710
|
constructor() {
|
|
@@ -766,7 +766,7 @@ class Variant$Type extends MessageType {
|
|
|
766
766
|
/**
|
|
767
767
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.Variant
|
|
768
768
|
*/
|
|
769
|
-
|
|
769
|
+
const Variant = new Variant$Type();
|
|
770
770
|
|
|
771
771
|
class Enum$Type extends MessageType {
|
|
772
772
|
constructor() {
|
|
@@ -821,4 +821,18 @@ class Enum$Type extends MessageType {
|
|
|
821
821
|
/**
|
|
822
822
|
* @generated MessageType for protobuf message com.daml.ledger.api.v2.Enum
|
|
823
823
|
*/
|
|
824
|
-
|
|
824
|
+
const Enum = new Enum$Type();
|
|
825
|
+
|
|
826
|
+
module.exports = {
|
|
827
|
+
Value,
|
|
828
|
+
Optional,
|
|
829
|
+
List,
|
|
830
|
+
TextMap,
|
|
831
|
+
TextMap_Entry,
|
|
832
|
+
GenMap,
|
|
833
|
+
GenMap_Entry,
|
|
834
|
+
Record,
|
|
835
|
+
RecordField,
|
|
836
|
+
Variant,
|
|
837
|
+
Enum,
|
|
838
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
const { MessageType, UnknownFieldHandler, reflectionMergePartial, WireType } = require('@protobuf-ts/runtime');
|
|
2
|
+
const { DamlTransaction } = require('./damlTransaction.js');
|
|
3
|
+
const { Metadata } = require('./metadata.js');
|
|
4
4
|
|
|
5
5
|
class PreparedTransaction$Type extends MessageType {
|
|
6
6
|
constructor() {
|
|
@@ -63,4 +63,4 @@ class PreparedTransaction$Type extends MessageType {
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
module.exports.PreparedTransaction = new PreparedTransaction$Type();
|