@boostxyz/sdk 5.2.0 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +10 -0
  2. package/dist/Actions/Action.cjs +1 -1
  3. package/dist/Actions/Action.js +1 -1
  4. package/dist/Actions/EventAction.cjs +1 -1
  5. package/dist/Actions/EventAction.cjs.map +1 -1
  6. package/dist/Actions/EventAction.d.ts +82 -38
  7. package/dist/Actions/EventAction.d.ts.map +1 -1
  8. package/dist/Actions/EventAction.js +437 -297
  9. package/dist/Actions/EventAction.js.map +1 -1
  10. package/dist/AllowLists/AllowList.cjs +1 -1
  11. package/dist/AllowLists/AllowList.js +2 -2
  12. package/dist/AllowLists/SimpleAllowList.cjs +1 -1
  13. package/dist/AllowLists/SimpleAllowList.js +2 -2
  14. package/dist/AllowLists/SimpleDenyList.cjs +1 -1
  15. package/dist/AllowLists/SimpleDenyList.js +3 -3
  16. package/dist/Auth/PassthroughAuth.cjs +1 -1
  17. package/dist/Auth/PassthroughAuth.js +1 -1
  18. package/dist/BoostCore.cjs +2 -2
  19. package/dist/BoostCore.cjs.map +1 -1
  20. package/dist/BoostCore.d.ts +42 -1
  21. package/dist/BoostCore.d.ts.map +1 -1
  22. package/dist/BoostCore.js +360 -318
  23. package/dist/BoostCore.js.map +1 -1
  24. package/dist/BoostRegistry.cjs +1 -1
  25. package/dist/BoostRegistry.js +2 -2
  26. package/dist/{Budget-N0YEfSt2.cjs → Budget-AoNx7uFd.cjs} +2 -2
  27. package/dist/{Budget-N0YEfSt2.cjs.map → Budget-AoNx7uFd.cjs.map} +1 -1
  28. package/dist/{Budget-C0SMvfEl.js → Budget-DYIV9iNK.js} +3 -3
  29. package/dist/{Budget-C0SMvfEl.js.map → Budget-DYIV9iNK.js.map} +1 -1
  30. package/dist/Budgets/Budget.cjs +1 -1
  31. package/dist/Budgets/Budget.js +2 -2
  32. package/dist/Budgets/ManagedBudget.cjs +1 -1
  33. package/dist/Budgets/ManagedBudget.js +2 -2
  34. package/dist/Deployable/DeployableTarget.cjs +1 -1
  35. package/dist/Deployable/DeployableTarget.js +1 -1
  36. package/dist/Deployable/DeployableTargetWithRBAC.cjs +1 -1
  37. package/dist/Deployable/DeployableTargetWithRBAC.js +2 -2
  38. package/dist/Incentive-BbkfwGOb.cjs +2 -0
  39. package/dist/Incentive-BbkfwGOb.cjs.map +1 -0
  40. package/dist/{Incentive-BwRH0A6j.js → Incentive-qlnv5kQB.js} +203 -124
  41. package/dist/Incentive-qlnv5kQB.js.map +1 -0
  42. package/dist/Incentives/AllowListIncentive.cjs +1 -1
  43. package/dist/Incentives/AllowListIncentive.js +3 -3
  44. package/dist/Incentives/CGDAIncentive.cjs +1 -1
  45. package/dist/Incentives/CGDAIncentive.js +2 -2
  46. package/dist/Incentives/ERC20Incentive.cjs +1 -1
  47. package/dist/Incentives/ERC20Incentive.js +6 -6
  48. package/dist/Incentives/ERC20PeggedIncentive.d.ts +10 -1
  49. package/dist/Incentives/ERC20PeggedIncentive.d.ts.map +1 -1
  50. package/dist/Incentives/ERC20PeggedVariableCriteriaIncentive.d.ts +16 -4
  51. package/dist/Incentives/ERC20PeggedVariableCriteriaIncentive.d.ts.map +1 -1
  52. package/dist/Incentives/ERC20VariableCriteriaIncentive.cjs +1 -1
  53. package/dist/Incentives/ERC20VariableCriteriaIncentive.js +2 -2
  54. package/dist/Incentives/ERC20VariableIncentive.cjs +1 -1
  55. package/dist/Incentives/ERC20VariableIncentive.js +2 -2
  56. package/dist/Incentives/Incentive.cjs +1 -1
  57. package/dist/Incentives/Incentive.js +2 -2
  58. package/dist/Incentives/PointsIncentive.cjs +1 -1
  59. package/dist/Incentives/PointsIncentive.js +2 -2
  60. package/dist/{SimpleDenyList-B8QeJthf.js → SimpleDenyList-ByAr4X1r.js} +3 -3
  61. package/dist/{SimpleDenyList-B8QeJthf.js.map → SimpleDenyList-ByAr4X1r.js.map} +1 -1
  62. package/dist/{SimpleDenyList-DIb4xX3j.cjs → SimpleDenyList-CsRXJPwm.cjs} +2 -2
  63. package/dist/{SimpleDenyList-DIb4xX3j.cjs.map → SimpleDenyList-CsRXJPwm.cjs.map} +1 -1
  64. package/dist/Validators/LimitedSignerValidator.cjs +1 -1
  65. package/dist/Validators/LimitedSignerValidator.js +2 -2
  66. package/dist/Validators/SignerValidator.cjs +1 -1
  67. package/dist/Validators/SignerValidator.js +2 -2
  68. package/dist/Validators/Validator.cjs +1 -1
  69. package/dist/Validators/Validator.js +1 -1
  70. package/dist/{deployments-COxshLqt.js → deployments-D0fs26TV.js} +16 -16
  71. package/dist/{deployments-COxshLqt.js.map → deployments-D0fs26TV.js.map} +1 -1
  72. package/dist/{deployments-BGpr4ppG.cjs → deployments-DoIOqxco.cjs} +2 -2
  73. package/dist/deployments-DoIOqxco.cjs.map +1 -0
  74. package/dist/deployments.json +3 -3
  75. package/dist/errors.cjs +1 -1
  76. package/dist/errors.cjs.map +1 -1
  77. package/dist/errors.d.ts +40 -0
  78. package/dist/errors.d.ts.map +1 -1
  79. package/dist/errors.js +42 -16
  80. package/dist/errors.js.map +1 -1
  81. package/dist/{generated-ClbO_ULI.js → generated-Cyvr_Tjx.js} +446 -438
  82. package/dist/generated-Cyvr_Tjx.js.map +1 -0
  83. package/dist/{generated-CRD9XfOT.cjs → generated-DtYPHhtX.cjs} +2 -2
  84. package/dist/generated-DtYPHhtX.cjs.map +1 -0
  85. package/dist/index.cjs +1 -1
  86. package/dist/index.js +160 -155
  87. package/dist/utils.cjs +1 -1
  88. package/dist/utils.cjs.map +1 -1
  89. package/dist/utils.js +367 -19
  90. package/dist/utils.js.map +1 -1
  91. package/package.json +1 -1
  92. package/src/Actions/EventAction.test.ts +285 -3
  93. package/src/Actions/EventAction.ts +402 -124
  94. package/src/BoostCore.test.ts +51 -3
  95. package/src/BoostCore.ts +73 -0
  96. package/src/Incentives/ERC20PeggedIncentive.ts +33 -4
  97. package/src/Incentives/ERC20PeggedVariableCriteriaIncentive.test.ts +67 -25
  98. package/src/Incentives/ERC20PeggedVariableCriteriaIncentive.ts +89 -7
  99. package/src/errors.ts +50 -0
  100. package/dist/Incentive-BwRH0A6j.js.map +0 -1
  101. package/dist/Incentive-CZw_hu64.cjs +0 -2
  102. package/dist/Incentive-CZw_hu64.cjs.map +0 -1
  103. package/dist/deployments-BGpr4ppG.cjs.map +0 -1
  104. package/dist/generated-CRD9XfOT.cjs.map +0 -1
  105. package/dist/generated-ClbO_ULI.js.map +0 -1
