@ledgerhq/coin-evm 2.4.3 → 2.4.4-spl-test.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 (71) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/lib/__tests__/coin-tester/anvil.js +3 -3
  3. package/lib/__tests__/coin-tester/anvil.js.map +1 -1
  4. package/lib/__tests__/coin-tester/helpers.d.ts +20 -2
  5. package/lib/__tests__/coin-tester/helpers.d.ts.map +1 -1
  6. package/lib/__tests__/coin-tester/helpers.js +86 -6
  7. package/lib/__tests__/coin-tester/helpers.js.map +1 -1
  8. package/lib/__tests__/coin-tester/scenarios/blast.d.ts +5 -0
  9. package/lib/__tests__/coin-tester/scenarios/blast.d.ts.map +1 -0
  10. package/lib/__tests__/coin-tester/scenarios/blast.js +141 -0
  11. package/lib/__tests__/coin-tester/scenarios/blast.js.map +1 -0
  12. package/lib/__tests__/coin-tester/scenarios/ethereum.d.ts +1 -1
  13. package/lib/__tests__/coin-tester/scenarios/ethereum.d.ts.map +1 -1
  14. package/lib/__tests__/coin-tester/scenarios/ethereum.js +55 -52
  15. package/lib/__tests__/coin-tester/scenarios/ethereum.js.map +1 -1
  16. package/lib/__tests__/coin-tester/scenarios/polygon.d.ts.map +1 -1
  17. package/lib/__tests__/coin-tester/scenarios/polygon.js +51 -50
  18. package/lib/__tests__/coin-tester/scenarios/polygon.js.map +1 -1
  19. package/lib/__tests__/coin-tester/scenarios/scroll.d.ts +5 -0
  20. package/lib/__tests__/coin-tester/scenarios/scroll.d.ts.map +1 -0
  21. package/lib/__tests__/coin-tester/scenarios/scroll.js +141 -0
  22. package/lib/__tests__/coin-tester/scenarios/scroll.js.map +1 -0
  23. package/lib/__tests__/coin-tester/scenarios.test.d.ts +1 -1
  24. package/lib/__tests__/coin-tester/scenarios.test.d.ts.map +1 -1
  25. package/lib/__tests__/coin-tester/scenarios.test.js +25 -1
  26. package/lib/__tests__/coin-tester/scenarios.test.js.map +1 -1
  27. package/lib/__tests__/unit/logic.unit.test.js +2 -2
  28. package/lib/__tests__/unit/logic.unit.test.js.map +1 -1
  29. package/lib/getTransactionStatus.d.ts.map +1 -1
  30. package/lib/getTransactionStatus.js +2 -1
  31. package/lib/getTransactionStatus.js.map +1 -1
  32. package/lib-es/__tests__/coin-tester/anvil.js +3 -3
  33. package/lib-es/__tests__/coin-tester/anvil.js.map +1 -1
  34. package/lib-es/__tests__/coin-tester/helpers.d.ts +20 -2
  35. package/lib-es/__tests__/coin-tester/helpers.d.ts.map +1 -1
  36. package/lib-es/__tests__/coin-tester/helpers.js +84 -5
  37. package/lib-es/__tests__/coin-tester/helpers.js.map +1 -1
  38. package/lib-es/__tests__/coin-tester/scenarios/blast.d.ts +5 -0
  39. package/lib-es/__tests__/coin-tester/scenarios/blast.d.ts.map +1 -0
  40. package/lib-es/__tests__/coin-tester/scenarios/blast.js +135 -0
  41. package/lib-es/__tests__/coin-tester/scenarios/blast.js.map +1 -0
  42. package/lib-es/__tests__/coin-tester/scenarios/ethereum.d.ts +1 -1
  43. package/lib-es/__tests__/coin-tester/scenarios/ethereum.d.ts.map +1 -1
  44. package/lib-es/__tests__/coin-tester/scenarios/ethereum.js +49 -46
  45. package/lib-es/__tests__/coin-tester/scenarios/ethereum.js.map +1 -1
  46. package/lib-es/__tests__/coin-tester/scenarios/polygon.d.ts.map +1 -1
  47. package/lib-es/__tests__/coin-tester/scenarios/polygon.js +46 -45
  48. package/lib-es/__tests__/coin-tester/scenarios/polygon.js.map +1 -1
  49. package/lib-es/__tests__/coin-tester/scenarios/scroll.d.ts +5 -0
  50. package/lib-es/__tests__/coin-tester/scenarios/scroll.d.ts.map +1 -0
  51. package/lib-es/__tests__/coin-tester/scenarios/scroll.js +135 -0
  52. package/lib-es/__tests__/coin-tester/scenarios/scroll.js.map +1 -0
  53. package/lib-es/__tests__/coin-tester/scenarios.test.d.ts +1 -1
  54. package/lib-es/__tests__/coin-tester/scenarios.test.d.ts.map +1 -1
  55. package/lib-es/__tests__/coin-tester/scenarios.test.js +25 -1
  56. package/lib-es/__tests__/coin-tester/scenarios.test.js.map +1 -1
  57. package/lib-es/__tests__/unit/logic.unit.test.js +2 -2
  58. package/lib-es/__tests__/unit/logic.unit.test.js.map +1 -1
  59. package/lib-es/getTransactionStatus.d.ts.map +1 -1
  60. package/lib-es/getTransactionStatus.js +2 -1
  61. package/lib-es/getTransactionStatus.js.map +1 -1
  62. package/package.json +11 -11
  63. package/src/__tests__/coin-tester/anvil.ts +3 -3
  64. package/src/__tests__/coin-tester/helpers.ts +112 -5
  65. package/src/__tests__/coin-tester/scenarios/blast.ts +151 -0
  66. package/src/__tests__/coin-tester/scenarios/ethereum.ts +51 -62
  67. package/src/__tests__/coin-tester/scenarios/polygon.ts +47 -60
  68. package/src/__tests__/coin-tester/scenarios/scroll.ts +155 -0
  69. package/src/__tests__/coin-tester/scenarios.test.ts +25 -1
  70. package/src/__tests__/unit/logic.unit.test.ts +3 -3
  71. package/src/getTransactionStatus.ts +3 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @ledgerhq/coin-evm
2
2
 
