Skip to content

Commit c7f8614

Browse files
Merge pull request #581 from Concordium/SPO-34/init-contract-handler
initial attempt for initContract
2 parents 1e595fb + 45bc707 commit c7f8614

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

packages/sdk/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
- deserialize function for DeployModulePayload implemented instead of throwing an exception of not supporting deserialize
88

9+
- deserialize function for InitContractPayload implemented instead of throwing an exception of not supporting deserialize
10+
911
## 11.0.0
1012

1113
### Fixed

packages/sdk/src/accountTransactions.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import {
4040
import * as AccountAddress from './types/AccountAddress.js';
4141
import * as CcdAmount from './types/CcdAmount.js';
4242
import { DataBlob } from './types/DataBlob.js';
43+
import * as InitName from './types/InitName.js';
4344
import * as Parameter from './types/Parameter.js';
4445
import * as ReceiveName from './types/ReceiveName.js';
4546

@@ -259,8 +260,26 @@ export class InitContractHandler implements AccountTransactionHandler<InitContra
259260
return Buffer.concat([serializedAmount, serializedModuleRef, serializedInitName, serializedParameters]);
260261
}
261262

262-
deserialize(): InitContractPayload {
263-
throw new Error('deserialize not supported');
263+
deserialize(serializePayload: Cursor): InitContractPayload {
264+
const amount = serializePayload.read(8).readBigUInt64BE(0);
265+
const moduleRef = serializePayload.read(32);
266+
267+
const initNameLength = serializePayload.read(2).readUInt16BE(0);
268+
const initName = serializePayload.read(initNameLength);
269+
const initNameAfterConversion = InitName.fromString(initName.toString('utf8'));
270+
271+
const paramLength = serializePayload.read(2).readUInt16BE(0);
272+
const param = serializePayload.read(paramLength);
273+
const paramBuffer = Parameter.fromBuffer(param.buffer);
274+
275+
return {
276+
amount: CcdAmount.fromMicroCcd(amount),
277+
moduleRef: ModuleReference.fromBuffer(moduleRef),
278+
initName: ContractName.fromInitName(initNameAfterConversion),
279+
param: paramBuffer,
280+
//The execution energy cannot be recovered as it is not part of the payload serialization
281+
maxContractExecutionEnergy: Energy.create(0n),
282+
};
264283
}
265284

266285
toJSON(payload: InitContractPayload): InitContractPayloadJSON {

packages/sdk/test/ci/deserialization.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@ import {
99
CIS2,
1010
CcdAmount,
1111
ContractAddress,
12+
ContractName,
1213
DataBlob,
1314
DeployModulePayload,
15+
Energy,
16+
InitContractPayload,
17+
ModuleReference,
18+
Parameter,
1419
RegisterDataPayload,
1520
SequenceNumber,
1621
SimpleTransferPayload,
@@ -89,6 +94,21 @@ test('test deserialize DeployModule ', () => {
8994
deserializeAccountTransactionBase(AccountTransactionType.DeployModule, payload);
9095
});
9196

97+
test('test deserialize InitContract ', () => {
98+
const moduleRef = ModuleReference.fromHexString('44434352ddba724930d6b1b09cd58bd1fba6ad9714cf519566d5fe72d80da0d1');
99+
const contractName = ContractName.fromStringUnchecked('weather');
100+
101+
const deserializePayload: InitContractPayload = {
102+
amount: CcdAmount.zero(),
103+
moduleRef: moduleRef,
104+
initName: contractName,
105+
param: Parameter.fromHexString('0a'),
106+
maxContractExecutionEnergy: Energy.create(0),
107+
};
108+
109+
deserializeAccountTransactionBase(AccountTransactionType.InitContract, deserializePayload);
110+
});
111+
92112
test('Expired transactions can be deserialized', () => {
93113
const payload: SimpleTransferPayload = {
94114
amount: CcdAmount.fromMicroCcd(5100000),

0 commit comments

Comments
 (0)