Skip to content

Commit cc02f36

Browse files
committed
test: mock chainlink
test: other polishes
1 parent 57282e5 commit cc02f36

File tree

15 files changed

+114
-134
lines changed

15 files changed

+114
-134
lines changed

bun.lock

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@
2121
"keccak256": "^1.0.6",
2222
"lint-staged": "^16.1.2",
2323
"lodash": "^4.17.21",
24-
"lodash-es": "^4.17.21",
2524
"merkletreejs": "^0.5.2",
26-
"node-fetch": "^3.3.2",
2725
"prettier": "^2.8.8",
2826
"solana-bankrun": "^0.4.0",
2927
"typescript": "5.8.3",
@@ -117,7 +115,7 @@
117115

118116
"@noble/ciphers": ["@noble/[email protected]", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="],
119117

120-
"@noble/curves": ["@noble/[email protected].6", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-GIKz/j99FRthB8icyJQA51E8Uk5hXmdyThjgQXRKiv9h0zeRlzSCLIzFw6K1LotZ3XuB7yzlf76qk7uBmTdFqA=="],
118+
"@noble/curves": ["@noble/[email protected].2", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="],
121119

122120
"@noble/hashes": ["@noble/[email protected]", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="],
123121

@@ -195,7 +193,7 @@
195193

196194
"@solana/spl-token-metadata": ["@solana/[email protected]", "", { "dependencies": { "@solana/codecs": "2.0.0-rc.1" }, "peerDependencies": { "@solana/web3.js": "^1.95.3" } }, "sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA=="],
197195

198-
"@solana/web3.js": ["@solana/[email protected].2", "", { "dependencies": { "@babel/runtime": "^7.25.0", "@noble/curves": "^1.4.2", "@noble/hashes": "^1.4.0", "@solana/buffer-layout": "^4.0.1", "@solana/codecs-numbers": "^2.1.0", "agentkeepalive": "^4.5.0", "bn.js": "^5.2.1", "borsh": "^0.7.0", "bs58": "^4.0.1", "buffer": "6.0.3", "fast-stable-stringify": "^1.0.0", "jayson": "^4.1.1", "node-fetch": "^2.7.0", "rpc-websockets": "^9.0.2", "superstruct": "^2.0.2" } }, "sha512-BqVwEG+TaG2yCkBMbD3C4hdpustR4FpuUFRPUmqRZYYlPI9Hg4XMWxHWOWRzHE9Lkc9NDjzXFX7lDXSgzC7R1A=="],
196+
"@solana/web3.js": ["@solana/[email protected].4", "", { "dependencies": { "@babel/runtime": "^7.25.0", "@noble/curves": "^1.4.2", "@noble/hashes": "^1.4.0", "@solana/buffer-layout": "^4.0.1", "@solana/codecs-numbers": "^2.1.0", "agentkeepalive": "^4.5.0", "bn.js": "^5.2.1", "borsh": "^0.7.0", "bs58": "^4.0.1", "buffer": "6.0.3", "fast-stable-stringify": "^1.0.0", "jayson": "^4.1.1", "node-fetch": "^2.7.0", "rpc-websockets": "^9.0.2", "superstruct": "^2.0.2" } }, "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw=="],
199197

200198
"@swc/helpers": ["@swc/[email protected]", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="],
201199

@@ -295,8 +293,6 @@
295293

296294
"crypto-js": ["[email protected]", "", {}, "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="],
297295

298-
"data-uri-to-buffer": ["[email protected]", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="],
299-
300296
"dayjs": ["[email protected]", "", {}, "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="],
301297

302298
"debug": ["[email protected]", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="],
@@ -331,8 +327,6 @@
331327

332328
"fdir": ["[email protected]", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w=="],
333329

334-
"fetch-blob": ["[email protected]", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="],
335-
336330
"fflate": ["[email protected]", "", {}, "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="],
337331

338332
"file-uri-to-path": ["[email protected]", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="],
@@ -341,8 +335,6 @@
341335

342336
"flatted": ["[email protected]", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="],
343337

344-
"formdata-polyfill": ["[email protected]", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="],
345-
346338
"fsevents": ["[email protected]", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
347339

348340
"get-east-asian-width": ["[email protected]", "", {}, "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ=="],
@@ -381,8 +373,6 @@
381373

382374
"lodash": ["[email protected]", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="],
383375

384-
"lodash-es": ["[email protected]", "", {}, "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="],
385-
386376
"log-update": ["[email protected]", "", { "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w=="],
387377

388378
"loupe": ["[email protected]", "", {}, "sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw=="],
@@ -405,9 +395,7 @@
405395

406396
"node-addon-api": ["[email protected]", "", {}, "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA=="],
407397

408-
"node-domexception": ["[email protected]", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="],
409-
410-
"node-fetch": ["[email protected]", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="],
398+
"node-fetch": ["[email protected]", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="],
411399

412400
"node-gyp-build": ["[email protected]", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="],
413401

@@ -529,8 +517,6 @@
529517

530518
"vitest": ["[email protected]", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/expect": "3.2.4", "@vitest/mocker": "3.2.4", "@vitest/pretty-format": "^3.2.4", "@vitest/runner": "3.2.4", "@vitest/snapshot": "3.2.4", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", "magic-string": "^0.30.17", "pathe": "^2.0.3", "picomatch": "^4.0.2", "std-env": "^3.9.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "@vitest/browser": "3.2.4", "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/debug", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A=="],
531519

532-
"web-streams-polyfill": ["[email protected]", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="],
533-
534520
"webidl-conversions": ["[email protected]", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="],
535521

536522
"whatwg-url": ["[email protected]", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="],
@@ -565,12 +551,8 @@
565551

566552
"@solana/options/@solana/errors": ["@solana/[email protected]", "", { "dependencies": { "chalk": "^5.3.0", "commander": "^12.1.0" }, "peerDependencies": { "typescript": ">=5" }, "bin": { "errors": "bin/cli.mjs" } }, "sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ=="],
567553

568-
"@solana/web3.js/node-fetch": ["[email protected]", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="],
569-
570554
"@solana/web3.js/superstruct": ["[email protected]", "", {}, "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A=="],
571555

572-
"cross-fetch/node-fetch": ["[email protected]", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="],
573-
574556
"jayson/@types/node": ["@types/[email protected]", "", {}, "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="],
575557

576558
"jayson/commander": ["[email protected]", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
@@ -589,8 +571,6 @@
589571

590572
"rpc-websockets/eventemitter3": ["[email protected]", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="],
591573

592-
"viem/@noble/curves": ["@noble/[email protected]", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g=="],
593-
594574
"@solana/codecs-data-structures/@solana/errors/commander": ["[email protected]", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="],
595575

596576
"@solana/codecs-strings/@solana/errors/commander": ["[email protected]", "", {}, "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA=="],

package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
"keccak256": "^1.0.6",
2929
"lint-staged": "^16.1.2",
3030
"lodash": "^4.17.21",
31-
"lodash-es": "^4.17.21",
32-
"node-fetch": "^3.3.2",
3331
"merkletreejs": "^0.5.2",
3432
"prettier": "^2.8.8",
3533
"solana-bankrun": "^0.4.0",

scripts/ts/init-lockup.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ async function configureTestingEnvironment() {
117117

118118
async function initSablierLockup() {
119119
await lockupProgram.methods
120-
.initialize(senderKeys.publicKey, ProgramId.CHAINLINK_PROGRAM_ID, ProgramId.CHAINLINK_SOL_USD_FEED_ID)
120+
.initialize(senderKeys.publicKey, ProgramId.CHAINLINK_PROGRAM, ProgramId.CHAINLINK_SOL_USD_FEED)
121121
.signers([senderKeys])
122122
.accounts({
123123
initializer: senderKeys.publicKey,

scripts/ts/init-merkle-instant.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ async function configureTestingEnvironment() {
3232

3333
async function initSablierMerkleInstant() {
3434
await merkleInstantProgram.methods
35-
.initialize(senderKeys.publicKey, ProgramId.CHAINLINK_PROGRAM_ID, ProgramId.CHAINLINK_SOL_USD_FEED_ID)
35+
.initialize(senderKeys.publicKey, ProgramId.CHAINLINK_PROGRAM, ProgramId.CHAINLINK_SOL_USD_FEED)
3636
.signers([senderKeys])
3737
.accounts({
3838
initializer: senderKeys.publicKey,

tests/common/chainlink-mock.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { LAMPORTS_PER_SOL } from "@solana/web3.js";
2+
import type BN from "bn.js";
3+
import { type AddedAccount } from "solana-bankrun";
4+
import { ProgramId } from "../../lib/constants";
5+
import { toBn } from "../../lib/helpers";
6+
7+
/// TODO: add multiple mocks scenarios to match the EVM ones:
8+
/// https://github.com/sablier-labs/evm-utils/blob/9a4139fed83788c5ffb455193f5005abf02ea366/src/mocks/ChainlinkMocks.sol
9+
export class ChainlinkMock {
10+
/// To get the mock data run the CLI: `solana account 99B2bTijsU6f1GCT73HmdR7HCFFjGMBcPZY6jZ96ynrR --url devnet --output json`
11+
/// This data is mocked at "1754142441" Unix timestamp
12+
public MOCK_CHAINLINK_DATA =
13+
"YLNFQoCBSXUCAWQUUYa2ANnUYYrbqZcNlEBTsnm1vMbAD/Shxwnxadi/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAD9IzGmE6swmiVX6E+mpeINgNJ4h4AyDGib6NC7wlNPTCAvIFVTRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAr+bMBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7PsAXAAAAAOkWjmgAAAAAoTdp0wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
14+
15+
async accountData(): Promise<AddedAccount> {
16+
const MOCK_ACCOUNT_DATA = new Uint8Array(Buffer.from(this.MOCK_CHAINLINK_DATA, "base64"));
17+
18+
return {
19+
address: ProgramId.CHAINLINK_SOL_USD_FEED,
20+
info: {
21+
data: MOCK_ACCOUNT_DATA,
22+
executable: false,
23+
lamports: 2616962,
24+
owner: ProgramId.CHAINLINK_PROGRAM,
25+
},
26+
};
27+
}
28+
29+
public calculateFeeInLamports(feeUSD: BN): BN {
30+
const price = this.getMockPrice();
31+
const decimals = this.getMockDecimals();
32+
33+
let feeInLamports: BN;
34+
if (decimals === 8) {
35+
feeInLamports = feeUSD.mul(toBn(LAMPORTS_PER_SOL)).div(toBn(price));
36+
} else {
37+
feeInLamports = feeUSD.mul(toBn(10).pow(toBn(1 + decimals))).div(toBn(price));
38+
}
39+
40+
return feeInLamports;
41+
}
42+
43+
// TODO: Fix this, I think it's incorrect
44+
public getMockPrice(): number {
45+
const bytes = new Uint8Array(Buffer.from(this.MOCK_CHAINLINK_DATA, "base64"));
46+
// Price at offset 216 (4 bytes, little-endian, unsigned)
47+
const priceRaw = (bytes[216] | (bytes[217] << 8) | (bytes[218] << 16) | (bytes[219] << 24)) >>> 0;
48+
return priceRaw;
49+
}
50+
51+
public getMockTimestamp(): number {
52+
const bytes = new Uint8Array(Buffer.from(this.MOCK_CHAINLINK_DATA, "base64"));
53+
// Timestamp at offset 208 (4 bytes, little-endian)
54+
return bytes[208] | (bytes[209] << 8) | (bytes[210] << 16) | (bytes[211] << 24);
55+
}
56+
57+
public getMockDecimals(): number {
58+
const bytes = new Uint8Array(Buffer.from(this.MOCK_CHAINLINK_DATA, "base64"));
59+
// Decimals at offset 138
60+
return bytes[138];
61+
}
62+
}

tests/common/context.ts

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import * as token from "@solana/spl-token";
2-
import { type Cluster, Connection, clusterApiUrl, Keypair, PublicKey } from "@solana/web3.js";
2+
import { Keypair, PublicKey } from "@solana/web3.js";
33
import { BankrunProvider } from "anchor-bankrun";
44
import type BN from "bn.js";
55
import {
66
type AccountInfoBytes,
7-
type AddedAccount,
87
type AddedProgram,
98
type BanksClient,
109
Clock,
@@ -16,6 +15,7 @@ import { dai, sol, usdc } from "../../lib/convertors";
1615
import { toBigInt, toBn } from "../../lib/helpers";
1716
import { type ProgramName } from "../../lib/types";
1817
import { createATAAndFund, createMint } from "./anchor-bankrun";
18+
import { ChainlinkMock } from "./chainlink-mock";
1919
import { type User } from "./types";
2020

2121
export class TestContext {
@@ -30,6 +30,9 @@ export class TestContext {
3030
public feeCollector!: User;
3131
public recipient!: User;
3232

33+
// Chainlink Mock
34+
public chainlink: ChainlinkMock = new ChainlinkMock();
35+
3336
// Tokens
3437
public dai!: PublicKey; // Token 2022
3538
public randomToken!: PublicKey; // Token standard
@@ -40,7 +43,6 @@ export class TestContext {
4043
programId: PublicKey,
4144

4245
addedPrograms: AddedProgram[] = [],
43-
addedAccountIds: PublicKey[] = [],
4446
) {
4547
const programs = [
4648
{ name: programName, programId },
@@ -51,9 +53,10 @@ export class TestContext {
5153
...addedPrograms,
5254
];
5355

56+
const addedAccountIds: PublicKey[] = [];
5457
// Add the Chainlink SOL/USD price feed program ID to the added accounts
5558
addedAccountIds.push(ProgramId.CHAINLINK_SOL_USD_FEED);
56-
const addedAccounts = await Promise.all(addedAccountIds.map((id) => this.fetchAccountDataAsFixture(id.toString())));
59+
const addedAccounts = await Promise.all(addedAccountIds.map((_id) => this.chainlink.accountData()));
5760

5861
// Start Anchor context with the provided programs & accounts
5962
this.context = await startAnchor("", programs, addedAccounts);
@@ -111,26 +114,6 @@ export class TestContext {
111114
return (await this.banksClient.getAccount(address)) !== null;
112115
}
113116

114-
async fetchAccountDataAsFixture(address: string, cluster: Cluster = "devnet"): Promise<AddedAccount> {
115-
const connection = new Connection(clusterApiUrl(cluster), "confirmed");
116-
const accountId = new PublicKey(address);
117-
118-
const raw = await connection.getAccountInfo(accountId);
119-
if (!raw) {
120-
throw new Error(`Account not found: ${address}`);
121-
}
122-
123-
return {
124-
address: accountId,
125-
info: {
126-
data: new Uint8Array(raw.data),
127-
executable: raw.executable,
128-
lamports: raw.lamports,
129-
owner: raw.owner,
130-
},
131-
};
132-
}
133-
134117
async getLamportsOf(user: PublicKey): Promise<BN> {
135118
const balance = await this.banksClient.getBalance(user);
136119
return toBn(balance);

tests/common/oracles.ts

Lines changed: 0 additions & 57 deletions
This file was deleted.

tests/lockup/context.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,17 @@ export class LockupTestContext extends TestContext {
242242
await buildSignAndProcessTx(this.banksClient, withdrawIx, signer);
243243
}
244244

245+
async withdrawalFeeInLamports(): Promise<BN> {
246+
return await this.lockup.methods
247+
.withdrawalFeeInLamports()
248+
.accounts({
249+
chainlinkProgram: ProgramId.CHAINLINK_PROGRAM,
250+
chainlinkSolUsdFeed: ProgramId.CHAINLINK_SOL_USD_FEED,
251+
})
252+
.signers([this.defaultBankrunPayer])
253+
.view();
254+
}
255+
245256
async withdrawToken2022(salt: BN, signer: Keypair): Promise<void> {
246257
await this.withdraw({
247258
depositedTokenMint: this.dai,

0 commit comments

Comments
 (0)