@@ -1,10 +1,13 @@
1
- import { selectors as eventSelectors } from "@boostxyz/signatures/events";
1
+ import {
2
+ selectors as eventSelectors,
3
+ abi as eventAbi,
4
+ } from "@boostxyz/signatures/events";
2
5
  import { selectors as funcSelectors } from "@boostxyz/signatures/functions";
3
6
  import { loadFixture } from "@nomicfoundation/hardhat-network-helpers";
4
7
  import {
5
- AbiEvent,
6
- AbiFunction,
8
+ type AbiEvent,
7
9
  type Address,
10
+ type Log,
8
11
  type Hex,
9
12
  isAddress,
10
13
  isAddressEqual,
@@ -36,6 +39,9 @@ import {
36
39
  Criteria,
37
40
  anyActionParameter,
38
41
  transactionSenderClaimant,
42
+ packFieldIndexes,
43
+ unpackFieldIndexes,
44
+ decodeAndReorderLogArgs
39
45
  } from "./EventAction";
40
46
  import { allKnownSignatures } from "@boostxyz/test/allKnownSignatures";
41
47
  import { getTransactionReceipt } from "@wagmi/core";
@@ -301,6 +307,7 @@ describe("EventAction Event Selector", () => {
301
307
  defaultOptions,
302
308
  basicErc721TransferAction(erc721),
303
309
  );
310
+ // @ts-expect-error
304
311
  await action.deploy();
305
312
  expect(isAddress(action.assertValidAddress())).toBe(true);
306
313
  });
