Skip to content

Commit

Permalink
chore: default TestMessage to be spendable (#2891)
Browse files Browse the repository at this point in the history
  • Loading branch information
Torres-ssf committed Aug 6, 2024
1 parent 1a73ae3 commit 896add9
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 19 deletions.
5 changes: 5 additions & 0 deletions .changeset/rude-goats-smile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@fuel-ts/account": patch
---

chore: default TestMessage to be spendable
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ErrorCode } from '@fuel-ts/errors';
import { expectToThrowFuelError, safeExec } from '@fuel-ts/errors/test-utils';
import type { AbstractAddress } from '@fuel-ts/interfaces';
import { bn, toNumber } from '@fuel-ts/math';
import { defaultSnapshotConfigs, hexlify } from '@fuel-ts/utils';
import { arrayify, defaultSnapshotConfigs, hexlify } from '@fuel-ts/utils';
import { waitUntilUnreachable } from '@fuel-ts/utils/test-utils';

import { Provider } from '../providers';
Expand All @@ -13,6 +13,7 @@ import { WalletUnlocked } from '../wallet';
import { AssetId } from './asset-id';
import * as launchNodeMod from './launchNode';
import { setupTestProviderAndWallets } from './setup-test-provider-and-wallets';
import type { ChainMessage } from './test-message';
import { TestMessage } from './test-message';

const BaseAssetId = defaultSnapshotConfigs.chainConfig.consensus_parameters.V1.base_asset_id;
Expand Down Expand Up @@ -128,12 +129,16 @@ describe('setupTestProviderAndWallets', () => {

it('can be given custom asset id and message', async () => {
const [assetId] = AssetId.random();
const testMessage = new TestMessage();
const spendableMessage = new TestMessage();
const dataMessage = new TestMessage({
data: '0x2bca2aa612b304ece5b25988818dd7234e049913233eb918c11638af89d575be',
});
const testMessages = [spendableMessage, dataMessage];
using providerAndWallets = await setupTestProviderAndWallets({
walletsConfig: {
count: 1,
assets: [assetId],
messages: [testMessage],
messages: testMessages,
},
});

Expand All @@ -156,17 +161,19 @@ describe('setupTestProviderAndWallets', () => {
expect(coin2.amount.toNumber()).toBe(10_000_000_000);

const { messages } = await wallet.getMessages();
expect(messages.length).toBe(1);

const [message] = messages;
const chainMessage = testMessage.toChainMessage(wallet.address);

expect(message.amount.toNumber()).toEqual(chainMessage.amount);
expect(message.recipient.toB256()).toEqual(chainMessage.recipient);
expect(message.sender.toB256()).toEqual(chainMessage.sender);
expect(toNumber(message.daHeight)).toEqual(toNumber(chainMessage.da_height));
expect(message.data.toString()).toEqual(toNumber(chainMessage.data).toString());
expect(message.nonce).toEqual(chainMessage.nonce);
expect(messages.length).toBe(2);

messages.forEach((message) => {
const match = testMessages.find((tm) => tm.nonce === message.nonce);
const chainMessage = match?.toChainMessage(wallet.address) as ChainMessage;

expect(message.amount.toNumber()).toEqual(chainMessage.amount);
expect(message.recipient.toB256()).toEqual(chainMessage.recipient);
expect(message.sender.toB256()).toEqual(chainMessage.sender);
expect(toNumber(message.daHeight)).toEqual(toNumber(chainMessage.da_height));
expect(message.data).toStrictEqual(arrayify(`0x${chainMessage.data}`));
expect(message.nonce).toEqual(chainMessage?.nonce);
});
});

it('can return multiple wallets with multiple assets, coins and amounts', async () => {
Expand Down Expand Up @@ -260,7 +267,7 @@ describe('setupTestProviderAndWallets', () => {
expect(customWalletMessage.recipient.toB256()).toEqual(message.recipient);
expect(customWalletMessage.sender.toB256()).toEqual(message.sender);
expect(toNumber(customWalletMessage.daHeight)).toEqual(toNumber(message.da_height));
expect(customWalletMessage.data.toString()).toEqual(toNumber(message.data).toString());
expect(customWalletMessage.data.toString()).toEqual(message.data.toString());
expect(customWalletMessage.nonce).toEqual(message.nonce);
});
});
10 changes: 7 additions & 3 deletions packages/account/src/test-utils/test-message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ interface TestMessageSpecs {
da_height: number;
}

export type ChainMessage = SnapshotConfigs['stateConfig']['messages'][0];

export class TestMessage {
public readonly sender: AbstractAddress;
public readonly recipient: AbstractAddress;
Expand All @@ -33,7 +35,7 @@ export class TestMessage {
recipient = Address.fromRandom(),
nonce = hexlify(randomBytes(32)),
amount = 1_000_000,
data = '02',
data = '', // Will default to empty data in order to be a spendable message
da_height = 0,
}: Partial<TestMessageSpecs> = {}) {
this.sender = sender;
Expand All @@ -44,13 +46,15 @@ export class TestMessage {
this.da_height = da_height;
}

toChainMessage(recipient?: AbstractAddress): SnapshotConfigs['stateConfig']['messages'][0] {
toChainMessage(recipient?: AbstractAddress): ChainMessage {
// Fuel-core throwns error for message data prefixed with 0x within the stateConfig.json file
const data = /^0x/.test(this.data) ? this.data.replace(/^0x/, '') : this.data;
return {
sender: this.sender.toB256(),
recipient: recipient?.toB256() ?? this.recipient.toB256(),
nonce: this.nonce,
amount: bn(this.amount).toNumber(),
data: this.data,
data,
da_height: this.da_height,
};
}
Expand Down
2 changes: 1 addition & 1 deletion packages/fuel-gauge/src/transaction-summary.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -583,7 +583,7 @@ describe('TransactionSummary', () => {
});

it('should ensure that transfer operations are assembled correctly if only seeded with a MessageInput (SPENDABLE MESSAGE)', async () => {
const testMessage = new TestMessage({ amount: 1000000, data: '' });
const testMessage = new TestMessage({ amount: 1000000 });

using launched = await launchTestNode({
contractsConfigs: [
Expand Down

0 comments on commit 896add9

Please sign in to comment.