Skip to content

Commit 767e738

Browse files
Freeze / unfreeze etc.
1 parent 0f0ff4a commit 767e738

File tree

7 files changed

+125
-51
lines changed

7 files changed

+125
-51
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@multiversx/sdk-core",
3-
"version": "11.3.0",
3+
"version": "11.4.0-alpha.0",
44
"description": "MultiversX SDK for JavaScript and TypeScript",
55
"main": "out/index.js",
66
"types": "out/index.d.js",

src/index.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
require('./globals');
22

3-
export * from "./interface";
4-
export * from "./interfaceOfNetwork";
5-
export * from "./errors";
63
export * from "./account";
74
export * from "./address";
85
export * from "./asyncTimer";
6+
export * from "./errors";
97
export * from "./gasEstimator";
10-
export * from "./transaction";
11-
export * from "./transactionFactory";
12-
export * from "./transactionPayload";
13-
export * from "./transactionWatcher";
8+
export * from "./interface";
9+
export * from "./interfaceOfNetwork";
1410
export * from "./logger";
1511
export * from "./networkParams";
12+
export * from "./relayedTransactionV1Builder";
13+
export * from "./relayedTransactionV2Builder";
1614
export * from "./signableMessage";
17-
export * from "./utils";
15+
export * from "./smartcontracts";
1816
export * from "./tokenPayment";
1917
export * from "./tokenTransferBuilders";
20-
export * from "./smartcontracts";
21-
export * from "./relayedTransactionV1Builder";
22-
export * from "./relayedTransactionV2Builder";
18+
export * from "./transaction";
19+
export * from "./transactionFactory";
20+
export * from "./transactionPayload";
21+
export * from "./transactionWatcher";
22+
export * from "./transfersFactory";
23+
export * from "./utils";
24+

src/tokenOperations/tokenOperationsFactory.test.net.spec.ts