@@ -961,6 +968,7 @@ describe("EventAction Func Selector", () => {
961
968
  defaultOptions,
962
969
  basicErc721MintFuncAction(erc721),
963
970
  );
971
+ // @ts-expect-error
964
972
  await action.deploy();
965
973
  expect(isAddress(action.assertValidAddress())).toBe(true);
966
974
  });
@@ -1221,3 +1229,277 @@ describe("EventAction Func Selector", () => {
1221
1229
  ).toBe(true);
1222
1230
  });
1223
1231
  });
1232
+
1233
+ describe("Tuple & bitpacked fieldIndex support", () => {
1234
+ describe("packFieldIndexes / unpackFieldIndexes", () => {
1235
+ test("packs up to five indexes and unpacks them correctly", () => {
1236
+ const indexes = [0, 3, 5, 10, 63]; // sample indexes
1237
+ const packed = packFieldIndexes(indexes);
1238
+ const result = unpackFieldIndexes(packed);
1239
+ const resultIndexes = [0, 3, 5, 10]; // 63 is a terminator and won't be included since it triggers a break
1240
+
1241
+ expect(result).toEqual(resultIndexes);
1242
+ });
1243
+
1244
+ test("throws if more than five indexes are provided", () => {
1245
+ expect(() => packFieldIndexes([1, 2, 3, 4, 5, 6])).toThrowError(
1246
+ "Can only pack up to 5 indexes.",
1247
+ );
1248
+ });
1249
+
1250
+ test("throws if an index exceeds the max field index (63)", () => {
1251
+ // 64 is out of range
1252
+ expect(() => packFieldIndexes([64])).toThrowError(
1253
+ "Index 64 exceeds the maximum allowed value (63).",
1254
+ );
1255
+ });
1256
+
1257
+ test("terminates on max-field-index in unpackFieldIndexes", () => {
1258
+ // 63 is used as a "terminator," so anything after 63 should be truncated
1259
+ // Example: [2, 63, 7] => We expect only [2] because 63 signals end
1260
+ const packed = packFieldIndexes([2, 63, 7]);
1261
+ const result = unpackFieldIndexes(packed);
1262
+
1263
+ // we expect only [2], because 63 signals "stop"
1264
+ expect(result).toEqual([2]);
1265
+ });
1266
+ });
1267
+
1268
+ describe("parseFieldFromAbi with TUPLE bitpacked indexes", () => {
1269
+ // We'll create a minimal EventAction or a direct call to parseFieldFromAbi
1270
+ // to show we can handle a TUPLE index that references nested components
1271
+
1272
+ test("handles a single-level tuple with one sub-index", async () => {
1273
+ // Suppose we have a tuple param in index 0, with a single sub-field
1274
+ // We'll pack the indexes: [0, 0]
1275
+ // i.e. top-level param at index 0 is a tuple, then sub-field 0
1276
+ const tupleIndex = packFieldIndexes([0, 0]);
1277
+
1278
+ // We'll construct a minimal event or function input ABI with 1 param: a tuple of [address].
1279
+ const abiInputs = [
1280
+ {
1281
+ type: "tuple",
1282
+ components: [{ type: "address" }],
1283
+ },
1284
+ ];
1285
+
1286
+ // The actual values we decoded: array of one tuple => [ ["0x1234..."] ]
1287
+ const allArgs = [
1288
+ // param 0 is a tuple of length 1 => the "address"
1289
+ ["0x111122223333444455556666777788889999AaAa"],
1290
+ ];
1291
+
1292
+ const action = new EventAction(
1293
+ defaultOptions,
1294
+ basicErc721MintFuncAction(erc721),
1295
+ );
1296
+
1297
+ const { value, type } = action.parseFieldFromAbi(
1298
+ allArgs,
1299
+ tupleIndex, // bitpacked indexes
1300
+ abiInputs,
1301
+ PrimitiveType.TUPLE, // declared TUPLE
1302
+ );
1303
+
1304
+ expect(type).toBe(PrimitiveType.ADDRESS);
1305
+ expect(value).toBe("0x111122223333444455556666777788889999AaAa");
1306
+ });
1307
+
1308
+ test("handles deeper nested tuples with multiple sub-indexes", async () => {
1309
+ // Suppose param 1 is a tuple, inside that subcomponent 2 is also a tuple, etc.
1310
+ const tupleIndex = packFieldIndexes([1, 2, 0]); // for example
1311
+
1312
+ // Our ABI might have 2 top-level params: param 0 is a normal uint, param 1 is a tuple
1313
+ // That tuple's 'components' has at least 3 fields, so we pick sub-field #2
1314
+ // that sub-field #2 might itself be a tuple with at least 1 field => sub-sub-field #0
1315
+ const abiInputs = [
1316
+ { type: "uint256" }, // param 0
1317
+ {
1318
+ type: "tuple",
1319
+ components: [
1320
+ { type: "address" }, // sub-field 0
1321
+ { type: "uint256" }, // sub-field 1
1322
+ {
1323
+ type: "tuple", // sub-field 2
1324
+ components: [{ type: "string" }], // sub-sub-field 0
1325
+ },
1326
+ ],
1327
+ },
1328
+ ];
1329
+
1330
+ const allArgs = [
1331
+ 123n, // param 0
1332
+ [
1333
+ "0x111122223333444455556666777788889999AaAa", // sub-field0
1334
+ 999n, // sub-field1
1335
+ // sub-field2 => tuple
1336
+ ["hello world"], // sub-sub-field 0
1337
+ ],
1338
+ ];
1339
+
1340
+ const action = new EventAction(
1341
+ defaultOptions,
1342
+ basicErc721MintFuncAction(erc721),
1343
+ );
1344
+ const { value, type } = action.parseFieldFromAbi(
1345
+ allArgs,
1346
+ tupleIndex,
1347
+ abiInputs,
1348
+ PrimitiveType.TUPLE, // We know it's a nested TUPLE
1349
+ );
1350
+
1351
+ expect(type).toBe(PrimitiveType.STRING);
1352
+ expect(value).toBe("hello world");
1353
+ });
1354
+
1355
+ test("throws if TUPLE indexes go out of range", async () => {
1356
+ const tupleIndex = packFieldIndexes([1, 2, 9]); // sub-field #9 doesn't exist
1357
+ const abiInputs = [
1358
+ { type: "uint256" },
1359
+ {
1360
+ type: "tuple",
1361
+ components: [
1362
+ { type: "address" },
1363
+ { type: "uint256" },
1364
+ {
1365
+ type: "tuple",
1366
+ components: [{ type: "string" }],
1367
+ },
1368
+ ],
1369
+ },
1370
+ ];
1371
+ const allArgs = [
1372
+ 123n,
1373
+ [
1374
+ "0x111122223333444455556666777788889999AaAa",
1375
+ 999n,
1376
+ ["hello world"],
1377
+ ],
1378
+ ];
1379
+ const action = new EventAction(
1380
+ defaultOptions,
1381
+ basicErc721MintFuncAction(erc721),
1382
+ );
1383
+ expect(() =>
1384
+ action.parseFieldFromAbi(allArgs, tupleIndex, abiInputs, PrimitiveType.TUPLE),
1385
+ ).toThrowError("Failed to decode tuple: 9");
1386
+ });
1387
+ });
1388
+ });
1389
+
1390
+ describe('decodeAndReorderLogArgs', () => {
1391
+ test('correctly reorders mixed indexed and non-indexed parameters', () => {
1392
+ const event = eventAbi[
1393
+ 'Minted(address indexed,uint8,uint8,address indexed,(uint32,uint256,address,uint32,uint32,uint32,address,bool,uint256,uint256,uint256,uint256,uint256),uint256 indexed)'
1394
+ ] as AbiEvent;
1395
+
1396
+ const log: Log = {
1397
+ address: "0x000000000001a36777f9930aaeff623771b13e70",
1398
+ blockHash: "0xf529b056439fb090e974a2567642500ede9b5632ddb3bc138e6bebdf18ce367a",
1399
+ blockNumber: 24706315n,
1400
+ data: "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000015a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000512b55b00d744fc2edb8474f223a7498c3e5a7ce00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000002c2ad68fd900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f8c501d9b0000000000000000000000000000000000000000000000000000000c9e86723e0000000000000000000000000000000000000000000000000000000000000000000",
1401
+ logIndex: 379,
1402
+ removed: false,
1403
+ topics: [
1404
+ "0x2a29f7402bd32f0e4bbe17d44be064f7f64d96ee174ed7cb27936d869bf9a888",
1405
+ "0x0000000000000000000000008bc2a882609060bf9b5c673af5d11795463b9230",
1406
+ "0x000000000000000000000000234d469154ed5cec5a8c22b186e4766d556702ff",
1407
+ "0x0000000000000000000000000000000000000000000000000000000000000000"
1408
+ ],
1409
+ transactionHash: "0x604496c89be16e005314db89478c9999fc55aa95e8bbc6d5e8b2a26afc82abb7",
1410
+ transactionIndex: 110,
1411
+ };
1412
+
1413
+ const result = decodeAndReorderLogArgs(event, log);
1414
+
1415
+ expect(result.args[0]).toBe("0x8BC2A882609060Bf9b5C673aF5D11795463B9230");
1416
+ expect(result.args[1]).toBe(0);
1417
+ expect(result.args[2]).toBe(0);
1418
+ expect(result.args[3]).toBe("0x234d469154eD5cEC5A8C22b186e4766d556702ff");
1419
+ expect(Array.isArray(result.args[4]));
1420
+ expect(result.args[5]).toBe(0n);
1421
+ });
1422
+
1423
+ test('correctly reorders mixed indexed and non-indexed parameters', () => {
1424
+ const event = eventAbi['NameRegistered(string,bytes32 indexed,address indexed,uint256)'] as AbiEvent;
1425
+
1426
+ const log: Log = {
1427
+ address: "0x4ccb0bb02fcaba27e82a56646e81d8c5bc4119a5",
1428
+ blockHash: "0xd3756b6a35ebee1bfcf66b605dc3bd6fc85ca282ed94b190b25db4c6b3ef188a",
1429
+ blockNumber: 23536079n,
1430
+ data: "0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000693a2861000000000000000000000000000000000000000000000000000000000000000c626f6f73742d6d61747469650000000000000000000000000000000000000000",
1431
+ logIndex: 133,
1432
+ removed: false,
1433
+ topics: [
1434
+ "0x0667086d08417333ce63f40d5bc2ef6fd330e25aaaf317b7c489541f8fe600fa",
1435
+ "0x82de51675fd710fc7a247469e170340787130a61b84dc3446b63277e03e4abd9",
1436
+ "0x000000000000000000000000865c301c46d64de5c9b124ec1a97ef1efc1bcbd1"
1437
+ ],
1438
+ transactionHash: "0xbe54acb2ceb28e7eb962e09218d51ab3369139ac3fd782cacccf163f0daf1a08",
1439
+ transactionIndex: 26,
1440
+ };
1441
+
1442
+ const result = decodeAndReorderLogArgs(event, log);
1443
+
1444
+ expect(result.args[0]).toBe("boost-mattie");
1445
+ expect(result.args[1]).toBe("0x82de51675fd710fc7a247469e170340787130a61b84dc3446b63277e03e4abd9");
1446
+ expect(result.args[2]).toBe("0x865C301c46d64DE5c9B124Ec1a97eF1EFC1bcbd1");
1447
+ expect(result.args[3]).toBe(1765419105n);
1448
+ });
1449
+
1450
+ test('works with events where params are already correctly ordered', () => {
1451
+ const event = eventAbi["BoostCreated(uint256 indexed,address indexed,address indexed,uint256,address,address,address)"] as AbiEvent;
1452
+
1453
+ const log: Log = {
1454
+ address: "0xdcffce9d8185706780a46cf04d9c6b86b3451497",
1455
+ blockHash: "0xdfcbc66fc07d41321badb8f8afa3e8fea3f65e87791d3de1ad07d470b2ff1c8e",
1456
+ blockNumber: 7449080n,
1457
+ data: "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e81490c0b9e625999c78f155c7bcf7f11f512b390000000000000000000000003322baef13ac75b1b1e25abc65c0df28f9e55670000000000000000000000000d1513f67da84dec0759f6a715bf28a637c7de716",
1458
+ logIndex: 141,
1459
+ removed: false,
1460
+ topics: [
1461
+ "0x116812d3ad4507d72f2c428b63246d594ca055a1dc119394285504c23d1f34cd",
1462
+ "0x000000000000000000000000000000000000000000000000000000000000006f",
1463
+ "0x0000000000000000000000000000c1e5c9d12c8c52eb319af11da44bb84779d2",
1464
+ "0x0000000000000000000000008b1646483aeedd894feb417da1f5a7ab1846e81e"
1465
+ ],
1466
+ transactionHash: "0xb23270a738440be31b2e6c2e1180324f04159d7bfd681564e877d8675fd8b5c2",
1467
+ transactionIndex: 79,
1468
+ };
1469
+
1470
+ const result = decodeAndReorderLogArgs(event, log);
1471
+
1472
+ expect(result.args[0]).toBe(111n);
1473
+ expect(result.args[1]).toBe("0x0000c1E5C9d12c8c52eb319AF11dA44bb84779d2");
1474
+ expect(result.args[2]).toBe("0x8B1646483aEedd894feB417dA1f5a7Ab1846E81E");
1475
+ expect(result.args[3]).toBe(1n);
1476
+ expect(result.args[4]).toBe("0xE81490c0b9e625999C78f155c7bCf7f11f512B39");
1477
+ expect(result.args[5]).toBe("0x3322BaEf13ac75B1b1E25Abc65c0dF28f9e55670");
1478
+ expect(result.args[6]).toBe("0xD1513f67da84DEc0759F6a715BF28A637c7de716");
1479
+ });
1480
+
1481
+ test('works with events where there is no indexed params', () => {
1482
+ const event = eventAbi['Minted(uint8,address,uint256,uint256)'] as AbiEvent;
1483
+
1484
+ const log: Log = {
1485
+ address: "0x45ecff1c647a32455ced5c21400fe61aa2be680b",
1486
+ blockHash: "0xc5b14f59a5bc89e6a6ecdd595d4d10d1dd82adc624a04717fdff78bbb9dac988",
1487
+ blockNumber: 24749935n,
1488
+ data: "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000865c301c46d64de5c9b124ec1a97ef1efc1bcbd1000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000014a4",
1489
+ logIndex: 188,
1490
+ removed: false,
1491
+ topics: [
1492
+ "0x7ac572687bf4e66a8514fc2ec464fc2644c78bcb1d80a225fc51a33e0ee38bfa"
1493
+ ],
1494
+ transactionHash: "0x0e4aba5edcbfff24d25290066b992ef5670a00864febe38ffaeb8cb1476faa96",
1495
+ transactionIndex: 42,
1496
+ };
1497
+
1498
+ const result = decodeAndReorderLogArgs(event, log);
1499
+
1500
+ expect(result.args[0]).toBe(1);
1501
+ expect(result.args[1]).toBe("0x865C301c46d64DE5c9B124Ec1a97eF1EFC1bcbd1");
1502
+ expect(result.args[2]).toBe(1n);
1503
+ expect(result.args[3]).toBe(5284n);
1504
+ });
1505
+ });