From 8d21cd8a04cfd772bee01f1b7f7ba04ab7bc2ee5 Mon Sep 17 00:00:00 2001 From: "Luiz Gomes - LuizAsFight.eth" <8636507+LuizAsFight@users.noreply.github.com> Date: Thu, 15 Jun 2023 00:54:00 -0300 Subject: [PATCH] fix: add messageId to input message decoder (#1066) --- .changeset/smooth-cameras-study.md | 6 ++++++ .../fuel-gauge/src/coverage-contract.test.ts | 3 +++ packages/providers/src/message.ts | 1 + packages/providers/src/operations.graphql | 1 + packages/providers/src/provider.test.ts | 5 +++++ packages/providers/src/provider.ts | 2 ++ .../providers/src/transaction-request/input.ts | 11 ++++++++--- packages/transactions/src/coders/input.test.ts | 2 ++ packages/transactions/src/coders/input.ts | 16 +++++++++++----- 9 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 .changeset/smooth-cameras-study.md diff --git a/.changeset/smooth-cameras-study.md b/.changeset/smooth-cameras-study.md new file mode 100644 index 00000000000..fe5b637f6e4 --- /dev/null +++ b/.changeset/smooth-cameras-study.md @@ -0,0 +1,6 @@ +--- +"@fuel-ts/providers": patch +"@fuel-ts/transactions": patch +--- + +fix: add messageId to input message decoder diff --git a/packages/fuel-gauge/src/coverage-contract.test.ts b/packages/fuel-gauge/src/coverage-contract.test.ts index 333ce7a8302..417687a1e0e 100644 --- a/packages/fuel-gauge/src/coverage-contract.test.ts +++ b/packages/fuel-gauge/src/coverage-contract.test.ts @@ -385,6 +385,7 @@ describe('Coverage Contract', () => { const EXPECTED_MESSAGES_A: Message[] = [ { + messageId: '0x98fcab1a57eaf34c0a2c743f6537f125d3ae46d59cd118a41016321f631584b2', sender: WALLET_B.address, recipient: WALLET_A.address, nonce: bn(1), @@ -398,6 +399,7 @@ describe('Coverage Contract', () => { ]; const EXPECTED_MESSAGES_B: Message[] = [ { + messageId: '0x5ef913b1853aa1ae27afd51b509dbcb9961fb3b588b2c694a0c526c6034a2157', sender: WALLET_A.address, recipient: WALLET_B.address, nonce: bn('1017517292834129547'), @@ -430,6 +432,7 @@ describe('Coverage Contract', () => { ); const message: Message = { + messageId: '0x98fcab1a57eaf34c0a2c743f6537f125d3ae46d59cd118a41016321f631584b2', sender: sender.address, recipient: recipient.address, nonce: bn(1), diff --git a/packages/providers/src/message.ts b/packages/providers/src/message.ts index 383d866646c..835543f403c 100644 --- a/packages/providers/src/message.ts +++ b/packages/providers/src/message.ts @@ -9,6 +9,7 @@ import { GqlMessageStatus as MessageStatus } from './__generated__/operations'; * A Fuel message */ export type Message = { + messageId: BytesLike; sender: AbstractAddress; recipient: AbstractAddress; nonce: BN; diff --git a/packages/providers/src/operations.graphql b/packages/providers/src/operations.graphql index c546e7986c9..a7d5bec2757 100644 --- a/packages/providers/src/operations.graphql +++ b/packages/providers/src/operations.graphql @@ -67,6 +67,7 @@ fragment messageFragment on Message { nonce messageStatus: status daHeight + messageId } fragment messageProofFragment on MessageProof { diff --git a/packages/providers/src/provider.test.ts b/packages/providers/src/provider.test.ts index 0578361657a..abb98bb3a51 100644 --- a/packages/providers/src/provider.test.ts +++ b/packages/providers/src/provider.test.ts @@ -313,6 +313,7 @@ describe('Provider', () => { }); const MessageInput: MessageTransactionRequestInput = { type: InputType.Message, + messageId: NativeAssetId, amount: 100, sender: NativeAssetId, recipient: NativeAssetId, @@ -342,6 +343,7 @@ describe('Provider', () => { ]; const MessageInput: MessageTransactionRequestInput = { type: InputType.Message, + messageId: NativeAssetId, amount: 100, sender: NativeAssetId, recipient: NativeAssetId, @@ -402,6 +404,7 @@ describe('Provider', () => { ]; const MessageInput: MessageTransactionRequestInput = { type: InputType.Message, + messageId: NativeAssetId, amount: 100, sender: NativeAssetId, recipient: NativeAssetId, @@ -477,6 +480,7 @@ describe('Provider', () => { ]; const MessageInput: MessageTransactionRequestInput = { type: InputType.Message, + messageId: NativeAssetId, amount: 100, sender: NativeAssetId, recipient: NativeAssetId, @@ -537,6 +541,7 @@ describe('Provider', () => { ]; const MessageInput: MessageTransactionRequestInput = { type: InputType.Message, + messageId: NativeAssetId, amount: 100, sender: NativeAssetId, recipient: NativeAssetId, diff --git a/packages/providers/src/provider.ts b/packages/providers/src/provider.ts index 3ac6fe9d083..733e01df1a9 100644 --- a/packages/providers/src/provider.ts +++ b/packages/providers/src/provider.ts @@ -549,6 +549,7 @@ export default class Provider { } return { + messageId: resource.messageId, sender: Address.fromAddressOrString(resource.sender), recipient: Address.fromAddressOrString(resource.recipient), nonce: bn(resource.nonce), @@ -741,6 +742,7 @@ export default class Provider { const messages = result.messages.edges!.map((edge) => edge!.node!); return messages.map((message) => ({ + messageId: message.messageId, sender: Address.fromAddressOrString(message.sender), recipient: Address.fromAddressOrString(message.recipient), nonce: bn(message.nonce), diff --git a/packages/providers/src/transaction-request/input.ts b/packages/providers/src/transaction-request/input.ts index 5913690a003..55c2ea9bcc9 100644 --- a/packages/providers/src/transaction-request/input.ts +++ b/packages/providers/src/transaction-request/input.ts @@ -39,15 +39,18 @@ export type CoinTransactionRequestInput = { export type MessageTransactionRequestInput = { type: InputType.Message; - /** Amount of coins */ - amount: BigNumberish; + /** Address of recipient */ + messageId: BytesLike; /** Address of sender */ sender: BytesLike; - /** Address of sender */ + /** Address of recipient */ recipient: BytesLike; + /** Amount of coins */ + amount: BigNumberish; + /** Index of witness that authorizes the message */ witnessIndex: number; @@ -123,8 +126,10 @@ export const inputify = (value: TransactionRequestInput): Input => { const predicate = arrayify(value.predicate ?? '0x'); const predicateData = arrayify(value.predicateData ?? '0x'); const data = arrayify(value.data ?? '0x'); + return { type: InputType.Message, + messageId: hexlify(value.messageId), sender: hexlify(value.sender), recipient: hexlify(value.recipient), amount: bn(value.amount), diff --git a/packages/transactions/src/coders/input.test.ts b/packages/transactions/src/coders/input.test.ts index fbe751c2e10..318a78d2548 100644 --- a/packages/transactions/src/coders/input.test.ts +++ b/packages/transactions/src/coders/input.test.ts @@ -117,6 +117,7 @@ describe('InputCoder', () => { it('Can encode Message Id', () => { const input: InputMessage = { type: InputType.Message, + messageId: '0xa2be1e294136b22c8168159892eb26b2503232f1e711e2e6fbb7f8a8b50633b7', amount: bn(1000), sender: '0xf1e92c42b90934aa6372e30bc568a326f6e66a1a0288595e6e3fbd392a4f3e6e', recipient: '0xef86afa9696cf0dc6385e2c407a6e159a1103cefb7e2ae0636fb33d3cb2a9e4a', @@ -139,6 +140,7 @@ describe('InputCoder', () => { it('Can encode Message', () => { const input: Input = { type: InputType.Message, + messageId: '0xa2be1e294136b22c8168159892eb26b2503232f1e711e2e6fbb7f8a8b50633b7', amount: bn(1000), sender: '0xf1e92c42b90934aa6372e30bc568a326f6e66a1a0288595e6e3fbd392a4f3e6e', recipient: '0xef86afa9696cf0dc6385e2c407a6e159a1103cefb7e2ae0636fb33d3cb2a9e4a', diff --git a/packages/transactions/src/coders/input.ts b/packages/transactions/src/coders/input.ts index 454f271781b..38a98ee5757 100644 --- a/packages/transactions/src/coders/input.ts +++ b/packages/transactions/src/coders/input.ts @@ -196,15 +196,18 @@ export class InputContractCoder extends Coder { export type InputMessage = { type: InputType.Message; - /** Amount of coins */ - amount: BN; + /** ID of Message */ + messageId: string; /** Address of sender */ sender: string; - /** Address of sender */ + /** Address of recipient */ recipient: string; + /** Amount of coins */ + amount: BN; + /** data of message */ data: string; @@ -249,8 +252,8 @@ export class InputMessageCoder extends Coder { encode(value: InputMessage): Uint8Array { const parts: Uint8Array[] = []; const encodedData = new ByteArrayCoder(value.dataLength).encode(value.data); - const mId = InputMessageCoder.getMessageId(value); - parts.push(new ByteArrayCoder(32).encode(mId)); + const messageId = InputMessageCoder.getMessageId(value); + parts.push(new ByteArrayCoder(32).encode(messageId)); parts.push(new ByteArrayCoder(32).encode(value.sender)); parts.push(new ByteArrayCoder(32).encode(value.recipient)); parts.push(new U64Coder().encode(value.amount)); @@ -278,6 +281,8 @@ export class InputMessageCoder extends Coder { let decoded; let o = offset; + [decoded, o] = new B256Coder().decode(data, o); + const messageId = decoded; [decoded, o] = new B256Coder().decode(data, o); const sender = decoded; [decoded, o] = new B256Coder().decode(data, o); @@ -304,6 +309,7 @@ export class InputMessageCoder extends Coder { return [ { type: InputType.Message, + messageId, sender, recipient, amount,