3
+ ## 2.4.4-spl-test.0
4
+
5
+ ### Patch Changes
6
+
7
+ - [#8206](https://github.com/LedgerHQ/ledger-live/pull/8206) [`9059f4b`](https://github.com/LedgerHQ/ledger-live/commit/9059f4bb1dd540f28e2e16d85d701d70a99b6c96) Thanks [@lambertkevin](https://github.com/lambertkevin)! - Add new coin-tester helper `callMyDealer` capable of providing any token or NFT without the need to know a previous owner. Also adds 2 new scenarii for Blast & Scroll.
8
+
9
+ - [#8206](https://github.com/LedgerHQ/ledger-live/pull/8206) [`9059f4b`](https://github.com/LedgerHQ/ledger-live/commit/9059f4bb1dd540f28e2e16d85d701d70a99b6c96) Thanks [@lambertkevin](https://github.com/lambertkevin)! - Make coin-tester script run tests sequentially
10
+
11
+ - Updated dependencies [[`5c13c7b`](https://github.com/LedgerHQ/ledger-live/commit/5c13c7bf743333f09cbfee720d275dfae7e157d2), [`95fbec9`](https://github.com/LedgerHQ/ledger-live/commit/95fbec9fdff75cd6d4ac23e189e876efffc81906), [`aeb54b7`](https://github.com/LedgerHQ/ledger-live/commit/aeb54b7d5793da977e9b45d812c0d8a747008b28)]:
12
+ - @ledgerhq/live-env@2.4.1-spl-test.0
13
+ - @ledgerhq/cryptoassets@13.7.0-spl-test.0
14
+ - @ledgerhq/coin-framework@0.19.0-spl-test.0
15
+ - @ledgerhq/evm-tools@1.2.5-spl-test.0
16
+ - @ledgerhq/live-network@2.0.3-spl-test.0
17
+ - @ledgerhq/domain-service@1.2.11-spl-test.0
18
+
3
19
  ## 2.4.3
4
20
 
5
21
  ### Patch Changes
@@ -19,7 +19,7 @@ const speculos_1 = require("@ledgerhq/coin-tester/lib/signers/speculos");
19
19
  const cwd = __dirname;
20
20
  const delay = (timing) => new Promise(resolve => setTimeout(resolve, timing));
21
21
  const ensureEnv = () => {
22
- const mandatory_env_variables = ["SEED"];
22
+ const mandatory_env_variables = ["SEED", "GH_TOKEN"];
23
23
  if (!mandatory_env_variables.every(variable => !!process.env[variable])) {
24
24
  throw new Error(`Missing env variables. Make sure that ${mandatory_env_variables.join(",")} are in your .env`);
25
25
  }
@@ -29,7 +29,7 @@ const spawnAnvil = (rpc) => __awaiter(void 0, void 0, void 0, function* () {
29
29
  console.log("Starting anvil...");
30
30
  yield docker_compose_1.v2.upOne("anvil", {
31
31
  cwd,
32
- log: true,
32
+ log: Boolean(process.env.DEBUG),
33
33
  env: Object.assign(Object.assign({}, process.env), { RPC: rpc }),
34
34
  });
35
35
  const checkAnvilLogs = () => __awaiter(void 0, void 0, void 0, function* () {
@@ -51,7 +51,7 @@ const killAnvil = () => __awaiter(void 0, void 0, void 0, function* () {
51
51
  console.log("Stopping anvil...");
52
52
  yield docker_compose_1.v2.down({
53
53
  cwd,
54
- log: true,
54
+ log: Boolean(process.env.DEBUG),
55
55
  env: process.env,
56
56
  });
57
57
  });
@@ -1 +1 @@
1
- {"version":3,"file":"anvil.js","sourceRoot":"","sources":["../../../src/__tests__/coin-tester/anvil.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mDAA+C;AAC/C,kDAA0B;AAC1B,yEAA0E;AAE1E,MAAM,GAAG,GAAG,SAAS,CAAC;AAEtB,MAAM,KAAK,GAAG,CAAC,MAAc,EAAiB,EAAE,CAC9C,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAEtD,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,uBAAuB,GAAG,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CACb,yCAAyC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAC9F,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEK,MAAM,UAAU,GAAG,CAAO,GAAW,EAAiB,EAAE;IAC7D,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,MAAM,mBAAO,CAAC,KAAK,CAAC,OAAO,EAAE;QAC3B,GAAG;QACH,GAAG,EAAE,IAAI;QACT,GAAG,kCACE,OAAO,CAAC,GAAG,KACd,GAAG,EAAE,GAAG,GACT;KACF,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,GAAwB,EAAE;QAC/C,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,mBAAO,CAAC,IAAI,CAAC,OAAO,EAAE;YAC1C,GAAG;YACH,GAAG,kCACE,OAAO,CAAC,GAAG,KACd,GAAG,EAAE,GAAG,GACT;SACF,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC,CAAA,CAAC;IAEF,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC,CAAA,CAAC;AA/BW,QAAA,UAAU,cA+BrB;AAEK,MAAM,SAAS,GAAG,GAAwB,EAAE;IACjD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,MAAM,mBAAO,CAAC,IAAI,CAAC;QACjB,GAAG;QACH,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;AACL,CAAC,CAAA,CAAC;AAPW,QAAA,SAAS,aAOpB;AAEF,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC1F,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAS,EAAE;IACvB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAA,iBAAS,GAAE,EAAE,IAAA,uBAAY,GAAE,CAAC,CAAC,CAAC;AACnD,CAAC,CAAA,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"anvil.js","sourceRoot":"","sources":["../../../src/__tests__/coin-tester/anvil.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mDAA+C;AAC/C,kDAA0B;AAC1B,yEAA0E;AAE1E,MAAM,GAAG,GAAG,SAAS,CAAC;AAEtB,MAAM,KAAK,GAAG,CAAC,MAAc,EAAiB,EAAE,CAC9C,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAEtD,MAAM,SAAS,GAAG,GAAG,EAAE;IACrB,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAErD,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CACb,yCAAyC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAC9F,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEK,MAAM,UAAU,GAAG,CAAO,GAAW,EAAiB,EAAE;IAC7D,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,MAAM,mBAAO,CAAC,KAAK,CAAC,OAAO,EAAE;QAC3B,GAAG;QACH,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B,GAAG,kCACE,OAAO,CAAC,GAAG,KACd,GAAG,EAAE,GAAG,GACT;KACF,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,GAAwB,EAAE;QAC/C,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,mBAAO,CAAC,IAAI,CAAC,OAAO,EAAE;YAC1C,GAAG;YACH,GAAG,kCACE,OAAO,CAAC,GAAG,KACd,GAAG,EAAE,GAAG,GACT;SACF,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC,CAAA,CAAC;IAEF,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC,CAAA,CAAC;AA/BW,QAAA,UAAU,cA+BrB;AAEK,MAAM,SAAS,GAAG,GAAwB,EAAE;IACjD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,MAAM,mBAAO,CAAC,IAAI,CAAC;QACjB,GAAG;QACH,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;AACL,CAAC,CAAA,CAAC;AAPW,QAAA,SAAS,aAOpB;AAEF,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC1F,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAS,EAAE;IACvB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAA,iBAAS,GAAE,EAAE,IAAA,uBAAY,GAAE,CAAC,CAAC,CAAC;AACnD,CAAC,CAAA,CAAC,CACH,CAAC"}
@@ -1,15 +1,33 @@
1
1
  import { ethers } from "ethers";
2
+ import { NFTStandard } from "@ledgerhq/types-live";
3
+ import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
2
4
  export declare const ethereum: import("@ledgerhq/types-cryptoassets").CryptoCurrency;
3
5
  export declare const polygon: import("@ledgerhq/types-cryptoassets").CryptoCurrency;
6
+ export declare const scroll: import("@ledgerhq/types-cryptoassets").CryptoCurrency;
7
+ export declare const blast: import("@ledgerhq/types-cryptoassets").CryptoCurrency;
4
8
  export declare const ERC20Interface: ethers.utils.Interface;
5
9
  export declare const ERC721Interface: ethers.utils.Interface;
6
10
  export declare const ERC1155Interface: ethers.utils.Interface;
7
- export declare const USDC_ON_ETHEREUM: import("@ledgerhq/types-cryptoassets").TokenCurrency;
8
- export declare const USDC_ON_POLYGON: import("@ledgerhq/types-cryptoassets").TokenCurrency;
11
+ export declare const VITALIK = "0x6bfD74C0996F269Bcece59191EFf667b3dFD73b9";
9
12
  export declare const impersonnateAccount: ({ provider, addressToImpersonnate, to, data, }: {
10
13
  provider: ethers.providers.JsonRpcProvider;
11
14
  addressToImpersonnate: string;
12
15
  to: string;
13
16
  data: string;
14
17
  }) => Promise<void>;
18
+ export type Drug = TokenCurrency | {
19
+ type: "Nft";
20
+ tokenId: string;
21
+ contractAddress: string;
22
+ standard: NFTStandard;
23
+ };
24
+ /**
25
+ * Helper providing any token/NFT in any quantity to any address
26
+ */
27
+ export declare const callMyDealer: ({ provider, drug, junkie, dose, }: {
28
+ provider: ethers.providers.JsonRpcProvider;
29
+ drug: Drug;
30
+ junkie: string;
31
+ dose: ethers.BigNumber;
32
+ }) => Promise<void>;
15
33
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/__tests__/coin-tester/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAOhC,eAAO,MAAM,QAAQ,uDAAoC,CAAC;AAC1D,eAAO,MAAM,OAAO,uDAAmC,CAAC;AACxD,eAAO,MAAM,cAAc,wBAAuC,CAAC;AACnE,eAAO,MAAM,eAAe,wBAAwC,CAAC;AACrE,eAAO,MAAM,gBAAgB,wBAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,sDAA2C,CAAC;AACzE,eAAO,MAAM,eAAe,sDAA+C,CAAC;AAE5E,eAAO,MAAM,mBAAmB;cAMpB,OAAO,SAAS,CAAC,eAAe;2BACnB,MAAM;QACzB,MAAM;UACJ,MAAM;mBAkBb,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/__tests__/coin-tester/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAM7D,eAAO,MAAM,QAAQ,uDAAoC,CAAC;AAC1D,eAAO,MAAM,OAAO,uDAAmC,CAAC;AACxD,eAAO,MAAM,MAAM,uDAAkC,CAAC;AACtD,eAAO,MAAM,KAAK,uDAAiC,CAAC;AACpD,eAAO,MAAM,cAAc,wBAAuC,CAAC;AACnE,eAAO,MAAM,eAAe,wBAAwC,CAAC;AACrE,eAAO,MAAM,gBAAgB,wBAAyC,CAAC;AACvE,eAAO,MAAM,OAAO,+CAA+C,CAAC;AAEpE,eAAO,MAAM,mBAAmB;cAMpB,OAAO,SAAS,CAAC,eAAe;2BACnB,MAAM;QACzB,MAAM;UACJ,MAAM;mBAsBb,CAAC;AAEF,MAAM,MAAM,IAAI,GACZ,aAAa,GACb;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAC;AAKrF;;GAEG;AACH,eAAO,MAAM,YAAY;cAMb,OAAO,SAAS,CAAC,eAAe;UACpC,IAAI;YACF,MAAM;UACR,OAAO,SAAS;mBAgFvB,CAAC"}
@@ -12,21 +12,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.impersonnateAccount = exports.USDC_ON_POLYGON = exports.USDC_ON_ETHEREUM = exports.ERC1155Interface = exports.ERC721Interface = exports.ERC20Interface = exports.polygon = exports.ethereum = void 0;
15
+ exports.callMyDealer = exports.impersonnateAccount = exports.VITALIK = exports.ERC1155Interface = exports.ERC721Interface = exports.ERC20Interface = exports.blast = exports.scroll = exports.polygon = exports.ethereum = void 0;
16
16
  const ethers_1 = require("ethers");
17
17
  const currencies_1 = require("@ledgerhq/cryptoassets/currencies");
18
- const tokens_1 = require("@ledgerhq/cryptoassets/tokens");
19
- const erc20_abi_json_1 = __importDefault(require("../../abis/erc20.abi.json"));
20
- const erc721_abi_json_1 = __importDefault(require("../../abis/erc721.abi.json"));
21
18
  const erc1155_abi_json_1 = __importDefault(require("../../abis/erc1155.abi.json"));
19
+ const erc721_abi_json_1 = __importDefault(require("../../abis/erc721.abi.json"));
20
+ const erc20_abi_json_1 = __importDefault(require("../../abis/erc20.abi.json"));
22
21
  exports.ethereum = (0, currencies_1.getCryptoCurrencyById)("ethereum");
23
22
  exports.polygon = (0, currencies_1.getCryptoCurrencyById)("polygon");
23
+ exports.scroll = (0, currencies_1.getCryptoCurrencyById)("scroll");
24
+ exports.blast = (0, currencies_1.getCryptoCurrencyById)("blast");
24
25
  exports.ERC20Interface = new ethers_1.ethers.utils.Interface(erc20_abi_json_1.default);
25
26
  exports.ERC721Interface = new ethers_1.ethers.utils.Interface(erc721_abi_json_1.default);
26
27
  exports.ERC1155Interface = new ethers_1.ethers.utils.Interface(erc1155_abi_json_1.default);
27
- exports.USDC_ON_ETHEREUM = (0, tokens_1.getTokenById)("ethereum/erc20/usd__coin");
28
- exports.USDC_ON_POLYGON = (0, tokens_1.getTokenById)("polygon/erc20/usd_coin_(pos)");
28
+ exports.VITALIK = "0x6bfD74C0996F269Bcece59191EFf667b3dFD73b9";
29
29
  const impersonnateAccount = (_a) => __awaiter(void 0, [_a], void 0, function* ({ provider, addressToImpersonnate, to, data, }) {
30
+ yield provider.send("anvil_setBalance", [
31
+ addressToImpersonnate,
32
+ ethers_1.ethers.utils.parseEther("10").toHexString(),
33
+ ]);
30
34
  yield provider.send("anvil_impersonateAccount", [addressToImpersonnate]);
31
35
  const impersonatedAccount = {
32
36
  from: addressToImpersonnate,
@@ -44,4 +48,80 @@ const impersonnateAccount = (_a) => __awaiter(void 0, [_a], void 0, function* ({
44
48
  yield provider.waitForTransaction(hash);
45
49
  });
46
50
  exports.impersonnateAccount = impersonnateAccount;
51
+ const DEALER = "0x00000000000000000000000000000000deadbeef";
52
+ // Don't use the first byte, it is used by Circle on USDC to get blacklisted people
53
+ const stash = "0x00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
54
+ /**
55
+ * Helper providing any token/NFT in any quantity to any address
56
+ */
57
+ const callMyDealer = (_b) => __awaiter(void 0, [_b], void 0, function* ({ provider, drug, junkie, dose, }) {
58
+ const { contractAddress } = drug;
59
+ const balanceOfCalldata = drug.type === "TokenCurrency"
60
+ ? exports.ERC20Interface.encodeFunctionData("balanceOf", [DEALER])
61
+ : drug.standard === "ERC721"
62
+ ? exports.ERC721Interface.encodeFunctionData("ownerOf", [drug.tokenId])
63
+ : exports.ERC1155Interface.encodeFunctionData("balanceOf", [DEALER, drug.tokenId]);
64
+ const expectedSlotValue = drug.type === "Nft" && drug.standard === "ERC721"
65
+ ? ethers_1.ethers.utils.hexZeroPad(DEALER, 32)
66
+ : ethers_1.ethers.utils.hexZeroPad(stash, 32);
67
+ // Get a list of all storage slots accessed when requesting the balance of the dealer
68
+ const { accessList } = yield provider.send("eth_createAccessList", [
69
+ {
70
+ to: contractAddress,
71
+ data: balanceOfCalldata,
72
+ },
73
+ ]);
74
+ let dealerGotDelivered = false;
75
+ for (const { address, storageKeys } of accessList) {
76
+ if (address.toLowerCase() !== contractAddress.toLowerCase())
77
+ continue;
78
+ // For all the slots accessed, we try to request the `balanceOf` of the dealer while overriding its value
79
+ for (const slot of storageKeys) {
80
+ const overriddenStorageSlot = {
81
+ [contractAddress]: {
82
+ stateDiff: {
83
+ [slot]: expectedSlotValue,
84
+ },
85
+ },
86
+ };
87
+ const newSlotValue = yield provider
88
+ .send("eth_call", [
89
+ {
90
+ to: contractAddress,
91
+ data: balanceOfCalldata,
92
+ },
93
+ "latest",
94
+ overriddenStorageSlot,
95
+ ])
96
+ .catch(() => "0x");
97
+ // If the balance is still 0, it means the slot was not the one containing the dealer's balance
98
+ if (newSlotValue !== expectedSlotValue)
99
+ continue;
100
+ // We found the right slot, we can now override the dealer's balance in the contract state
101
+ yield provider.send("anvil_setStorageAt", [contractAddress, slot, expectedSlotValue]);
102
+ dealerGotDelivered = true;
103
+ break;
104
+ }
105
+ }
106
+ if (!dealerGotDelivered)
107
+ throw new Error("Deal failed for some reason");
108
+ // We can now impersonate the dealer and send the tokens to the junkie
109
+ // This will trigger the ERCXXX transfer function and transfer events
110
+ // which we will be able to index and mock explorers with those
111
+ yield (0, exports.impersonnateAccount)({
112
+ provider,
113
+ addressToImpersonnate: DEALER,
114
+ to: contractAddress,
115
+ data: drug.type === "TokenCurrency"
116
+ ? exports.ERC20Interface.encodeFunctionData("transfer", [junkie, dose.toHexString()])
117
+ : drug.standard === "ERC721"
118
+ ? exports.ERC721Interface.encodeFunctionData("safeTransferFrom(address,address,uint256)", [
119
+ DEALER,
120
+ junkie,
121
+ drug.tokenId,
122
+ ])
123
+ : exports.ERC1155Interface.encodeFunctionData("safeTransferFrom(address,address,uint256,uint256,bytes)", [DEALER, junkie, drug.tokenId, dose.toHexString(), "0x"]),
124
+ });
125
+ });
126
+ exports.callMyDealer = callMyDealer;
47
127
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/__tests__/coin-tester/helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mCAAgC;AAChC,kEAA0E;AAC1E,0DAA6D;AAC7D,+EAAiD;AACjD,iFAAmD;AACnD,mFAAqD;AAExC,QAAA,QAAQ,GAAG,IAAA,kCAAqB,EAAC,UAAU,CAAC,CAAC;AAC7C,QAAA,OAAO,GAAG,IAAA,kCAAqB,EAAC,SAAS,CAAC,CAAC;AAC3C,QAAA,cAAc,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,wBAAQ,CAAC,CAAC;AACtD,QAAA,eAAe,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,yBAAS,CAAC,CAAC;AACxD,QAAA,gBAAgB,GAAG,IAAI,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,0BAAU,CAAC,CAAC;AAC1D,QAAA,gBAAgB,GAAG,IAAA,qBAAY,EAAC,0BAA0B,CAAC,CAAC;AAC5D,QAAA,eAAe,GAAG,IAAA,qBAAY,EAAC,8BAA8B,CAAC,CAAC;AAErE,MAAM,mBAAmB,GAAG,KAUhC,EAAE,4CAVqC,EACxC,QAAQ,EACR,qBAAqB,EACrB,EAAE,EACF,IAAI,GAML;IACC,MAAM,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACzE,MAAM,mBAAmB,GAAG;QAC1B,IAAI,EAAE,qBAAqB;QAC3B,EAAE;QACF,IAAI;QACJ,KAAK,EAAE,eAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QAC7C,GAAG,EAAE,eAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAS,CAAC,CAAC,WAAW,EAAE;QACnD,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE;QACtD,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtF,OAAO,EAAE,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;KACnE,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC/E,MAAM,QAAQ,CAAC,IAAI,CAAC,gCAAgC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/E,MAAM,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,CAAA,CAAC;AA3BW,QAAA,mBAAmB,uBA2B9B"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/__tests__/coin-tester/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Account } from "@ledgerhq/types-live";
2
+ import { Scenario } from "@ledgerhq/coin-tester/main";
3
+ import { Transaction as EvmTransaction } from "../../../types";
4
+ export declare const scenarioBlast: Scenario<EvmTransaction, Account>;
5
+ //# sourceMappingURL=blast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blast.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/coin-tester/scenarios/blast.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAuB,MAAM,4BAA4B,CAAC;AAM3E,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAsD/D,eAAO,MAAM,aAAa,EAAE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAqF3D,CAAC"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.scenarioBlast = void 0;
16
+ const hw_app_eth_1 = __importDefault(require("@ledgerhq/hw-app-eth"));
17
+ const bignumber_js_1 = require("bignumber.js");
18
+ const ethers_1 = require("ethers");
19
+ const tokens_1 = require("@ledgerhq/cryptoassets/tokens");
20
+ const index_1 = require("@ledgerhq/coin-framework/account/index");
21
+ const speculos_1 = require("@ledgerhq/coin-tester/signers/speculos");
22
+ const indexer_1 = require("../indexer");
23
+ const js_1 = require("../../../bridge/js");
24
+ const config_1 = require("../../../config");
25
+ const common_fixtures_1 = require("../../fixtures/common.fixtures");
26
+ const helpers_1 = require("../helpers");
27
+ const scenarios_test_1 = require("../scenarios.test");
28
+ const anvil_1 = require("../anvil");
29
+ const hw_getAddress_1 = __importDefault(require("../../../hw-getAddress"));
30
+ // getTokenById will only work after the currency has been preloaded
31
+ const TOKEN_ID = "blast/erc20/magic_internet_money";
32
+ const makeScenarioTransactions = ({ address }) => {
33
+ const scenarioSendEthTransaction = {
34
+ name: "Send 1 ETH",
35
+ amount: new bignumber_js_1.BigNumber(1e18),
36
+ recipient: helpers_1.VITALIK,
37
+ expect: (previousAccount, currentAccount) => {
38
+ const [latestOperation] = currentAccount.operations;
39
+ expect(currentAccount.operations.length - previousAccount.operations.length).toBe(1);
40
+ expect(latestOperation.type).toBe("OUT");
41
+ expect(latestOperation.value.toFixed()).toBe(latestOperation.fee.plus(1e18).toFixed());
42
+ expect(currentAccount.balance.toFixed()).toBe(previousAccount.balance.minus(latestOperation.value).toFixed());
43
+ },
44
+ };
45
+ const MIM_ON_BLAST = (0, tokens_1.getTokenById)(TOKEN_ID);
46
+ const scenarioSendMIMTransaction = {
47
+ name: "Send 80 MIM",
48
+ amount: new bignumber_js_1.BigNumber(ethers_1.ethers.utils.parseUnits("80", MIM_ON_BLAST.units[0].magnitude).toString()),
49
+ recipient: helpers_1.VITALIK,
50
+ subAccountId: (0, index_1.encodeTokenAccountId)(`js:2:blast:${address}:`, MIM_ON_BLAST),
51
+ expect: (previousAccount, currentAccount) => {
52
+ var _a, _b, _c;
53
+ const [latestOperation] = currentAccount.operations;
54
+ expect(currentAccount.operations.length - previousAccount.operations.length).toBe(1);
55
+ expect(latestOperation.type).toBe("FEES");
56
+ expect(latestOperation.value.toFixed()).toBe(latestOperation.fee.toFixed());
57
+ expect((_a = latestOperation.subOperations) === null || _a === void 0 ? void 0 : _a[0].type).toBe("OUT");
58
+ expect((_b = latestOperation.subOperations) === null || _b === void 0 ? void 0 : _b[0].value.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("80", MIM_ON_BLAST.units[0].magnitude).toString());
59
+ expect((_c = currentAccount.subAccounts) === null || _c === void 0 ? void 0 : _c[0].balance.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("20", MIM_ON_BLAST.units[0].magnitude).toString());
60
+ },
61
+ };
62
+ return [scenarioSendEthTransaction, scenarioSendMIMTransaction];
63
+ };
64
+ exports.scenarioBlast = {
65
+ name: "Ledger Live Basic Blast Transactions",
66
+ setup: () => __awaiter(void 0, void 0, void 0, function* () {
67
+ const [{ transport, getOnSpeculosConfirmation }] = yield Promise.all([
68
+ (0, speculos_1.spawnSpeculos)(`/${scenarios_test_1.defaultNanoApp.firmware}/Ethereum/app_${scenarios_test_1.defaultNanoApp.version}.elf`),
69
+ (0, anvil_1.spawnAnvil)("https://rpc.blast.io"),
70
+ ]);
71
+ const provider = new ethers_1.providers.StaticJsonRpcProvider("http://127.0.0.1:8545");
72
+ const signerContext = (deviceId, fn) => fn(new hw_app_eth_1.default(transport));
73
+ const lastBlockNumber = yield provider.getBlockNumber();
74
+ // start indexing at next block
75
+ yield (0, indexer_1.setBlock)(lastBlockNumber + 1);
76
+ (0, config_1.setCoinConfig)(() => ({
77
+ info: {
78
+ status: {
79
+ type: "active",
80
+ },
81
+ node: {
82
+ type: "external",
83
+ uri: "http://127.0.0.1:8545",
84
+ },
85
+ explorer: {
86
+ type: "etherscan",
87
+ uri: "https://api.blastscan.io/api",
88
+ },
89
+ },
90
+ }));
91
+ (0, indexer_1.initMswHandlers)((0, config_1.getCoinConfig)(helpers_1.blast).info);
92
+ const onSignerConfirmation = getOnSpeculosConfirmation();
93
+ const currencyBridge = (0, js_1.buildCurrencyBridge)(signerContext);
94
+ yield currencyBridge.preload(helpers_1.blast);
95
+ const accountBridge = (0, js_1.buildAccountBridge)(signerContext);
96
+ const getAddress = (0, hw_getAddress_1.default)(signerContext);
97
+ const { address } = yield getAddress("", {
98
+ path: "44'/60'/0'/0/0",
99
+ currency: helpers_1.blast,
100
+ derivationMode: "",
101
+ });
102
+ const scenarioAccount = (0, common_fixtures_1.makeAccount)(address, helpers_1.blast);
103
+ const MIM_ON_BLAST = (0, tokens_1.getTokenById)(TOKEN_ID);
104
+ yield (0, helpers_1.callMyDealer)({
105
+ provider,
106
+ drug: MIM_ON_BLAST,
107
+ junkie: address,
108
+ dose: ethers_1.ethers.utils.parseUnits("100", MIM_ON_BLAST.units[0].magnitude),
109
+ });
110
+ return {
111
+ currencyBridge,
112
+ accountBridge,
113
+ account: scenarioAccount,
114
+ onSignerConfirmation,
115
+ retryLimit: 0,
116
+ };
117
+ }),
118
+ getTransactions: address => makeScenarioTransactions({ address }),
119
+ beforeSync: () => __awaiter(void 0, void 0, void 0, function* () {
120
+ yield (0, indexer_1.indexBlocks)();
121
+ }),
122
+ beforeAll: account => {
123
+ var _a, _b, _c, _d, _e;
124
+ const MIM_ON_BLAST = (0, tokens_1.getTokenById)(TOKEN_ID);
125
+ expect(account.balance.toFixed()).toBe(ethers_1.ethers.utils.parseEther("10000").toString());
126
+ expect((_b = (_a = account.subAccounts) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.type).toBe("TokenAccount");
127
+ expect((_e = (_d = (_c = account.subAccounts) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.balance) === null || _e === void 0 ? void 0 : _e.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("100", MIM_ON_BLAST.units[0].magnitude).toString());
128
+ },
129
+ afterAll: account => {
130
+ var _a, _b;
131
+ const MIM_ON_BLAST = (0, tokens_1.getTokenById)(TOKEN_ID);
132
+ expect((_a = account.subAccounts) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
133
+ expect((_b = account.subAccounts) === null || _b === void 0 ? void 0 : _b[0].balance.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("20", MIM_ON_BLAST.units[0].magnitude).toString());
134
+ expect(account.operations.length).toBe(3);
135
+ },
136
+ teardown: () => __awaiter(void 0, void 0, void 0, function* () {
137
+ yield Promise.all([(0, speculos_1.killSpeculos)(), (0, anvil_1.killAnvil)()]);
138
+ (0, indexer_1.resetIndexer)();
139
+ }),
140
+ };
141
+ //# sourceMappingURL=blast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blast.js","sourceRoot":"","sources":["../../../../src/__tests__/coin-tester/scenarios/blast.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,sEAAuC;AACvC,+CAAyC;AACzC,mCAA2C;AAE3C,0DAA6D;AAE7D,kEAA8E;AAC9E,qEAAqF;AACrF,wCAAkF;AAClF,2CAA6E;AAC7E,4CAA+D;AAE/D,oEAA6D;AAC7D,wCAA0D;AAC1D,sDAAmD;AACnD,oCAAiD;AACjD,2EAA8C;AAI9C,oEAAoE;AACpE,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AAEpD,MAAM,wBAAwB,GAAG,CAAC,EAAE,OAAO,EAAuB,EAA8B,EAAE;IAChG,MAAM,0BAA0B,GAA6B;QAC3D,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,IAAI,wBAAS,CAAC,IAAI,CAAC;QAC3B,SAAS,EAAE,iBAAO;QAClB,MAAM,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,EAAE;YAC1C,MAAM,CAAC,eAAe,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC;YACpD,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrF,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACvF,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAC3C,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAC/D,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,MAAM,YAAY,GAAG,IAAA,qBAAY,EAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,0BAA0B,GAA6B;QAC3D,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,IAAI,wBAAS,CACnB,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAC1E;QACD,SAAS,EAAE,iBAAO;QAClB,YAAY,EAAE,IAAA,4BAAoB,EAAC,cAAc,OAAO,GAAG,EAAE,YAAY,CAAC;QAC1E,MAAM,EAAE,CAAC,eAAe,EAAE,cAAc,EAAE,EAAE;;YAC1C,MAAM,CAAC,eAAe,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC;YACpD,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrF,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5E,MAAM,CAAC,MAAA,eAAe,CAAC,aAAa,0CAAG,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAA,eAAe,CAAC,aAAa,0CAAG,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAC7D,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAC1E,CAAC;YACF,MAAM,CAAC,MAAA,cAAc,CAAC,WAAW,0CAAG,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAC5D,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAC1E,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,OAAO,CAAC,0BAA0B,EAAE,0BAA0B,CAAC,CAAC;AAClE,CAAC,CAAC;AAEW,QAAA,aAAa,GAAsC;IAC9D,IAAI,EAAE,sCAAsC;IAC5C,KAAK,EAAE,GAAS,EAAE;QAChB,MAAM,CAAC,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnE,IAAA,wBAAa,EAAC,IAAI,+BAAc,CAAC,QAAQ,iBAAiB,+BAAc,CAAC,OAAO,MAAM,CAAC;YACvF,IAAA,kBAAU,EAAC,sBAAsB,CAAC;SACnC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,kBAAS,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,CAAC;QAC9E,MAAM,aAAa,GAAmC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,oBAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAE/F,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC;QACxD,+BAA+B;QAC/B,MAAM,IAAA,kBAAQ,EAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAEpC,IAAA,sBAAa,EAAC,GAAG,EAAE,CAAC,CAAC;YACnB,IAAI,EAAE;gBACJ,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;iBACf;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,UAAU;oBAChB,GAAG,EAAE,uBAAuB;iBAC7B;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,WAAW;oBACjB,GAAG,EAAE,8BAA8B;iBACpC;aACF;SACF,CAAC,CAAC,CAAC;QACJ,IAAA,yBAAe,EAAC,IAAA,sBAAa,EAAC,eAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,oBAAoB,GAAG,yBAAyB,EAAE,CAAC;QACzD,MAAM,cAAc,GAAG,IAAA,wBAAmB,EAAC,aAAa,CAAC,CAAC;QAC1D,MAAM,cAAc,CAAC,OAAO,CAAC,eAAK,CAAC,CAAC;QACpC,MAAM,aAAa,GAAG,IAAA,uBAAkB,EAAC,aAAa,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAA,uBAAQ,EAAC,aAAa,CAAC,CAAC;QAC3C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC,EAAE,EAAE;YACvC,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,eAAK;YACf,cAAc,EAAE,EAAE;SACnB,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,IAAA,6BAAW,EAAC,OAAO,EAAE,eAAK,CAAC,CAAC;QAEpD,MAAM,YAAY,GAAG,IAAA,qBAAY,EAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,IAAA,sBAAY,EAAC;YACjB,QAAQ;YACR,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;SACtE,CAAC,CAAC;QAEH,OAAO;YACL,cAAc;YACd,aAAa;YACb,OAAO,EAAE,eAAe;YACxB,oBAAoB;YACpB,UAAU,EAAE,CAAC;SACd,CAAC;IACJ,CAAC,CAAA;IACD,eAAe,EAAE,OAAO,CAAC,EAAE,CAAC,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC;IACjE,UAAU,EAAE,GAAS,EAAE;QACrB,MAAM,IAAA,qBAAW,GAAE,CAAC;IACtB,CAAC,CAAA;IACD,SAAS,EAAE,OAAO,CAAC,EAAE;;QACnB,MAAM,YAAY,GAAG,IAAA,qBAAY,EAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpF,MAAM,CAAC,MAAA,MAAA,OAAO,CAAC,WAAW,0CAAG,CAAC,CAAC,0CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAA,MAAA,MAAA,OAAO,CAAC,WAAW,0CAAG,CAAC,CAAC,0CAAE,OAAO,0CAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACvD,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAC3E,CAAC;IACJ,CAAC;IACD,QAAQ,EAAE,OAAO,CAAC,EAAE;;QAClB,MAAM,YAAY,GAAG,IAAA,qBAAY,EAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAA,OAAO,CAAC,WAAW,0CAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAA,OAAO,CAAC,WAAW,0CAAG,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CACrD,eAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAC1E,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,QAAQ,EAAE,GAAS,EAAE;QACnB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAA,uBAAY,GAAE,EAAE,IAAA,iBAAS,GAAE,CAAC,CAAC,CAAC;QACjD,IAAA,sBAAY,GAAE,CAAC;IACjB,CAAC,CAAA;CACF,CAAC"}
@@ -1,5 +1,5 @@
1
- import { Scenario } from "@ledgerhq/coin-tester/main";
2
1
  import { Account } from "@ledgerhq/types-live";
2
+ import { Scenario } from "@ledgerhq/coin-tester/main";
3
3
  import { Transaction as EvmTransaction } from "../../../types";
4
4
  export declare const scenarioEthereum: Scenario<EvmTransaction, Account>;
5
5
  //# sourceMappingURL=ethereum.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ethereum.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/coin-tester/scenarios/ethereum.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAuB,MAAM,4BAA4B,CAAC;AAG3E,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAqB,WAAW,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAkIlF,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAsH9D,CAAC"}
1
+ {"version":3,"file":"ethereum.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/coin-tester/scenarios/ethereum.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAuB,MAAM,4BAA4B,CAAC;AAI3E,OAAO,EAAqB,WAAW,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAyHlF,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAmH9D,CAAC"}
@@ -16,34 +16,40 @@ exports.scenarioEthereum = void 0;
16
16
  const hw_app_eth_1 = __importDefault(require("@ledgerhq/hw-app-eth"));
17
17
  const bignumber_js_1 = require("bignumber.js");
18
18
  const ethers_1 = require("ethers");
19
+ const tokens_1 = require("@ledgerhq/cryptoassets/tokens");
19
20
  const index_1 = require("@ledgerhq/coin-framework/account/index");
20
21
  const speculos_1 = require("@ledgerhq/coin-tester/signers/speculos");
21
22
  const indexer_1 = require("../indexer");
22
23
  const js_1 = require("../../../bridge/js");
23
24
  const config_1 = require("../../../config");
24
25
  const common_fixtures_1 = require("../../fixtures/common.fixtures");
25
- const anvil_1 = require("../anvil");
26
- const hw_getAddress_1 = __importDefault(require("../../../hw-getAddress"));
27
26
  const helpers_1 = require("../helpers");
28
27
  const scenarios_test_1 = require("../scenarios.test");
28
+ const anvil_1 = require("../anvil");
29
+ const hw_getAddress_1 = __importDefault(require("../../../hw-getAddress"));
30
+ const USDC_ON_ETHEREUM = (0, tokens_1.getTokenById)("ethereum/erc20/usd__coin");
31
+ const boredApeContract = "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D";
32
+ const boredApeTokenId = "3368";
33
+ const cloneXContract = "0x348FC118bcC65a92dC033A951aF153d14D945312";
34
+ const cloneXTokenId = "951";
29
35
  const makeScenarioTransactions = ({ address, }) => {
30
36
  const scenarioSendEthTransaction = {
31
- name: "Send ethereum",
32
- amount: new bignumber_js_1.BigNumber(100),
33
- recipient: "0x6bfD74C0996F269Bcece59191EFf667b3dFD73b9",
37
+ name: "Send 1 ETH",
38
+ amount: new bignumber_js_1.BigNumber(1e18),
39
+ recipient: helpers_1.VITALIK,
34
40
  expect: (previousAccount, currentAccount) => {
35
41
  const [latestOperation] = currentAccount.operations;
36
42
  expect(currentAccount.operations.length - previousAccount.operations.length).toBe(1);
37
43
  expect(latestOperation.type).toBe("OUT");
38
- expect(latestOperation.value.toFixed()).toBe(latestOperation.fee.plus(100).toFixed());
44
+ expect(latestOperation.value.toFixed()).toBe(latestOperation.fee.plus(1e18).toFixed());
39
45
  expect(currentAccount.balance.toFixed()).toBe(previousAccount.balance.minus(latestOperation.value).toFixed());
40
46
  },
41
47
  };
42
48
  const scenarioSendUSDCTransaction = {
43
49
  name: "Send USDC",
44
- amount: new bignumber_js_1.BigNumber(ethers_1.ethers.utils.parseUnits("80", helpers_1.USDC_ON_ETHEREUM.units[0].magnitude).toString()),
45
- recipient: "0x6bfD74C0996F269Bcece59191EFf667b3dFD73b9",
46
- subAccountId: (0, index_1.encodeTokenAccountId)(`js:2:ethereum:${address}:`, helpers_1.USDC_ON_ETHEREUM),
50
+ amount: new bignumber_js_1.BigNumber(ethers_1.ethers.utils.parseUnits("80", USDC_ON_ETHEREUM.units[0].magnitude).toString()),
51
+ recipient: helpers_1.VITALIK,
52
+ subAccountId: (0, index_1.encodeTokenAccountId)(`js:2:ethereum:${address}:`, USDC_ON_ETHEREUM),
47
53
  expect: (previousAccount, currentAccount) => {
48
54
  var _a, _b, _c;
49
55
  const [latestOperation] = currentAccount.operations;
@@ -51,17 +57,17 @@ const makeScenarioTransactions = ({ address, }) => {
51
57
  expect(latestOperation.type).toBe("FEES");
52
58
  expect(latestOperation.value.toFixed()).toBe(latestOperation.fee.toFixed());
53
59
  expect((_a = latestOperation.subOperations) === null || _a === void 0 ? void 0 : _a[0].type).toBe("OUT");
54
- expect((_b = latestOperation.subOperations) === null || _b === void 0 ? void 0 : _b[0].value.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("80", helpers_1.USDC_ON_ETHEREUM.units[0].magnitude).toString());
55
- expect((_c = currentAccount.subAccounts) === null || _c === void 0 ? void 0 : _c[0].balance.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("20", helpers_1.USDC_ON_ETHEREUM.units[0].magnitude).toString());
60
+ expect((_b = latestOperation.subOperations) === null || _b === void 0 ? void 0 : _b[0].value.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("80", USDC_ON_ETHEREUM.units[0].magnitude).toString());
61
+ expect((_c = currentAccount.subAccounts) === null || _c === void 0 ? void 0 : _c[0].balance.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("20", USDC_ON_ETHEREUM.units[0].magnitude).toString());
56
62
  },
57
63
  };
58
64
  const scenarioSendERC721Transaction = {
59
65
  name: "Send ERC721",
60
- recipient: "0x6bfD74C0996F269Bcece59191EFf667b3dFD73b9",
66
+ recipient: helpers_1.VITALIK,
61
67
  mode: "erc721",
62
68
  nft: {
63
- tokenId: "3368",
64
- contract: "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D",
69
+ tokenId: boredApeTokenId,
70
+ contract: boredApeContract,
65
71
  quantity: new bignumber_js_1.BigNumber(1),
66
72
  collectionName: "Bored Ape",
67
73
  },
@@ -69,36 +75,36 @@ const makeScenarioTransactions = ({ address, }) => {
69
75
  var _a, _b;
70
76
  const [latestOperation] = currentAccount.operations;
71
77
  expect(currentAccount.operations.length - previousAccount.operations.length).toBe(1);
72
- expect((_a = currentAccount.nfts) === null || _a === void 0 ? void 0 : _a.every(nft => nft.contract !== "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D")).toBe(true);
78
+ expect((_a = currentAccount.nfts) === null || _a === void 0 ? void 0 : _a.every(nft => nft.contract !== boredApeContract)).toBe(true);
73
79
  expect(latestOperation.type).toBe("FEES");
74
80
  const lastNftOperation = (_b = latestOperation.nftOperations) === null || _b === void 0 ? void 0 : _b[0];
75
81
  expect(lastNftOperation).toMatchObject({
76
- contract: "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D",
77
- tokenId: "3368",
82
+ contract: boredApeContract,
83
+ tokenId: boredApeTokenId,
78
84
  value: new bignumber_js_1.BigNumber(1),
79
85
  });
80
86
  },
81
87
  };
82
88
  const scenarioSendERC1155Transaction = {
83
89
  name: "Send ERC1155",
84
- recipient: "0x6bfD74C0996F269Bcece59191EFf667b3dFD73b9",
90
+ recipient: helpers_1.VITALIK,
85
91
  mode: "erc1155",
86
92
  nft: {
87
93
  tokenId: "951",
94
+ contract: cloneXContract,
88
95
  collectionName: "Clone X",
89
- contract: "0x348FC118bcC65a92dC033A951aF153d14D945312", // EIP55 checksum of 0x348fc118bcc65a92dc033a951af153d14d945312
90
96
  quantity: new bignumber_js_1.BigNumber(2),
91
97
  },
92
98
  expect: (previousAccount, currentAccount) => {
93
99
  var _a, _b;
94
100
  const [latestOperation] = currentAccount.operations;
95
101
  expect(currentAccount.operations.length - previousAccount.operations.length).toBe(1);
96
- expect((_a = currentAccount.nfts) === null || _a === void 0 ? void 0 : _a.every(nft => nft.contract !== "0x348FC118bcC65a92dC033A951aF153d14D945312")).toBe(true);
102
+ expect((_a = currentAccount.nfts) === null || _a === void 0 ? void 0 : _a.every(nft => nft.contract !== cloneXContract)).toBe(true);
97
103
  expect(latestOperation.type).toBe("FEES");
98
104
  const lastNftOperation = (_b = latestOperation.nftOperations) === null || _b === void 0 ? void 0 : _b[0];
99
105
  expect(lastNftOperation).toMatchObject({
100
- contract: "0x348FC118bcC65a92dC033A951aF153d14D945312",
101
- tokenId: "951",
106
+ contract: cloneXContract,
107
+ tokenId: cloneXTokenId,
102
108
  value: new bignumber_js_1.BigNumber(2),
103
109
  });
104
110
  },
@@ -152,39 +158,36 @@ exports.scenarioEthereum = {
152
158
  const lastBlockNumber = yield provider.getBlockNumber();
153
159
  // start indexing at next block
154
160
  yield (0, indexer_1.setBlock)(lastBlockNumber + 1);
155
- // Binance account
156
- yield (0, helpers_1.impersonnateAccount)({
161
+ // Get USDC
162
+ yield (0, helpers_1.callMyDealer)({
157
163
  provider,
158
- data: helpers_1.ERC20Interface.encodeFunctionData("transfer", [
159
- address,
160
- ethers_1.ethers.utils.parseUnits("100", helpers_1.USDC_ON_ETHEREUM.units[0].magnitude),
161
- ]),
162
- to: helpers_1.USDC_ON_ETHEREUM.contractAddress,
163
- addressToImpersonnate: "0x47ac0Fb4F2D84898e4D9E7b4DaB3C24507a6D503", // binance
164
+ drug: USDC_ON_ETHEREUM,
165
+ junkie: address,
166
+ dose: ethers_1.ethers.utils.parseUnits("100", USDC_ON_ETHEREUM.units[0].magnitude),
164
167
  });
165
- // Bored Ape
166
- yield (0, helpers_1.impersonnateAccount)({
168
+ // Get a Bored Ape
169
+ yield (0, helpers_1.callMyDealer)({
167
170
  provider,
168
- data: helpers_1.ERC721Interface.encodeFunctionData("transferFrom", [
169
- "0x440Bcc7a1CF465EAFaBaE301D1D7739cbFe09dDA",
170
- address,
171
- "3368",
172
- ]),
173
- to: "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D",
174
- addressToImpersonnate: "0x440Bcc7a1CF465EAFaBaE301D1D7739cbFe09dDA",
171
+ drug: {
172
+ type: "Nft",
173
+ tokenId: boredApeTokenId,
174
+ contractAddress: boredApeContract,
175
+ standard: "ERC721",
176
+ },
177
+ junkie: address,
178
+ dose: ethers_1.ethers.BigNumber.from(1),
175
179
  });
176
- // Clone X
177
- yield (0, helpers_1.impersonnateAccount)({
180
+ // Get 2 CloneX
181
+ yield (0, helpers_1.callMyDealer)({
178
182
  provider,
179
- data: helpers_1.ERC1155Interface.encodeFunctionData("safeTransferFrom", [
180
- "0xa3cd1123f4860C0cC512C775Ab6DB6A3E3d1B1Ee",
181
- address,
182
- "951",
183
- 2,
184
- "0x",
185
- ]),
186
- to: "0x348fc118bcc65a92dc033a951af153d14d945312",
187
- addressToImpersonnate: "0xa3cd1123f4860C0cC512C775Ab6DB6A3E3d1B1Ee",
183
+ drug: {
184
+ type: "Nft",
185
+ tokenId: cloneXTokenId,
186
+ contractAddress: cloneXContract,
187
+ standard: "ERC1155",
188
+ },
189
+ junkie: address,
190
+ dose: ethers_1.ethers.BigNumber.from(2),
188
191
  });
189
192
  return {
190
193
  currencyBridge,
@@ -197,7 +200,7 @@ exports.scenarioEthereum = {
197
200
  var _a, _b, _c;
198
201
  expect(account.balance.toFixed()).toBe(ethers_1.ethers.utils.parseEther("10000").toString());
199
202
  expect((_a = account.subAccounts) === null || _a === void 0 ? void 0 : _a[0].type).toBe("TokenAccount");
200
- expect((_b = account.subAccounts) === null || _b === void 0 ? void 0 : _b[0].balance.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("100", helpers_1.USDC_ON_ETHEREUM.units[0].magnitude).toString());
203
+ expect((_b = account.subAccounts) === null || _b === void 0 ? void 0 : _b[0].balance.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("100", USDC_ON_ETHEREUM.units[0].magnitude).toString());
201
204
  expect((_c = account.nfts) === null || _c === void 0 ? void 0 : _c.length).toBe(2);
202
205
  },
203
206
  getTransactions: address => makeScenarioTransactions({ address }),
@@ -207,7 +210,7 @@ exports.scenarioEthereum = {
207
210
  afterAll: account => {
208
211
  var _a, _b, _c;
209
212
  expect((_a = account.subAccounts) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
210
- expect((_b = account.subAccounts) === null || _b === void 0 ? void 0 : _b[0].balance.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("20", helpers_1.USDC_ON_ETHEREUM.units[0].magnitude).toString());
213
+ expect((_b = account.subAccounts) === null || _b === void 0 ? void 0 : _b[0].balance.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("20", USDC_ON_ETHEREUM.units[0].magnitude).toString());
211
214
  expect((_c = account.nfts) === null || _c === void 0 ? void 0 : _c.length).toBe(0);
212
215
  expect(account.operations.length).toBe(7);
213
216
  },