Lines changed: 79 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import { assert } from "chai";
22
import { AsyncTimer } from "../asyncTimer";
3+
import { GasEstimator } from "../gasEstimator";
34
import { INetworkConfig, ITransactionOnNetwork } from "../interfaceOfNetwork";
45
import { loadTestWallets, TestWallet } from "../testutils";
56
import { createTestnetProvider, INetworkProvider } from "../testutils/networkProviders";
7+
import { TokenPayment } from "../tokenPayment";
68
import { Transaction } from "../transaction";
79
import { TransactionWatcher } from "../transactionWatcher";
10+
import { TransfersFactory } from "../transfersFactory";
811
import { TokenOperationsFactory } from "./tokenOperationsFactory";
912
import { TokenOperationsFactoryConfig } from "./tokenOperationsFactoryConfig";
1013
import { TokenOperationsOutcomeParser } from "./tokenOperationsOutcomeParser";
@@ -16,6 +19,7 @@ describe("test factory on testnet", function () {
1619
let network: INetworkConfig;
1720
let factory: TokenOperationsFactory;
1821
let parser: TokenOperationsOutcomeParser;
22+
let transfersFactory: TransfersFactory;
1923

2024
before(async function () {
2125
console.log(`> ${this.currentTest?.title} ...`);
@@ -27,6 +31,7 @@ describe("test factory on testnet", function () {
2731
network = await provider.getNetworkConfig();
2832
factory = new TokenOperationsFactory(new TokenOperationsFactoryConfig(network.ChainID));
2933
parser = new TokenOperationsOutcomeParser();
34+
transfersFactory = new TransfersFactory(new GasEstimator());
3035
});
3136

3237
it("should issue fungible, mint, burn", async function () {
@@ -99,8 +104,8 @@ describe("test factory on testnet", function () {
99104
assert.equal(tx4Outcome.burntSupply, "50");
100105
});
101106

102-
it("should issue fungible, pause, unpause, freeze, unfreeze", async function () {
103-
this.timeout(120000);
107+
it("should issue fungible, pause, unpause", async function () {
108+
this.timeout(240000);
104109
await frank.sync(provider);
105110

106111
// Issue
@@ -148,17 +153,87 @@ describe("test factory on testnet", function () {
148153
const tx3OnNetwork = await processTransaction(frank, tx3, "tx3");
149154
const _tx3Outcome = parser.parseUnpause(tx3OnNetwork);
150155

156+
// Send some tokens to Grace
157+
const tx4 = transfersFactory.createESDTTransfer({
158+
payment: TokenPayment.fungibleFromBigInteger(tokenIdentifier, 10),
159+
sender: frank.account.address,
160+
receiver: grace.account.address,
161+
chainID: network.ChainID,
162+
nonce: frank.account.nonce
163+
});
164+
165+
const _tx4OnNetwork = await processTransaction(frank, tx4, "tx4");
166+
});
167+
168+
it("should issue fungible, freeze, unfreeze", async function () {
169+
this.timeout(240000);
170+
await frank.sync(provider);
171+
172+
// Issue
173+
const tx1 = factory.issueFungible({
174+
issuer: frank.address,
175+
tokenName: "FRANK",
176+
tokenTicker: "FRANK",
177+
initialSupply: 100,
178+
numDecimals: 0,
179+
canFreeze: true,
180+
canWipe: true,
181+
canPause: true,
182+
canMint: true,
183+
canBurn: true,
184+
canChangeOwner: true,
185+
canUpgrade: true,
186+
canAddSpecialRoles: true,
187+
nonce: frank.account.nonce
188+
});
189+
190+
const tx1OnNetwork = await processTransaction(frank, tx1, "tx1");
191+
const tx1Outcome = parser.parseIssueFungible(tx1OnNetwork);
192+
const tokenIdentifier = tx1Outcome.tokenIdentifier;
193+
assert.isTrue(tokenIdentifier.includes("FRANK"));
194+
195+
// Send some tokens to Grace
196+
const tx2 = transfersFactory.createESDTTransfer({
197+
payment: TokenPayment.fungibleFromBigInteger(tokenIdentifier, 10),
198+
sender: frank.account.address,
199+
receiver: grace.account.address,
200+
chainID: network.ChainID,
201+
nonce: frank.account.nonce
202+
});
203+
204+
const _tx2OnNetwork = await processTransaction(frank, tx2, "tx2");
205+
151206
// Freeze
152-
const tx4 = factory.freeze({
207+
const tx3 = factory.freeze({
153208
freeze: true,
154209
manager: frank.address,
155210
user: grace.address,
156211
tokenIdentifier: tokenIdentifier,
157212
nonce: frank.account.nonce
158213
});
159214

215+
const tx3OnNetwork = await processTransaction(frank, tx3, "tx3");
216+
const tx3Outcome = parser.parseFreeze(tx3OnNetwork);
217+
assert.equal(tx3Outcome.userAddress, grace.address.bech32());
218+
assert.equal(tx3Outcome.tokenIdentifier, tokenIdentifier);
219+
assert.equal(tx3Outcome.nonce, 0);
220+
assert.equal(tx3Outcome.balance, "10");
221+
222+
// Unfreeze
223+
const tx4 = factory.freeze({
224+
unfreeze: true,
225+
manager: frank.address,
226+
user: grace.address,
227+
tokenIdentifier: tokenIdentifier,
228+
nonce: frank.account.nonce
229+
});
230+
160231
const tx4OnNetwork = await processTransaction(frank, tx4, "tx4");
161-
// const _tx4Outcome = parser.parseFreeze(tx4OnNetwork);
232+
const tx4Outcome = parser.parseUnfreeze(tx4OnNetwork);
233+
assert.equal(tx4Outcome.userAddress, grace.address.bech32());
234+
assert.equal(tx4Outcome.tokenIdentifier, tokenIdentifier);
235+
assert.equal(tx4Outcome.nonce, 0);
236+
assert.equal(tx4Outcome.balance, "10");
162237
});
163238

164239
it("should issue and create NFT", async function () {

src/tokenOperations/tokenOperationsOutcomeParser.ts

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Address } from "../address";
12
import { ErrCannotParseTransactionOutcome } from "../errors";
23
import { IAddress } from "../interface";
34
import { bufferToBigInt } from "./codec";
@@ -65,15 +66,12 @@ export interface IBurnOutcome {
6566
export interface IPausingOutcome {
6667
}
6768

68-
// export interface IFreezingOutcome {
69-
// userAddress: IAddress;
70-
// tokenIdentifier: string;
71-
// nonce: INonce;
72-
// balance: string;
73-
// }
74-
75-
// export interface IEmptyOutcome {
76-
// }
69+
export interface IFreezingOutcome {
70+
userAddress: string;
71+
tokenIdentifier: string;
72+
nonce: number;
73+
balance: string;
74+
}
7775

7876
export class TokenOperationsOutcomeParser {
7977
parseIssueFungible(transaction: ITransactionOnNetwork): IESDTIssueOutcome {
@@ -154,29 +152,27 @@ export class TokenOperationsOutcomeParser {
154152
return {};
155153
}
156154

155+
parseFreeze(transaction: ITransactionOnNetwork): IFreezingOutcome {
156+
this.ensureNoError(transaction);
157+
158+
const event = this.findSingleEventByIdentifier(transaction, "ESDTFreeze");
159+
const tokenIdentifier = event.topics[0]?.valueOf().toString();
160+
const nonce = bufferToBigInt(event.topics[1]?.valueOf()).toNumber() || 0;
161+
const balance = bufferToBigInt(event.topics[2]?.valueOf()).toString();
162+
const userAddress = Address.fromBuffer(event.topics[3]?.valueOf()).toString();
163+
return { userAddress, tokenIdentifier, nonce, balance };
164+
}
157165

158-
// export class ESDTFreezingParser extends BaseParser<IFreezingOutcome> {
159-
// protected parseSuccessfulOutcome(events: ITransactionEvent[]): IFreezingOutcome | null {
160-
// for (const event of events) {
161-
// if (event.identifier == "ESDTFreeze" || event.identifier == "ESDTUnFreeze") {
162-
// let balance = bufferToBigInt(event.topics[2].valueOf());
163-
// if (balance.isNaN()) {
164-
// balance = new BigNumber(0);
165-
// }
166-
167-
// return {
168-
// userAddress: new Address(event.topics[3].valueOf()),
169-
// tokenIdentifier: event.topics[0].valueOf().toString(),
170-
// nonce: bufferToBigInt(event.topics[1].valueOf()).toNumber() || 0,
171-
// balance: balance.toString()
172-
// };
173-
// }
174-
// }
175-
176-
// return null;
177-
// }
178-
// }
166+
parseUnfreeze(transaction: ITransactionOnNetwork): IFreezingOutcome {
167+
this.ensureNoError(transaction);
179168

169+
const event = this.findSingleEventByIdentifier(transaction, "ESDTUnFreeze");
170+
const tokenIdentifier = event.topics[0]?.valueOf().toString();
171+
const nonce = bufferToBigInt(event.topics[1]?.valueOf()).toNumber() || 0;
172+
const balance = bufferToBigInt(event.topics[2]?.valueOf()).toString();
173+
const userAddress = Address.fromBuffer(event.topics[3]?.valueOf()).toString();
174+
return { userAddress, tokenIdentifier, nonce, balance };
175+
}
180176

181177
private ensureNoError(transaction: ITransactionOnNetwork) {
182178
for (const event of transaction.logs.events) {

src/transactionFactory.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,3 @@ export class TransactionFactory {
128128
});
129129
}
130130
}
131-
132-
export class TransfersFactory extends TransactionFactory {
133-
}

src/transfersFactory.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { TransactionFactory } from "./transactionFactory";
2+
3+
export class TransfersFactory extends TransactionFactory {
4+
}

0 commit comments

Comments
 (0)