@ledgerhq/coin-evm 2.4.3 → 2.4.4-nightly.1
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.
- package/.turbo/turbo-build.log +1 -1
- package/.unimportedrc.json +10 -3
- package/CHANGELOG.md +21 -0
- package/docs/signOperation.md +0 -4
- package/lib/__tests__/coin-tester/anvil.js +3 -3
- package/lib/__tests__/coin-tester/anvil.js.map +1 -1
- package/lib/__tests__/coin-tester/helpers.d.ts +20 -2
- package/lib/__tests__/coin-tester/helpers.d.ts.map +1 -1
- package/lib/__tests__/coin-tester/helpers.js +86 -6
- package/lib/__tests__/coin-tester/helpers.js.map +1 -1
- package/lib/__tests__/coin-tester/scenarios/blast.d.ts +5 -0
- package/lib/__tests__/coin-tester/scenarios/blast.d.ts.map +1 -0
- package/lib/__tests__/coin-tester/scenarios/blast.js +141 -0
- package/lib/__tests__/coin-tester/scenarios/blast.js.map +1 -0
- package/lib/__tests__/coin-tester/scenarios/ethereum.d.ts +1 -1
- package/lib/__tests__/coin-tester/scenarios/ethereum.d.ts.map +1 -1
- package/lib/__tests__/coin-tester/scenarios/ethereum.js +55 -52
- package/lib/__tests__/coin-tester/scenarios/ethereum.js.map +1 -1
- package/lib/__tests__/coin-tester/scenarios/polygon.d.ts.map +1 -1
- package/lib/__tests__/coin-tester/scenarios/polygon.js +51 -50
- package/lib/__tests__/coin-tester/scenarios/polygon.js.map +1 -1
- package/lib/__tests__/coin-tester/scenarios/scroll.d.ts +5 -0
- package/lib/__tests__/coin-tester/scenarios/scroll.d.ts.map +1 -0
- package/lib/__tests__/coin-tester/scenarios/scroll.js +141 -0
- package/lib/__tests__/coin-tester/scenarios/scroll.js.map +1 -0
- package/lib/__tests__/coin-tester/scenarios.test.d.ts +1 -1
- package/lib/__tests__/coin-tester/scenarios.test.d.ts.map +1 -1
- package/lib/__tests__/coin-tester/scenarios.test.js +25 -1
- package/lib/__tests__/coin-tester/scenarios.test.js.map +1 -1
- package/lib/__tests__/unit/logic.unit.test.js +2 -2
- package/lib/__tests__/unit/logic.unit.test.js.map +1 -1
- package/lib/__tests__/unit/signOperation.unit.test.js +2 -25
- package/lib/__tests__/unit/signOperation.unit.test.js.map +1 -1
- package/lib/api/node/ledger.js +1 -1
- package/lib/api/node/ledger.js.map +1 -1
- package/lib/api/node/rpc.common.d.ts.map +1 -1
- package/lib/api/node/rpc.common.js +4 -1
- package/lib/api/node/rpc.common.js.map +1 -1
- package/lib/getTransactionStatus.d.ts.map +1 -1
- package/lib/getTransactionStatus.js +2 -1
- package/lib/getTransactionStatus.js.map +1 -1
- package/lib/signOperation.d.ts +0 -9
- package/lib/signOperation.d.ts.map +1 -1
- package/lib/signOperation.js +2 -29
- package/lib/signOperation.js.map +1 -1
- package/lib-es/__tests__/coin-tester/anvil.js +3 -3
- package/lib-es/__tests__/coin-tester/anvil.js.map +1 -1
- package/lib-es/__tests__/coin-tester/helpers.d.ts +20 -2
- package/lib-es/__tests__/coin-tester/helpers.d.ts.map +1 -1
- package/lib-es/__tests__/coin-tester/helpers.js +84 -5
- package/lib-es/__tests__/coin-tester/helpers.js.map +1 -1
- package/lib-es/__tests__/coin-tester/scenarios/blast.d.ts +5 -0
- package/lib-es/__tests__/coin-tester/scenarios/blast.d.ts.map +1 -0
- package/lib-es/__tests__/coin-tester/scenarios/blast.js +135 -0
- package/lib-es/__tests__/coin-tester/scenarios/blast.js.map +1 -0
- package/lib-es/__tests__/coin-tester/scenarios/ethereum.d.ts +1 -1
- package/lib-es/__tests__/coin-tester/scenarios/ethereum.d.ts.map +1 -1
- package/lib-es/__tests__/coin-tester/scenarios/ethereum.js +49 -46
- package/lib-es/__tests__/coin-tester/scenarios/ethereum.js.map +1 -1
- package/lib-es/__tests__/coin-tester/scenarios/polygon.d.ts.map +1 -1
- package/lib-es/__tests__/coin-tester/scenarios/polygon.js +46 -45
- package/lib-es/__tests__/coin-tester/scenarios/polygon.js.map +1 -1
- package/lib-es/__tests__/coin-tester/scenarios/scroll.d.ts +5 -0
- package/lib-es/__tests__/coin-tester/scenarios/scroll.d.ts.map +1 -0
- package/lib-es/__tests__/coin-tester/scenarios/scroll.js +135 -0
- package/lib-es/__tests__/coin-tester/scenarios/scroll.js.map +1 -0
- package/lib-es/__tests__/coin-tester/scenarios.test.d.ts +1 -1
- package/lib-es/__tests__/coin-tester/scenarios.test.d.ts.map +1 -1
- package/lib-es/__tests__/coin-tester/scenarios.test.js +25 -1
- package/lib-es/__tests__/coin-tester/scenarios.test.js.map +1 -1
- package/lib-es/__tests__/unit/logic.unit.test.js +2 -2
- package/lib-es/__tests__/unit/logic.unit.test.js.map +1 -1
- package/lib-es/__tests__/unit/signOperation.unit.test.js +3 -26
- package/lib-es/__tests__/unit/signOperation.unit.test.js.map +1 -1
- package/lib-es/api/node/ledger.js +1 -1
- package/lib-es/api/node/ledger.js.map +1 -1
- package/lib-es/api/node/rpc.common.d.ts.map +1 -1
- package/lib-es/api/node/rpc.common.js +4 -1
- package/lib-es/api/node/rpc.common.js.map +1 -1
- package/lib-es/getTransactionStatus.d.ts.map +1 -1
- package/lib-es/getTransactionStatus.js +2 -1
- package/lib-es/getTransactionStatus.js.map +1 -1
- package/lib-es/signOperation.d.ts +0 -9
- package/lib-es/signOperation.d.ts.map +1 -1
- package/lib-es/signOperation.js +1 -27
- package/lib-es/signOperation.js.map +1 -1
- package/package.json +9 -9
- package/src/__tests__/coin-tester/anvil.ts +3 -3
- package/src/__tests__/coin-tester/helpers.ts +112 -5
- package/src/__tests__/coin-tester/scenarios/blast.ts +151 -0
- package/src/__tests__/coin-tester/scenarios/ethereum.ts +51 -62
- package/src/__tests__/coin-tester/scenarios/polygon.ts +47 -60
- package/src/__tests__/coin-tester/scenarios/scroll.ts +155 -0
- package/src/__tests__/coin-tester/scenarios.test.ts +25 -1
- package/src/__tests__/unit/logic.unit.test.ts +3 -3
- package/src/__tests__/unit/signOperation.unit.test.ts +4 -36
- package/src/api/node/ledger.ts +1 -1
- package/src/api/node/rpc.common.ts +4 -1
- package/src/getTransactionStatus.ts +3 -1
- package/src/signOperation.ts +1 -28
package/.turbo/turbo-build.log
CHANGED
package/.unimportedrc.json
CHANGED
|
@@ -15,7 +15,12 @@
|
|
|
15
15
|
"src/operation.ts",
|
|
16
16
|
"src/config.ts"
|
|
17
17
|
],
|
|
18
|
-
"ignoreUnimported": [
|
|
18
|
+
"ignoreUnimported": [
|
|
19
|
+
"src/__tests__/*",
|
|
20
|
+
"**/*.test.*",
|
|
21
|
+
"**/*.spec.*",
|
|
22
|
+
"src/datasets/ethereum1.ts"
|
|
23
|
+
],
|
|
19
24
|
"ignoreUnresolved": [
|
|
20
25
|
"@ethersproject/bytes",
|
|
21
26
|
"@ethersproject/logger",
|
|
@@ -26,6 +31,8 @@
|
|
|
26
31
|
"@ethersproject/strings",
|
|
27
32
|
"@ethersproject/hash",
|
|
28
33
|
"@ethersproject/keccak256",
|
|
29
|
-
"@
|
|
34
|
+
"@ethersproject/signing-key",
|
|
35
|
+
"@ledgerhq/cryptoassets-evm-signatures/data/evm/index",
|
|
36
|
+
"bn.js"
|
|
30
37
|
]
|
|
31
|
-
}
|
|
38
|
+
}
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @ledgerhq/coin-evm
|
|
2
2
|
|
|
3
|
+
## 2.4.4-nightly.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#8175](https://github.com/LedgerHQ/ledger-live/pull/8175) [`b93a421`](https://github.com/LedgerHQ/ledger-live/commit/b93a421866519b80fdd8a029caea97323eceae93) Thanks [@lambertkevin](https://github.com/lambertkevin)! - Remove helper `applyEIP155` now that `hw-app-eth` is fixed and returns a valid `v` in all possible cases. Adding a env var `EVM_FORCE_LEGACY_TRANSACTIONS` to force transaction type 0, making this change QA compatible.
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`b93a421`](https://github.com/LedgerHQ/ledger-live/commit/b93a421866519b80fdd8a029caea97323eceae93), [`b93a421`](https://github.com/LedgerHQ/ledger-live/commit/b93a421866519b80fdd8a029caea97323eceae93)]:
|
|
10
|
+
- @ledgerhq/live-env@2.4.1-nightly.2
|
|
11
|
+
- @ledgerhq/evm-tools@1.3.0-nightly.2
|
|
12
|
+
- @ledgerhq/coin-framework@0.18.7-nightly.0
|
|
13
|
+
- @ledgerhq/cryptoassets@13.6.3-nightly.2
|
|
14
|
+
- @ledgerhq/live-network@2.0.3-nightly.2
|
|
15
|
+
|
|
16
|
+
## 2.4.4-nightly.0
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- [#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.
|
|
21
|
+
|
|
22
|
+
- [#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
|
|
23
|
+
|
|
3
24
|
## 2.4.3
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
package/docs/signOperation.md
CHANGED
|
@@ -4,10 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
## Methods
|
|
6
6
|
|
|
7
|
-
#### applyEIP155
|
|
8
|
-
|
|
9
|
-
[EIP-155](https://eips.ethereum.org/EIPS/eip-155 "EIP-155") is a standard designed to mitigate replay attacks across various EVM chains by altering the `v` value within the ECDSA signature of a transaction. While the `@ledgerhq/hw-app-eth` library already tries to implement this modification, its result is unstable, therefore, the `applyEIP155` helper function has been created to reapply the EIP depending on the outcome of the Ethereum app binding.
|
|
10
|
-
|
|
11
7
|
#### buildSignOperation `factory of [standard]`
|
|
12
8
|
|
|
13
9
|
This observable is responsible for applying the last set of transformations to a Ledger Live transaction. These transformations include things such as updating the recipient address, particularly when dealing with ERC20/721/1155 transactions crafted by Ledger Live itself, or applying the correct nonce.
|
|
@@ -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:
|
|
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:
|
|
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;
|
|
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
|
|
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;
|
|
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.
|
|
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.
|
|
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;
|
|
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":"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"}
|
|
@@ -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,
|
|
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"}
|