sdk/js: add circleIntegration parsing
This commit is contained in:
parent
21fc11f5bc
commit
826c9939d1
|
@ -0,0 +1,41 @@
|
|||
import { describe, expect, test } from "@jest/globals";
|
||||
import {
|
||||
CircleIntegrationDeposit,
|
||||
CircleIntegrationPayload,
|
||||
parseCircleIntegrationDepositWithPayload,
|
||||
} from "../circleIntegration";
|
||||
|
||||
describe("VAA Parsing Unit Tests", () => {
|
||||
test("CircleIntegration DepositWithPayload", () => {
|
||||
const testPayload = Buffer.from(
|
||||
"01000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e0000000000000000000000000000000000000000000000000000000018701a8000000001000000000000000000000f880000000000000000000000004cb69fae7e7af841e44e1a1c30af640739378bb20000000000000000000000004cb69fae7e7af841e44e1a1c30af640739378bb20061010000000000000000000000000000000000000000000000000000000001c9c3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380d25e69c3df71de6891bfd511af87e9b3e9036",
|
||||
"hex"
|
||||
);
|
||||
const testResult: CircleIntegrationDeposit = {
|
||||
payloadType: CircleIntegrationPayload.DepositWithPayload,
|
||||
tokenAddress: Buffer.from(
|
||||
"000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
|
||||
"hex"
|
||||
),
|
||||
amount: BigInt("410000000"),
|
||||
sourceDomain: 1,
|
||||
targetDomain: 0,
|
||||
nonce: BigInt("3976"),
|
||||
fromAddress: Buffer.from(
|
||||
"0000000000000000000000004cb69fae7e7af841e44e1a1c30af640739378bb2",
|
||||
"hex"
|
||||
),
|
||||
mintRecipient: Buffer.from(
|
||||
"0000000000000000000000004cb69fae7e7af841e44e1a1c30af640739378bb2",
|
||||
"hex"
|
||||
),
|
||||
payloadLen: 97,
|
||||
depositPayload: Buffer.from(
|
||||
"010000000000000000000000000000000000000000000000000000000001c9c3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000380d25e69c3df71de6891bfd511af87e9b3e9036",
|
||||
"hex"
|
||||
),
|
||||
};
|
||||
const parsedPayload = parseCircleIntegrationDepositWithPayload(testPayload);
|
||||
expect(parsedPayload).toEqual(testResult);
|
||||
});
|
||||
});
|
|
@ -0,0 +1,48 @@
|
|||
import { BN } from "@project-serum/anchor";
|
||||
|
||||
export enum CircleIntegrationPayload {
|
||||
DepositWithPayload = 1,
|
||||
}
|
||||
|
||||
export interface CircleIntegrationDeposit {
|
||||
payloadType: CircleIntegrationPayload.DepositWithPayload;
|
||||
tokenAddress: Buffer;
|
||||
amount: bigint;
|
||||
sourceDomain: number;
|
||||
targetDomain: number;
|
||||
nonce: bigint;
|
||||
fromAddress: Buffer;
|
||||
mintRecipient: Buffer;
|
||||
payloadLen: number;
|
||||
depositPayload: Buffer;
|
||||
}
|
||||
|
||||
export function parseCircleIntegrationDepositWithPayload(
|
||||
payload: Buffer
|
||||
): CircleIntegrationDeposit {
|
||||
const payloadType = payload.readUInt8(0);
|
||||
if (payloadType != CircleIntegrationPayload.DepositWithPayload) {
|
||||
throw new Error("not circle integration payload VAA");
|
||||
}
|
||||
const tokenAddress = payload.subarray(1, 33);
|
||||
const amount = BigInt(new BN(payload.subarray(33, 65)).toString());
|
||||
const sourceDomain = payload.readUInt32BE(65);
|
||||
const targetDomain = payload.readUInt32BE(69);
|
||||
const nonce = payload.readBigUInt64BE(73);
|
||||
const fromAddress = payload.subarray(81, 113);
|
||||
const mintRecipient = payload.subarray(113, 145);
|
||||
const payloadLen = payload.readUInt16BE(145);
|
||||
const depositPayload = payload.subarray(147);
|
||||
return {
|
||||
payloadType,
|
||||
tokenAddress,
|
||||
amount,
|
||||
sourceDomain,
|
||||
targetDomain,
|
||||
nonce,
|
||||
fromAddress,
|
||||
mintRecipient,
|
||||
payloadLen,
|
||||
depositPayload,
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue