@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.
- package/CHANGELOG.md +16 -0
- 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/getTransactionStatus.d.ts.map +1 -1
- package/lib/getTransactionStatus.js +2 -1
- package/lib/getTransactionStatus.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/getTransactionStatus.d.ts.map +1 -1
- package/lib-es/getTransactionStatus.js +2 -1
- package/lib-es/getTransactionStatus.js.map +1 -1
- package/package.json +11 -11
- 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/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:
|
|
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"}
|
|
@@ -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
|
|
32
|
-
amount: new bignumber_js_1.BigNumber(
|
|
33
|
-
recipient:
|
|
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(
|
|
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",
|
|
45
|
-
recipient:
|
|
46
|
-
subAccountId: (0, index_1.encodeTokenAccountId)(`js:2:ethereum:${address}:`,
|
|
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",
|
|
55
|
-
expect((_c = currentAccount.subAccounts) === null || _c === void 0 ? void 0 : _c[0].balance.toFixed()).toBe(ethers_1.ethers.utils.parseUnits("20",
|
|
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:
|
|
66
|
+
recipient: helpers_1.VITALIK,
|
|
61
67
|
mode: "erc721",
|
|
62
68
|
nft: {
|
|
63
|
-
tokenId:
|
|
64
|
-
contract:
|
|
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 !==
|
|
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:
|
|
77
|
-
tokenId:
|
|
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:
|
|
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 !==
|
|
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:
|
|
101
|
-
tokenId:
|
|
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
|
-
//
|
|
156
|
-
yield (0, helpers_1.
|
|
161
|
+
// Get USDC
|
|
162
|
+
yield (0, helpers_1.callMyDealer)({
|
|
157
163
|
provider,
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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.
|
|
168
|
+
// Get a Bored Ape
|
|
169
|
+
yield (0, helpers_1.callMyDealer)({
|
|
167
170
|
provider,
|
|
168
|
-
|
|
169
|
-
"
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
-
//
|
|
177
|
-
yield (0, helpers_1.
|
|
180
|
+
// Get 2 CloneX
|
|
181
|
+
yield (0, helpers_1.callMyDealer)({
|
|
178
182
|
provider,
|
|
179
|
-
|
|
180
|
-
"
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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",
|
|
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",
|
|
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
|
},
|