From 9a0244f7d208305fc399c1401328c3d9018e7605 Mon Sep 17 00:00:00 2001 From: friedger Date: Tue, 12 Mar 2024 18:28:47 +0100 Subject: [PATCH 01/18] fix: account for locked stx --- Clarinet.toml | 4 + contracts/simnet-boot.clar | 60 ++++ .../public-pools/public-pools-strategy.clar | 3 +- deployments/default.simnet-plan.yaml | 17 +- package.json | 13 +- ...tx-mint-endpoint-with-public-pools.test.ts | 321 ++++++++++++++++++ tests/operators.test.ts | 137 ++++++++ 7 files changed, 542 insertions(+), 13 deletions(-) create mode 100644 contracts/simnet-boot.clar create mode 100644 tests/lqstx-mint-endpoint-with-public-pools.test.ts create mode 100644 tests/operators.test.ts diff --git a/Clarinet.toml b/Clarinet.toml index 99122d0..dd4d4ad 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -235,6 +235,10 @@ epoch = 2.4 path = "contracts/regtest-boot.clar" epoch = 2.4 +[contracts.simnet-boot] +path = "contracts/simnet-boot.clar" +epoch = 2.4 + [contracts.amm-swap-pool-v1-1] path = "contracts_modules/alex_v1/pool/amm-swap-pool-v1-1.clar" depends_on = ["trait-ownable", "trait-sip-010", "token-amm-swap-pool-v1-1"] diff --git a/contracts/simnet-boot.clar b/contracts/simnet-boot.clar new file mode 100644 index 0000000..ff5a3bf --- /dev/null +++ b/contracts/simnet-boot.clar @@ -0,0 +1,60 @@ +(impl-trait .proposal-trait.proposal-trait) + +(define-public (execute (sender principal)) + (begin + (try! (contract-call? .lisa-dao set-extensions (list + { extension: .lqstx-mint-endpoint, enabled: false } + { extension: .lqstx-mint-endpoint-v1-01, enabled: true } + { extension: .lqstx-vault, enabled: true } + { extension: .treasury, enabled: true } + { extension: .token-vesting, enabled: true } + { extension: .public-pools-strategy-manager, enabled: true } + { extension: .lisa-rebase, enabled: true } + { extension: .rebase-1, enabled: true } + { extension: .operators, enabled: true } + ))) + + ;; Set initial operators + (try! (contract-call? .operators set-operators (list + ;; three from ALEX + { operator: 'SP3BQ65DRM8DMTYDD5HWMN60EYC0JFS5NC2V5CWW7, enabled: true } + { operator: 'SPHFAXDZVFHMY8YR3P9J7ZCV6N89SBET203ZAY25, enabled: true } + { operator: 'SPSZ26REB731JN8H00TD010S600F4AB4Z8F0JRB7, enabled: true } + ;; three from Ryder/FAST Pool + { operator: 'SP12BFYTH3NJ6N63KE0S50GHSYV0M91NGQND2B704, enabled: true } + { operator: 'SP1ZPTDQ3801C1AYEZ37NJWNDZ3HM60HC2TCFP228, enabled: true } + { operator: 'SPGAB1P3YV109E22KXFJYM63GK0G21BYX50CQ80B, enabled: true } + ))) + ;; Set operator signal threshold, i.e. 4-of-6 + (try! (contract-call? .operators set-proposal-threshold 4)) + + ;; Set initial strategy managers, sender is the deployer + ;; TODO add manager + (try! (contract-call? .public-pools-strategy-manager set-authorised-manager sender true)) + + ;; Mint max LISA token supply (1bn) + (try! (contract-call? .token-lisa dao-mint-many (list + { recipient: .treasury, amount: u1000000000000000 } + ))) + + ;; Enable whitelist + (try! (contract-call? .lqstx-mint-endpoint-v1-01 set-use-whitelist false)) + (try! (contract-call? .lqstx-mint-endpoint-v1-01 set-whitelisted-many + (list + 'SP3BQ65DRM8DMTYDD5HWMN60EYC0JFS5NC2V5CWW7 + 'SP2VZBR9GCVM33BN0WXA05VJP6QV7CJ3Z3SQKJ5HH + 'SP12BFYTH3NJ6N63KE0S50GHSYV0M91NGQND2B704 + 'SPGAB1P3YV109E22KXFJYM63GK0G21BYX50CQ80B + 'SPFJVM9Y1A4KJ31T8ZBDESZH36YGPDAZ9WXEFC53 + ) + (list + true + true + true + true + true + ))) + (try! (contract-call? .lqstx-mint-endpoint-v1-01 set-paused false)) + (ok true) + ) +) diff --git a/contracts/strategies/public-pools/public-pools-strategy.clar b/contracts/strategies/public-pools/public-pools-strategy.clar index 7ecfb75..b368f91 100644 --- a/contracts/strategies/public-pools/public-pools-strategy.clar +++ b/contracts/strategies/public-pools/public-pools-strategy.clar @@ -90,7 +90,8 @@ ) (define-private (get-member-balance-iter (member ) (accumulator uint)) - (+ (stx-get-balance (contract-of member)) accumulator) + (let ((member-account (stx-account (contract-of member)))) + (+ (get locked member-account) (get unlocked member-account) accumulator)) ) (define-read-only (get-total-member-balances) diff --git a/deployments/default.simnet-plan.yaml b/deployments/default.simnet-plan.yaml index a19128e..1266e18 100644 --- a/deployments/default.simnet-plan.yaml +++ b/deployments/default.simnet-plan.yaml @@ -39,6 +39,7 @@ genesis: - pox - pox-2 - pox-3 + - pox-4 - lockup - costs-2 - costs-3 @@ -53,9 +54,6 @@ plan: emulated-sender: SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE path: "./.cache/requirements/SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.clar" clarity-version: 1 - epoch: "2.0" - - id: 1 - transactions: - emulated-contract-publish: contract-name: trait-sip-010 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM @@ -101,8 +99,8 @@ plan: emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM path: contracts_modules/alex_v1/traits/trait-vault.clar clarity-version: 1 - epoch: "2.05" - - id: 2 + epoch: "2.1" + - id: 1 transactions: - emulated-contract-publish: contract-name: pox-pools-1-cycle-v2 @@ -230,7 +228,7 @@ plan: path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 epoch: "2.4" - - id: 3 + - id: 2 transactions: - emulated-contract-publish: contract-name: xverse-member1 @@ -358,13 +356,18 @@ plan: path: contracts/traits/rebase-strategy-trait.clar clarity-version: 2 epoch: "2.4" - - id: 4 + - id: 3 transactions: - emulated-contract-publish: contract-name: regtest-boot emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM path: contracts/regtest-boot.clar clarity-version: 2 + - emulated-contract-publish: + contract-name: simnet-boot + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: contracts/simnet-boot.clar + clarity-version: 2 - emulated-contract-publish: contract-name: sip-010-extensions-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM diff --git a/package.json b/package.json index f351c10..07a36ee 100644 --- a/package.json +++ b/package.json @@ -19,15 +19,18 @@ }, "author": "", "license": "BSL", + "prettier": "@stacks/prettier-config", "dependencies": { - "@hirosystems/clarinet-sdk": "^1.0.0", + "@hirosystems/clarinet-sdk": "2.4.0-beta2", + "@stacks/stacking": "6.11.4-pr.36558cf.0", + "@stacks/prettier-config": "^0.0.10", "@stacks/transactions": "^6.9.0", "chokidar-cli": "^3.0.0", "ts-node": "^10.9.2", "typescript": "^5.2.2", - "vite": "^4.4.9", - "vitest": "^0.34.4", - "vitest-environment-clarinet": "^1.0.0", + "vite": "^5.1.4", + "vitest": "^1.3.1", + "vitest-environment-clarinet": "^2.0.0", "yaml": "^2.4.1" } -} \ No newline at end of file +} diff --git a/tests/lqstx-mint-endpoint-with-public-pools.test.ts b/tests/lqstx-mint-endpoint-with-public-pools.test.ts new file mode 100644 index 0000000..676175d --- /dev/null +++ b/tests/lqstx-mint-endpoint-with-public-pools.test.ts @@ -0,0 +1,321 @@ +import { tx } from '@hirosystems/clarinet-sdk'; +import { BufferCV, Cl, ResponseOkCV, TupleCV, UIntCV, cvToString } from '@stacks/transactions'; +import { describe, expect, it } from 'vitest'; + +const mintDelay = 432; +const accounts = simnet.getAccounts(); +const user = accounts.get('wallet_1')!; +const oracle = accounts.get('wallet_2')!; +const bot = accounts.get('wallet_3')!; +const manager = accounts.get('deployer')!; +const operator = accounts.get('wallet_4')!; + +const contracts = { + endpoint: 'lqstx-mint-endpoint-v1-01', + registry: 'lqstx-mint-registry', + vault: 'lqstx-vault', + lqstx: 'token-lqstx', + vlqstx: 'token-vlqstx', + wstx: 'token-wstx', + strategy: 'public-pools-strategy', + rebase: 'lisa-rebase', + rebase1: 'rebase-1', + amm: 'amm-swap-pool-v1-1', + wlqstx: 'token-wlqstx', + dao: 'lisa-dao', + boot: 'simnet-boot', + manager: 'public-pools-strategy-manager', + operators: 'operators', + proposal: 'mock-proposal', +}; + +const prepareTest = () => + simnet.mineBlock([ + tx.callPublicFn( + contracts.dao, + 'construct', + [Cl.contractPrincipal(simnet.deployer, contracts.boot)], + simnet.deployer + ), + ]); + +const getRewardCycle = () => { + return ( + simnet.callReadOnlyFn( + contracts.endpoint, + 'get-reward-cycle', + [Cl.uint(simnet.blockHeight)], + user + ).result as ResponseOkCV + ).value.value; +}; + +const getBlocksToStartOfCycle = (cycle: bigint) => { + return ( + Number( + ( + simnet.callReadOnlyFn( + contracts.endpoint, + 'get-first-burn-block-in-reward-cycle', + [Cl.uint(cycle)], + user + ).result as ResponseOkCV + ).value + ) - simnet.blockHeight + ); +}; +const goToNextCycle = () => { + const cycle = getRewardCycle(); + const blocksToMine = getBlocksToStartOfCycle(cycle + 1n); + + simnet.mineEmptyBlocks(blocksToMine); +}; + +const requestMint = () => + simnet.callPublicFn(contracts.endpoint, 'request-mint', [Cl.uint(100e6)], user); + +// lock 99 stx and request burn of 1 stx +const requestBurn = () => + simnet.mineBlock([ + tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(100e6)])], manager), + tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), + tx.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(1e6)], user), + ]); + +describe(contracts.endpoint, () => { + it('can request mint', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + const response = requestMint(); + expect(response.result).toBeOk(Cl.uint(1)); + }); + + it('can finalize mint', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + + expect(requestMint().result).toBeOk(Cl.uint(1)); + + goToNextCycle(); + + const finaliseErr = simnet.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot); + expect(finaliseErr.result).toBeErr(Cl.uint(1006)); + + simnet.mineEmptyBlocks(mintDelay + 1); // mint-delay + + let responses = simnet.mineBlock([ + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.endpoint, 'revoke-mint', [Cl.uint(1)], user), + ]); + expect(responses[0].result).toBeOk(Cl.bool(true)); + expect(responses[1].result).toBeErr(Cl.uint(1007)); + }); + + it('can revoke mint', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + + expect(requestMint().result).toBeOk(Cl.uint(1)); + + let responses = simnet.mineBlock([ + tx.callPublicFn(contracts.endpoint, 'revoke-mint', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.endpoint, 'revoke-mint', [Cl.uint(1)], user), + ]); + expect(responses[0].result).toBeErr(Cl.uint(1000)); + expect(responses[1].result).toBeOk(Cl.bool(true)); + + goToNextCycle(); + simnet.mineEmptyBlocks(mintDelay + 1); + responses = simnet.mineBlock([ + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), + ]); + expect(responses[0].result).toBeErr(Cl.uint(1007)); + }); + + it('can request burn', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + + expect(requestMint().result).toBeOk(Cl.uint(1)); + + goToNextCycle(); + simnet.mineEmptyBlocks(mintDelay + 1); + + const responses = requestBurn(); + expect(responses[0].result).toBeOk(Cl.uint(0)); + expect(responses[1].result).toBeOk(Cl.bool(true)); + expect(responses[2].result).toBeOk(Cl.uint(100e6)); + expect(responses[3].result).toBeOk(Cl.uint(100e6)); + console.log(cvToString(responses[4].result)); + expect(responses[4].result).toBeOk( + Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) + ); + }); + + it('can finalize burn', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + + expect(requestMint().result).toBeOk(Cl.uint(1)); + goToNextCycle(); + simnet.mineEmptyBlocks(mintDelay + 1); + + const burnResponses = requestBurn(); + expect(burnResponses[0].result).toBeOk(Cl.uint(0)); + expect(burnResponses[1].result).toBeOk(Cl.bool(true)); + expect(burnResponses[2].result).toBeOk(Cl.uint(100e6)); + expect(burnResponses[3].result).toBeOk(Cl.uint(100e6)); + expect(burnResponses[4].result).toBeOk( + Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) + ); + + const responses = simnet.mineBlock([ + tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.list([Cl.bool(true)])], manager), + tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), + tx.callPublicFn(contracts.rebase1, 'finalize-burn', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.endpoint, 'revoke-burn', [Cl.uint(1)], user), + ]); + expect(responses[0].result).toBeOk(Cl.uint(1e6)); + expect(responses[1].result).toBeOk(Cl.uint(100e6)); + expect(responses[2].result).toBeOk(Cl.bool(true)); + expect(responses[3].result).toBeErr(Cl.uint(1007)); + }); + + it('can revoke burn', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + + expect(requestMint().result).toBeOk(Cl.uint(1)); + goToNextCycle(); + simnet.mineEmptyBlocks(mintDelay + 1); + + const burnResponses = requestBurn(); + expect(burnResponses[0].result).toBeOk(Cl.uint(0)); + expect(burnResponses[1].result).toBeOk(Cl.bool(true)); + expect(burnResponses[2].result).toBeOk(Cl.uint(100e6)); + expect(burnResponses[3].result).toBeOk(Cl.uint(100e6)); + expect(burnResponses[4].result).toBeOk( + Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) + ); + + const responses = simnet.mineBlock([ + tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.list([Cl.bool(true)])], manager), + tx.callPublicFn(contracts.endpoint, 'revoke-burn', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.endpoint, 'revoke-burn', [Cl.uint(1)], user), + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), + ]); + expect(responses[0].result).toBeOk(Cl.uint(1e6)); + expect(responses[1].result).toBeErr(Cl.uint(1000)); + expect(responses[2].result).toBeOk(Cl.bool(true)); + expect(responses[3].result).toBeErr(Cl.uint(1007)); + }); + + it('can interact with strategies', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + + expect(requestMint().result).toBeOk(Cl.uint(1)); + + const cycle = ( + simnet.callReadOnlyFn( + contracts.endpoint, + 'get-reward-cycle', + [Cl.uint(simnet.blockHeight)], + user + ).result as ResponseOkCV + ).value.value; + const blocksToMine = + Number( + ( + simnet.callReadOnlyFn( + contracts.endpoint, + 'get-first-burn-block-in-reward-cycle', + [Cl.uint(cycle + 1n)], + user + ).result as UIntCV + ).value + ) - simnet.blockHeight; + simnet.mineEmptyBlocks(blocksToMine - 100); + + let responses = simnet.mineBlock([ + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(100e6)])], bot), + tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(100e6)])], manager), + ]); + expect(responses[0].result).toBeErr(Cl.uint(1006)); // request pending + expect(responses[1].result).toBeErr(Cl.uint(3000)); // not authorized + expect(responses[2].result).toBeOk(Cl.uint(100e6)); // 100 stx transferred, 99 stx locked + + const stxAccountFastPoolMember1 = simnet.runSnippet( + `(stx-account '${simnet.deployer}.fastpool-member1)` + ) as TupleCV<{ locked: UIntCV }>; + expect(stxAccountFastPoolMember1.data.locked).toBeUint(99e6); + + goToNextCycle(); // go to the next cycle + simnet.mineEmptyBlocks(mintDelay + 1); // mint-delay + + responses = simnet.mineBlock([ + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(100e6)], user), + tx.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(1e6)], user), + tx.callPublicFn(contracts.rebase1, 'finalize-burn', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.list([Cl.bool(true)])], bot), + tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.list([Cl.bool(true)])], manager), + tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.list([Cl.bool(true)])], manager), + tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), + tx.callPublicFn(contracts.rebase1, 'finalize-burn', [Cl.uint(1)], bot), + ]); + expect(responses[0].result).toBeOk(Cl.bool(true)); + expect(responses[1].result).toBeOk( + Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) + ); + console.log(responses[2].result); + expect(responses[2].result).toBeErr(Cl.uint(1)); // not enough funds + expect(responses[3].result).toBeErr(Cl.uint(1006)); // request pending + expect(responses[4].result).toBeErr(Cl.uint(3000)); // not authorized + expect(responses[5].result).toBeOk(Cl.uint(1e6)); // refund 1 stx + expect(responses[6].result).toBeOk(Cl.uint(0)); // refund 0 stx + expect(responses[7].result).toBeOk(Cl.uint(100e6)); // rebase 100 stx + expect(responses[8].result).toBeErr(Cl.uint(1006)); // request pending + + // refund remaining stx after unlock + goToNextCycle(); + + responses = simnet.mineBlock([ + tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.list([Cl.bool(true)])], manager), + tx.callPublicFn(contracts.rebase1, 'finalize-burn', [Cl.uint(1)], bot), + ]); + console.log(responses.map(r => r.result)); + expect(responses[0].result).toBeOk(Cl.uint(99e6)); + expect(responses[1].result).toBeOk(Cl.bool(true)); + }); + + it('can set up amm pool', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + + expect(requestMint().result).toBeOk(Cl.uint(1)); + + const cycle = getRewardCycle(); + const blocksToMine = getBlocksToStartOfCycle(cycle + 1n); + simnet.mineEmptyBlocks(blocksToMine); // go to the next cycle + + const finaliseErr = simnet.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot); + expect(finaliseErr.result).toBeErr(Cl.uint(1006)); + + simnet.mineEmptyBlocks(mintDelay + 1); // mint-delay + + let responses = simnet.mineBlock([ + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), + tx.callPublicFn( + contracts.amm, + 'create-pool', + [ + Cl.principal(simnet.deployer + '.' + contracts.wstx), + Cl.principal(simnet.deployer + '.' + contracts.wlqstx), + Cl.uint(1e8), + Cl.principal(user), + Cl.uint(1e8), + Cl.uint(1e8), + ], + user + ), + ]); + expect(responses[0].result).toBeOk(Cl.bool(true)); + expect(responses[1].result).toBeOk(Cl.bool(true)); + }); +}); diff --git a/tests/operators.test.ts b/tests/operators.test.ts new file mode 100644 index 0000000..30e5cf4 --- /dev/null +++ b/tests/operators.test.ts @@ -0,0 +1,137 @@ +import { ParsedTransactionResult, tx } from '@hirosystems/clarinet-sdk'; +import { BooleanCV, Cl, IntCV, SomeCV, TupleCV, UIntCV } from '@stacks/transactions'; +import { describe, expect, it } from 'vitest'; + +const accounts = simnet.getAccounts(); +const user = accounts.get('wallet_1')!; +const oracle = accounts.get('wallet_2')!; +const bot = accounts.get('wallet_3')!; +const manager = accounts.get('wallet_4')!; + +const contracts = { + endpoint: 'lqstx-mint-endpoint-v1-01', + registry: 'lqstx-mint-registry', + vault: 'lqstx-vault', + lqstx: 'token-lqstx', + vlqstx: 'token-vlqstx', + wstx: 'token-wstx', + strategy: 'mock-strategy', + rebase: 'lisa-rebase', + rebase1: 'rebase-mock', + amm: 'amm-swap-pool-v1-1', + wlqstx: 'token-wlqstx', + dao: 'lisa-dao', + boot: 'regtest-boot', + manager: 'mock-strategy-manager', + operators: 'operators', + proposal: 'mock-proposal', +}; + +const prepareTest = () => + simnet.mineBlock([ + tx.callPublicFn( + contracts.dao, + 'construct', + [Cl.contractPrincipal(simnet.deployer, contracts.boot)], + simnet.deployer + ), + ]); +const expectProposalDataToBe = (proposedAt: number, signals: number, executed: boolean) => { + const proposalData = simnet.getMapEntry( + contracts.operators, + 'proposals', + Cl.contractPrincipal(simnet.deployer, contracts.proposal) + ) as SomeCV>; + expect(proposalData.value).toStrictEqual( + Cl.tuple({ + 'proposed-at': Cl.uint(proposedAt), + signals: Cl.int(signals), + executed: Cl.bool(executed), + }) + ); +}; + +describe('operators contract', () => { + it('operator extension works', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + + let responses = simnet.mineBlock([ + tx.callPublicFn( + contracts.operators, + 'propose', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal)], + bot + ), + tx.callPublicFn( + contracts.operators, + 'propose', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal)], + simnet.deployer + ), + ]); + expect(responses[0].result).toBeErr(Cl.uint(1001)); + expect(responses[1].result).toBeOk(Cl.bool(false)); + + responses = simnet.mineBlock([ + tx.callPublicFn( + contracts.operators, + 'signal', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal), Cl.bool(true)], + bot + ), + tx.callPublicFn( + contracts.operators, + 'signal', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal), Cl.bool(true)], + manager + ), + ]); + expect(responses[0].result).toBeErr(Cl.uint(1001)); + expect(responses[1].result).toBeOk(Cl.bool(true)); + }); + + it('signals should be reset when reproposed', () => { + prepareTest().map((e: ParsedTransactionResult) => expect(e.result).toBeOk(Cl.bool(true))); + + let responses = simnet.mineBlock([ + tx.callPublicFn( + contracts.operators, + 'propose', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal)], + simnet.deployer + ), + tx.callPublicFn( + contracts.operators, + 'propose', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal)], + simnet.deployer + ), + ]); + expect(responses[0].result).toBeOk(Cl.bool(false)); + expect(responses[1].result).toBeErr(Cl.uint(1005)); + expectProposalDataToBe(4, 1, false); + + let responses2 = simnet.mineBlock([ + tx.callPublicFn( + contracts.operators, + 'propose', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal)], + simnet.deployer + ), + ]); + expect(responses2[0].result).toBeErr(Cl.uint(1005)); // not yet expired + + simnet.mineEmptyBlocks(143); + let responses3 = simnet.mineBlock([ + tx.callPublicFn( + contracts.operators, + 'propose', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal)], + simnet.deployer + ), + ]); + expect(responses3[0].result).toBeOk(Cl.bool(false)); + + expectProposalDataToBe(149, 1, false); + }); +}); From bd1dad5bf8355592202739e859c3db90cb270794 Mon Sep 17 00:00:00 2001 From: friedger Date: Tue, 12 Mar 2024 19:42:52 +0100 Subject: [PATCH 02/18] chore: add rebase test --- ...tx-mint-endpoint-with-public-pools.test.ts | 94 ++++++++++++++++++- 1 file changed, 90 insertions(+), 4 deletions(-) diff --git a/tests/lqstx-mint-endpoint-with-public-pools.test.ts b/tests/lqstx-mint-endpoint-with-public-pools.test.ts index 676175d..2d6a99e 100644 --- a/tests/lqstx-mint-endpoint-with-public-pools.test.ts +++ b/tests/lqstx-mint-endpoint-with-public-pools.test.ts @@ -1,5 +1,13 @@ import { tx } from '@hirosystems/clarinet-sdk'; -import { BufferCV, Cl, ResponseOkCV, TupleCV, UIntCV, cvToString } from '@stacks/transactions'; +import { + BufferCV, + Cl, + ResponseOkCV, + TupleCV, + UIntCV, + callReadOnlyFunction, + cvToString, +} from '@stacks/transactions'; import { describe, expect, it } from 'vitest'; const mintDelay = 432; @@ -9,6 +17,7 @@ const oracle = accounts.get('wallet_2')!; const bot = accounts.get('wallet_3')!; const manager = accounts.get('deployer')!; const operator = accounts.get('wallet_4')!; +const user2 = accounts.get('wallet_5')!; const contracts = { endpoint: 'lqstx-mint-endpoint-v1-01', @@ -285,14 +294,91 @@ describe(contracts.endpoint, () => { expect(responses[1].result).toBeOk(Cl.bool(true)); }); + it('can rebase', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + + let response; + response = simnet.callPublicFn(contracts.endpoint, 'request-mint', [Cl.uint(100e6)], user); + expect(response.result).toBeOk(Cl.uint(1)); + response = simnet.callPublicFn( + contracts.endpoint, + 'request-mint', + [Cl.uint(100_000_000e6)], + user2 + ); + expect(response.result).toBeOk(Cl.uint(2)); + + goToNextCycle(); // go to the next cycle + simnet.mineEmptyBlocks(mintDelay + 1); // mint-delay + + response = simnet.callPublicFn(contracts.rebase1, 'rebase', [], oracle); + expect(response.result).toBeOk(Cl.uint(0)); + + response = simnet.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot); + expect(response.result).toBeOk(Cl.bool(true)); + response = simnet.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(2)], bot); + expect(response.result).toBeOk(Cl.bool(true)); + + response = simnet.callPublicFn( + contracts.manager, + 'fund-strategy', + [ + Cl.list([ + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + Cl.uint(5_000_000e6), + ]), + ], + manager + ); + response = simnet.callPublicFn(contracts.rebase1, 'rebase', [], oracle); + expect(response.result).toBeOk(Cl.uint(100_000_100e6)); + + response = simnet.callReadOnlyFn( + contracts.lqstx, + 'get-balance', + [Cl.standardPrincipal(user)], + user + ); + expect(response.result).toBeOk(Cl.uint(100e6)); + + response = simnet.transferSTX(1_000_000e6, `${simnet.deployer}.fastpool-member1`, oracle); + + response = simnet.callPublicFn(contracts.rebase1, 'rebase', [], oracle); + expect(response.result).toBeOk(Cl.uint(101_000_100e6)); + + response = simnet.callReadOnlyFn( + contracts.lqstx, + 'get-balance', + [Cl.standardPrincipal(user)], + user + ); + expect(response.result).toBeOk(Cl.uint(100_999_999)); + }); + it('can set up amm pool', () => { prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); expect(requestMint().result).toBeOk(Cl.uint(1)); - const cycle = getRewardCycle(); - const blocksToMine = getBlocksToStartOfCycle(cycle + 1n); - simnet.mineEmptyBlocks(blocksToMine); // go to the next cycle + goToNextCycle(); // go to the next cycle const finaliseErr = simnet.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot); expect(finaliseErr.result).toBeErr(Cl.uint(1006)); From d87bd6129e41083bd00fee69ef245bf4445c8f4a Mon Sep 17 00:00:00 2001 From: friedger Date: Tue, 12 Mar 2024 23:30:38 +0100 Subject: [PATCH 03/18] chore: add test for get-share --- ...tx-mint-endpoint-with-public-pools.test.ts | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/tests/lqstx-mint-endpoint-with-public-pools.test.ts b/tests/lqstx-mint-endpoint-with-public-pools.test.ts index 2d6a99e..a88ccf9 100644 --- a/tests/lqstx-mint-endpoint-with-public-pools.test.ts +++ b/tests/lqstx-mint-endpoint-with-public-pools.test.ts @@ -359,10 +359,22 @@ describe(contracts.endpoint, () => { ); expect(response.result).toBeOk(Cl.uint(100e6)); + response = simnet.callReadOnlyFn( + contracts.lqstx, + 'get-share', + [Cl.standardPrincipal(user)], + user + ); + expect(response.result).toBeOk(Cl.uint(100e6)); + + // receive rewards response = simnet.transferSTX(1_000_000e6, `${simnet.deployer}.fastpool-member1`, oracle); + response = simnet.transferSTX(1_000_000e6, `${simnet.deployer}.fastpool-member2`, oracle); + response = simnet.transferSTX(1_000_000e6, `${simnet.deployer}.fastpool-member3`, oracle); + response = simnet.transferSTX(1_000_000e6, `${simnet.deployer}.fastpool-member4`, oracle); response = simnet.callPublicFn(contracts.rebase1, 'rebase', [], oracle); - expect(response.result).toBeOk(Cl.uint(101_000_100e6)); + expect(response.result).toBeOk(Cl.uint(104_000_100e6)); response = simnet.callReadOnlyFn( contracts.lqstx, @@ -370,7 +382,15 @@ describe(contracts.endpoint, () => { [Cl.standardPrincipal(user)], user ); - expect(response.result).toBeOk(Cl.uint(100_999_999)); + expect(response.result).toBeOk(Cl.uint(103_999_996)); + + response = simnet.callReadOnlyFn( + contracts.lqstx, + 'get-share', + [Cl.standardPrincipal(user)], + user + ); + expect(response.result).toBeOk(Cl.uint(100e6)); }); it('can set up amm pool', () => { From 03da78561a675cb4a0ff1acebee0f24b7b42ee0d Mon Sep 17 00:00:00 2001 From: friedger Date: Wed, 13 Mar 2024 10:07:38 +0100 Subject: [PATCH 04/18] chore: initalize constants from pox-3 --- contracts/extensions/lqstx-mint-endpoint.clar | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/contracts/extensions/lqstx-mint-endpoint.clar b/contracts/extensions/lqstx-mint-endpoint.clar index 7be2e0f..dc6d2c5 100644 --- a/contracts/extensions/lqstx-mint-endpoint.clar +++ b/contracts/extensions/lqstx-mint-endpoint.clar @@ -19,8 +19,9 @@ (define-data-var mint-delay uint u432) ;; mint available 3 day after cycle starts ;; corresponds to `first-burnchain-block-height` and `pox-reward-cycle-length` in pox-3 -(define-data-var activation-burn-block uint u666050) -(define-data-var reward-cycle-length uint u2100) +(define-constant pox-info (unwrap-panic (contract-call? 'SP000000000000000000002Q6VF78.pox-3 get-pox-info))) +(define-constant activation-burn-block (get first-burnchain-block-height pox-info)) +(define-constant reward-cycle-length (get reward-cycle-length pox-info)) (define-data-var use-whitelist bool false) (define-map whitelisted principal bool) @@ -74,12 +75,12 @@ (ok { vaulted-amount: vaulted-amount, request-id-idx: request-id-idx }))) (define-read-only (get-reward-cycle (burn-block uint)) - (if (>= burn-block (var-get activation-burn-block)) - (some (/ (- burn-block (var-get activation-burn-block)) (var-get reward-cycle-length))) + (if (>= burn-block activation-burn-block) + (some (/ (- burn-block activation-burn-block) reward-cycle-length)) none)) (define-read-only (get-first-burn-block-in-reward-cycle (reward-cycle uint)) - (+ (var-get activation-burn-block) (* (var-get reward-cycle-length) reward-cycle))) + (+ activation-burn-block (* reward-cycle-length reward-cycle))) (define-read-only (get-mint-delay) (var-get mint-delay)) @@ -161,16 +162,6 @@ (try! (is-dao-or-extension)) (ok (var-set mint-delay new-delay)))) -(define-public (set-activation-burn-block (new-activation-burn-block uint)) - (begin - (try! (is-dao-or-extension)) - (ok (var-set activation-burn-block new-activation-burn-block)))) - -(define-public (set-reward-cycle-length (new-reward-cycle-length uint)) - (begin - (try! (is-dao-or-extension)) - (ok (var-set reward-cycle-length new-reward-cycle-length)))) - ;; privileged calls (define-public (finalize-mint (request-id uint)) From e6336092e2319ec500a3273f989b7fc98848c96c Mon Sep 17 00:00:00 2001 From: friedger Date: Wed, 13 Mar 2024 10:10:36 +0100 Subject: [PATCH 05/18] fix: use pox constants --- contracts/regtest-boot.clar | 2 -- deployments/default.simnet-plan.yaml | 11 +++++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/contracts/regtest-boot.clar b/contracts/regtest-boot.clar index bd7c8db..94b9609 100644 --- a/contracts/regtest-boot.clar +++ b/contracts/regtest-boot.clar @@ -21,8 +21,6 @@ (try! (contract-call? .operators set-proposal-threshold 2)) (try! (contract-call? .lqstx-mint-endpoint-v1-01 set-paused false)) - (try! (contract-call? .lqstx-mint-endpoint-v1-01 set-activation-burn-block u0)) - (try! (contract-call? .lqstx-mint-endpoint-v1-01 set-reward-cycle-length u200)) (try! (contract-call? .lqstx-mint-endpoint-v1-01 set-mint-delay u14)) (try! (contract-call? .mock-strategy-manager set-authorised-manager 'ST2QXSK64YQX3CQPC530K79XWQ98XFAM9W3XKEH3N true)) (try! (contract-call? .mock-strategy-manager set-authorised-manager 'ST2NEB84ASENDXKYGJPQW86YXQCEFEX2ZQPG87ND true)) diff --git a/deployments/default.simnet-plan.yaml b/deployments/default.simnet-plan.yaml index 1266e18..5e3b9c1 100644 --- a/deployments/default.simnet-plan.yaml +++ b/deployments/default.simnet-plan.yaml @@ -54,6 +54,9 @@ plan: emulated-sender: SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE path: "./.cache/requirements/SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.clar" clarity-version: 1 + epoch: "2.0" + - id: 1 + transactions: - emulated-contract-publish: contract-name: trait-sip-010 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM @@ -99,8 +102,8 @@ plan: emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM path: contracts_modules/alex_v1/traits/trait-vault.clar clarity-version: 1 - epoch: "2.1" - - id: 1 + epoch: "2.05" + - id: 2 transactions: - emulated-contract-publish: contract-name: pox-pools-1-cycle-v2 @@ -228,7 +231,7 @@ plan: path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 epoch: "2.4" - - id: 2 + - id: 3 transactions: - emulated-contract-publish: contract-name: xverse-member1 @@ -356,7 +359,7 @@ plan: path: contracts/traits/rebase-strategy-trait.clar clarity-version: 2 epoch: "2.4" - - id: 3 + - id: 4 transactions: - emulated-contract-publish: contract-name: regtest-boot From 3eac74fd2a196b053846ea5aa1ec7db964c7d9f0 Mon Sep 17 00:00:00 2001 From: Kyle Fang Date: Wed, 13 Mar 2024 20:41:23 +0800 Subject: [PATCH 06/18] feat: add regtest fallback --- contracts/extensions/lqstx-mint-endpoint.clar | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contracts/extensions/lqstx-mint-endpoint.clar b/contracts/extensions/lqstx-mint-endpoint.clar index dc6d2c5..194241c 100644 --- a/contracts/extensions/lqstx-mint-endpoint.clar +++ b/contracts/extensions/lqstx-mint-endpoint.clar @@ -19,9 +19,13 @@ (define-data-var mint-delay uint u432) ;; mint available 3 day after cycle starts ;; corresponds to `first-burnchain-block-height` and `pox-reward-cycle-length` in pox-3 +;; __IF_MAINNET__ (define-constant pox-info (unwrap-panic (contract-call? 'SP000000000000000000002Q6VF78.pox-3 get-pox-info))) (define-constant activation-burn-block (get first-burnchain-block-height pox-info)) (define-constant reward-cycle-length (get reward-cycle-length pox-info)) +;; (define-constant activation-burn-block u0) +;; (define-constant reward-cycle-length u200) +;; __ENDIF__ (define-data-var use-whitelist bool false) (define-map whitelisted principal bool) From 7c713bc8035bc4093f06c984271e25e875c5e3a3 Mon Sep 17 00:00:00 2001 From: fiftyeightandeight Date: Thu, 14 Mar 2024 17:36:43 +0800 Subject: [PATCH 07/18] update print event on token-lqstx::transfer --- contracts/token-lqstx.clar | 7 ++++--- deployments/default.simnet-plan.yaml | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/token-lqstx.clar b/contracts/token-lqstx.clar index dc80bf1..e04f779 100644 --- a/contracts/token-lqstx.clar +++ b/contracts/token-lqstx.clar @@ -109,10 +109,11 @@ ;; public calls (define-public (transfer (amount uint) (sender principal) (recipient principal) (memo (optional (buff 2048)))) - (begin + (let ( + (shares (get-tokens-to-shares amount))) (asserts! (or (is-eq tx-sender sender) (is-eq contract-caller sender)) err-unauthorised) - (try! (ft-transfer? lqstx (get-tokens-to-shares amount) sender recipient)) - (print { type: "transfer", amount: amount, sender: sender, recipient: recipient, memo: memo }) + (try! (ft-transfer? lqstx shares sender recipient)) + (print { notification: "transfer", payload: { amount: amount, shares: shares, sender: sender, recipient: recipient, memo: memo } }) (ok true))) ;; private functions diff --git a/deployments/default.simnet-plan.yaml b/deployments/default.simnet-plan.yaml index 5e3b9c1..06d9be1 100644 --- a/deployments/default.simnet-plan.yaml +++ b/deployments/default.simnet-plan.yaml @@ -39,7 +39,6 @@ genesis: - pox - pox-2 - pox-3 - - pox-4 - lockup - costs-2 - costs-3 From 198551a143bea05a3420731ed0904d7d5b03088c Mon Sep 17 00:00:00 2001 From: friedger Date: Thu, 14 Mar 2024 10:41:48 +0100 Subject: [PATCH 08/18] chore: add replace script --- package.json | 2 +- scripts/prepare_tests.sh | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100755 scripts/prepare_tests.sh diff --git a/package.json b/package.json index 07a36ee..0e72fad 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "get-keys": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./scripts/get-secret-pubkeys.ts", "generate-secret": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./scripts/generate-secret.ts", "setup:clarity": "./scripts/clarinet_manager.sh clean && ./scripts/clarinet_manager.sh install", - "test": "vitest run", + "test": "./scripts/prepare_tests.sh && vitest run", "test:report": "vitest run -- --coverage --costs", "test:watch": "chokidar \"tests/**/*.ts\" \"contracts/**/*.clar\" -c \"npm run test:report\"" }, diff --git a/scripts/prepare_tests.sh b/scripts/prepare_tests.sh new file mode 100755 index 0000000..aca3e94 --- /dev/null +++ b/scripts/prepare_tests.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +find . -type f -name "*.clar" -exec \ + sed -i 's/SP000000000000000000002Q6VF78/ST000000000000000000002AMW42H/g' {} \; \ No newline at end of file From 877604a6ef340e9735f5cea64805fc5ebf251a32 Mon Sep 17 00:00:00 2001 From: friedger Date: Thu, 14 Mar 2024 10:42:00 +0100 Subject: [PATCH 09/18] feat: add print event for rebase --- contracts/token-lqstx.clar | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contracts/token-lqstx.clar b/contracts/token-lqstx.clar index dc80bf1..72b0f71 100644 --- a/contracts/token-lqstx.clar +++ b/contracts/token-lqstx.clar @@ -41,7 +41,9 @@ (define-public (set-reserve (new-reserve uint)) (begin (try! (is-dao-or-extension)) - (ok (var-set reserve new-reserve)))) + (var-set reserve new-reserve) + (print {notification: "rebase", payload: {reserve: (var-get reserve), total-shares: (ft-get-supply lqstx)}}) + (ok true))) (define-public (add-reserve (increment uint)) (set-reserve (+ (var-get reserve) increment))) From f3baaa715f012dac603f23d10b731c9c4d98bc08 Mon Sep 17 00:00:00 2001 From: friedger Date: Thu, 14 Mar 2024 10:49:32 +0100 Subject: [PATCH 10/18] fix: add one more block to mine --- deployments/default.simnet-plan.yaml | 11 ++++------- tests/lqstx-mint-endpoint-with-public-pools.test.ts | 1 + 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/deployments/default.simnet-plan.yaml b/deployments/default.simnet-plan.yaml index 5e3b9c1..1266e18 100644 --- a/deployments/default.simnet-plan.yaml +++ b/deployments/default.simnet-plan.yaml @@ -54,9 +54,6 @@ plan: emulated-sender: SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE path: "./.cache/requirements/SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.clar" clarity-version: 1 - epoch: "2.0" - - id: 1 - transactions: - emulated-contract-publish: contract-name: trait-sip-010 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM @@ -102,8 +99,8 @@ plan: emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM path: contracts_modules/alex_v1/traits/trait-vault.clar clarity-version: 1 - epoch: "2.05" - - id: 2 + epoch: "2.1" + - id: 1 transactions: - emulated-contract-publish: contract-name: pox-pools-1-cycle-v2 @@ -231,7 +228,7 @@ plan: path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 epoch: "2.4" - - id: 3 + - id: 2 transactions: - emulated-contract-publish: contract-name: xverse-member1 @@ -359,7 +356,7 @@ plan: path: contracts/traits/rebase-strategy-trait.clar clarity-version: 2 epoch: "2.4" - - id: 4 + - id: 3 transactions: - emulated-contract-publish: contract-name: regtest-boot diff --git a/tests/lqstx-mint-endpoint-with-public-pools.test.ts b/tests/lqstx-mint-endpoint-with-public-pools.test.ts index a88ccf9..6663208 100644 --- a/tests/lqstx-mint-endpoint-with-public-pools.test.ts +++ b/tests/lqstx-mint-endpoint-with-public-pools.test.ts @@ -284,6 +284,7 @@ describe(contracts.endpoint, () => { // refund remaining stx after unlock goToNextCycle(); + simnet.mineEmptyBlocks(1); responses = simnet.mineBlock([ tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.list([Cl.bool(true)])], manager), From f4afb490d6b8382a988f420e3488e07a65d33f28 Mon Sep 17 00:00:00 2001 From: friedger Date: Thu, 14 Mar 2024 11:04:06 +0100 Subject: [PATCH 11/18] chore: add revert prepare tests script --- deployments/default.simnet-plan.yaml | 1 + package.json | 2 +- scripts/revert_prepare_tests.sh | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) create mode 100755 scripts/revert_prepare_tests.sh diff --git a/deployments/default.simnet-plan.yaml b/deployments/default.simnet-plan.yaml index 7a525c8..1266e18 100644 --- a/deployments/default.simnet-plan.yaml +++ b/deployments/default.simnet-plan.yaml @@ -39,6 +39,7 @@ genesis: - pox - pox-2 - pox-3 + - pox-4 - lockup - costs-2 - costs-3 diff --git a/package.json b/package.json index 0e72fad..dbc3c88 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "get-keys": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./scripts/get-secret-pubkeys.ts", "generate-secret": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./scripts/generate-secret.ts", "setup:clarity": "./scripts/clarinet_manager.sh clean && ./scripts/clarinet_manager.sh install", - "test": "./scripts/prepare_tests.sh && vitest run", + "test": "./scripts/prepare_tests.sh && vitest run && ./scripts/revert_prepare_tests.sh", "test:report": "vitest run -- --coverage --costs", "test:watch": "chokidar \"tests/**/*.ts\" \"contracts/**/*.clar\" -c \"npm run test:report\"" }, diff --git a/scripts/revert_prepare_tests.sh b/scripts/revert_prepare_tests.sh new file mode 100755 index 0000000..52aeee0 --- /dev/null +++ b/scripts/revert_prepare_tests.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +find . -type f -name "*.clar" -exec \ + sed -i 's/ST000000000000000000002AMW42H/SP000000000000000000002Q6VF78/g' {} \; \ No newline at end of file From 800d0af9fcfcd5477477d35a89198a3e8f976d00 Mon Sep 17 00:00:00 2001 From: fiftyeightandeight Date: Thu, 14 Mar 2024 18:21:30 +0800 Subject: [PATCH 12/18] update print event on token-lqstx::transfer - moemo --- contracts/token-lqstx.clar | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contracts/token-lqstx.clar b/contracts/token-lqstx.clar index e04f779..d9ca529 100644 --- a/contracts/token-lqstx.clar +++ b/contracts/token-lqstx.clar @@ -113,7 +113,8 @@ (shares (get-tokens-to-shares amount))) (asserts! (or (is-eq tx-sender sender) (is-eq contract-caller sender)) err-unauthorised) (try! (ft-transfer? lqstx shares sender recipient)) - (print { notification: "transfer", payload: { amount: amount, shares: shares, sender: sender, recipient: recipient, memo: memo } }) + (match memo to-print (print to-print) 0x) + (print { notification: "transfer", payload: { amount: amount, shares: shares, sender: sender, recipient: recipient } }) (ok true))) ;; private functions From ce69b46641e1b2700d9372c90d98a7d7233f75bd Mon Sep 17 00:00:00 2001 From: fiftyeightandeight Date: Thu, 14 Mar 2024 22:31:45 +0800 Subject: [PATCH 13/18] chore: license header --- contracts/aux/lqstx-mint-registry.clar | 3 +++ contracts/boot.clar | 3 +++ contracts/deployed/lqstx-mint-endpoint.clar | 3 +++ contracts/deployed/rebase-strategy-trait.clar | 3 +++ contracts/extensions/lisa-rebase.clar | 3 +++ contracts/extensions/lqstx-mint-endpoint.clar | 3 +++ contracts/extensions/lqstx-vault.clar | 3 +++ contracts/extensions/operators.clar | 3 +++ .../extensions/public-pools-strategy-manager.clar | 3 +++ contracts/extensions/token-vesting.clar | 3 +++ contracts/extensions/treasury.clar | 3 +++ contracts/lisa-dao.clar | 3 +++ contracts/mocks/mock-proposal.clar | 3 +++ contracts/mocks/mock-strategy-manager.clar | 3 +++ contracts/mocks/mock-strategy.clar | 3 +++ contracts/mocks/rebase-mock.clar | 3 +++ contracts/mocks/token-wlqstx.clar | 3 +++ contracts/proxies/lisa-transfer-proxy.clar | 3 +++ contracts/proxies/lqstx-transfer-proxy.clar | 3 +++ contracts/proxies/stx-transfer-many-proxy.clar | 3 +++ contracts/proxies/stx-transfer-proxy.clar | 3 +++ contracts/regtest-boot.clar | 3 +++ contracts/rules/rebase-1.clar | 3 +++ contracts/simnet-boot.clar | 3 +++ .../strategies/public-pools/fastpool-member.clar | 3 +++ .../public-pools/public-pools-strategy.clar | 3 +++ contracts/strategies/public-pools/xverse-member.clar | 3 +++ contracts/token-lisa.clar | 3 +++ contracts/token-lqstx.clar | 3 +++ contracts/token-vlqstx.clar | 3 +++ contracts/traits/extension-trait.clar | 3 +++ contracts/traits/proposal-trait.clar | 3 +++ contracts/traits/proxy-trait.clar | 3 +++ contracts/traits/rebase-strategy-trait.clar | 3 +++ contracts/traits/sip-010-extensions-trait.clar | 3 +++ contracts/traits/sip-010-trait.clar | 3 +++ contracts/traits/sip-010-transferable-trait.clar | 3 +++ contracts/traits/strategy-trait.clar | 3 +++ contracts/traits/trait-rebase-sip-010.clar | 3 +++ deployments/0-init.devenet-plan.yaml | 3 +++ deployments/1-alice-delegate.devnet-plan.yaml | 3 +++ deployments/1-bob-delegate.devnet-plan.yaml | 3 +++ deployments/2-pool-delegates.devnet-plan.yaml | 3 +++ deployments/3a-alice-extends.devnet-plan.yaml | 3 +++ deployments/3b-pool-reduces.devnet-plan.yaml | 3 +++ deployments/default.devnet-plan.yaml | 3 +++ deployments/default.simnet-plan.yaml | 12 +++++++----- package-lock.json | 2 ++ pnpm-lock.yaml | 2 ++ scripts/analyse-multisig-deployment-plan.ts | 3 +++ scripts/broadcast-multisig-deployment-plan.ts | 3 +++ scripts/clarinet_manager.sh | 3 +++ scripts/config.ts | 3 +++ scripts/create-multisig-deployment-plan.ts | 3 +++ scripts/generate-secret.ts | 3 +++ scripts/get-secret-pubkeys.ts | 3 +++ scripts/prepare_tests.sh | 3 +++ scripts/revert_prepare_tests.sh | 3 +++ scripts/sign-multisig-deployment-plan.ts | 3 +++ scripts/utils.ts | 3 +++ settings/Devnet.toml | 3 +++ tests/lqstx-mint-endpoint-with-public-pools.test.ts | 3 +++ tests/lqstx-mint-endpoint.test.ts | 3 +++ tests/operators.test.ts | 3 +++ tsconfig.json | 1 + vitest.config.js | 1 - 66 files changed, 195 insertions(+), 6 deletions(-) diff --git a/contracts/aux/lqstx-mint-registry.clar b/contracts/aux/lqstx-mint-registry.clar index d3917f6..8b076f1 100644 --- a/contracts/aux/lqstx-mint-registry.clar +++ b/contracts/aux/lqstx-mint-registry.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + ;; ;; lqstx-mint-registry ;; diff --git a/contracts/boot.clar b/contracts/boot.clar index e98394f..750cb93 100644 --- a/contracts/boot.clar +++ b/contracts/boot.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .proposal-trait.proposal-trait) (define-public (execute (sender principal)) diff --git a/contracts/deployed/lqstx-mint-endpoint.clar b/contracts/deployed/lqstx-mint-endpoint.clar index 8daff19..16f79b1 100644 --- a/contracts/deployed/lqstx-mint-endpoint.clar +++ b/contracts/deployed/lqstx-mint-endpoint.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + ;; ;; lqstx-mint-endpoint ;; diff --git a/contracts/deployed/rebase-strategy-trait.clar b/contracts/deployed/rebase-strategy-trait.clar index cc631cf..8cd3d7f 100644 --- a/contracts/deployed/rebase-strategy-trait.clar +++ b/contracts/deployed/rebase-strategy-trait.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-trait rebase-strategy-trait ( (rebase () (response uint uint)) diff --git a/contracts/extensions/lisa-rebase.clar b/contracts/extensions/lisa-rebase.clar index eac1857..16bea8c 100644 --- a/contracts/extensions/lisa-rebase.clar +++ b/contracts/extensions/lisa-rebase.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (use-trait strategy-trait .strategy-trait.strategy-trait) (define-constant err-unauthorised (err u3000)) diff --git a/contracts/extensions/lqstx-mint-endpoint.clar b/contracts/extensions/lqstx-mint-endpoint.clar index 194241c..ab3bbe8 100644 --- a/contracts/extensions/lqstx-mint-endpoint.clar +++ b/contracts/extensions/lqstx-mint-endpoint.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + ;; ;; lqstx-mint-endpoint-v1-01 ;; diff --git a/contracts/extensions/lqstx-vault.clar b/contracts/extensions/lqstx-vault.clar index ba563aa..41c700a 100644 --- a/contracts/extensions/lqstx-vault.clar +++ b/contracts/extensions/lqstx-vault.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + ;; This contract holds the STX of the members (use-trait strategy-trait .strategy-trait.strategy-trait) diff --git a/contracts/extensions/operators.clar b/contracts/extensions/operators.clar index 4f21202..af3e68b 100644 --- a/contracts/extensions/operators.clar +++ b/contracts/extensions/operators.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (use-trait proposal-trait .proposal-trait.proposal-trait) (define-constant err-unauthorised (err u1000)) diff --git a/contracts/extensions/public-pools-strategy-manager.clar b/contracts/extensions/public-pools-strategy-manager.clar index c22081f..c0cc6ab 100644 --- a/contracts/extensions/public-pools-strategy-manager.clar +++ b/contracts/extensions/public-pools-strategy-manager.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-constant err-unauthorised (err u3000)) (define-map authorised-managers principal bool) diff --git a/contracts/extensions/token-vesting.clar b/contracts/extensions/token-vesting.clar index 34b4581..9432464 100644 --- a/contracts/extensions/token-vesting.clar +++ b/contracts/extensions/token-vesting.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (use-trait proxy-trait .proxy-trait.proxy-trait) (define-constant err-unauthorised (err u1000)) diff --git a/contracts/extensions/treasury.clar b/contracts/extensions/treasury.clar index 716e0e4..d9ba80d 100644 --- a/contracts/extensions/treasury.clar +++ b/contracts/extensions/treasury.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (use-trait proxy-trait .proxy-trait.proxy-trait) (use-trait sip-010-transferable-trait .sip-010-transferable-trait.sip-010-transferable-trait) diff --git a/contracts/lisa-dao.clar b/contracts/lisa-dao.clar index e24d2ba..c6baa65 100644 --- a/contracts/lisa-dao.clar +++ b/contracts/lisa-dao.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + ;; lisa dao (use-trait proposal-trait .proposal-trait.proposal-trait) diff --git a/contracts/mocks/mock-proposal.clar b/contracts/mocks/mock-proposal.clar index 12d9399..864da9f 100644 --- a/contracts/mocks/mock-proposal.clar +++ b/contracts/mocks/mock-proposal.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .proposal-trait.proposal-trait) (define-public (execute (sender principal)) diff --git a/contracts/mocks/mock-strategy-manager.clar b/contracts/mocks/mock-strategy-manager.clar index bba2df2..316fe69 100644 --- a/contracts/mocks/mock-strategy-manager.clar +++ b/contracts/mocks/mock-strategy-manager.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-constant err-unauthorised (err u1000)) (define-map authorised-managers principal bool) diff --git a/contracts/mocks/mock-strategy.clar b/contracts/mocks/mock-strategy.clar index ed185b6..eeba5f0 100644 --- a/contracts/mocks/mock-strategy.clar +++ b/contracts/mocks/mock-strategy.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .strategy-trait.strategy-trait) (define-constant err-unauthorised (err u1000)) diff --git a/contracts/mocks/rebase-mock.clar b/contracts/mocks/rebase-mock.clar index fad76e6..97739c5 100644 --- a/contracts/mocks/rebase-mock.clar +++ b/contracts/mocks/rebase-mock.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-constant PENDING 0x00) (define-constant FINALIZED 0x01) (define-constant REVOKED 0x02) diff --git a/contracts/mocks/token-wlqstx.clar b/contracts/mocks/token-wlqstx.clar index 9f66cbd..1497b3a 100644 --- a/contracts/mocks/token-wlqstx.clar +++ b/contracts/mocks/token-wlqstx.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .trait-sip-010.sip-010-trait) (define-fungible-token wlqstx) diff --git a/contracts/proxies/lisa-transfer-proxy.clar b/contracts/proxies/lisa-transfer-proxy.clar index d15eadc..f66da85 100644 --- a/contracts/proxies/lisa-transfer-proxy.clar +++ b/contracts/proxies/lisa-transfer-proxy.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .proxy-trait.proxy-trait) (define-constant err-invalid-payload (err u4000)) diff --git a/contracts/proxies/lqstx-transfer-proxy.clar b/contracts/proxies/lqstx-transfer-proxy.clar index 83634e6..bd8acbf 100644 --- a/contracts/proxies/lqstx-transfer-proxy.clar +++ b/contracts/proxies/lqstx-transfer-proxy.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .proxy-trait.proxy-trait) (define-constant err-invalid-payload (err u4000)) diff --git a/contracts/proxies/stx-transfer-many-proxy.clar b/contracts/proxies/stx-transfer-many-proxy.clar index 9a26a40..75aac18 100644 --- a/contracts/proxies/stx-transfer-many-proxy.clar +++ b/contracts/proxies/stx-transfer-many-proxy.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .proxy-trait.proxy-trait) (define-constant err-invalid-payload (err u4000)) diff --git a/contracts/proxies/stx-transfer-proxy.clar b/contracts/proxies/stx-transfer-proxy.clar index 19160d2..98c5496 100644 --- a/contracts/proxies/stx-transfer-proxy.clar +++ b/contracts/proxies/stx-transfer-proxy.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .proxy-trait.proxy-trait) (define-constant err-invalid-payload (err u4000)) diff --git a/contracts/regtest-boot.clar b/contracts/regtest-boot.clar index 94b9609..997740a 100644 --- a/contracts/regtest-boot.clar +++ b/contracts/regtest-boot.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .proposal-trait.proposal-trait) (define-public (execute (sender principal)) diff --git a/contracts/rules/rebase-1.clar b/contracts/rules/rebase-1.clar index f234748..3a3baeb 100644 --- a/contracts/rules/rebase-1.clar +++ b/contracts/rules/rebase-1.clar @@ -1,4 +1,7 @@ +;; SPDX-License-Identifier: BUSL-1.1 + + (define-constant PENDING 0x00) (define-constant FINALIZED 0x01) (define-constant REVOKED 0x02) diff --git a/contracts/simnet-boot.clar b/contracts/simnet-boot.clar index ff5a3bf..a8b986d 100644 --- a/contracts/simnet-boot.clar +++ b/contracts/simnet-boot.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .proposal-trait.proposal-trait) (define-public (execute (sender principal)) diff --git a/contracts/strategies/public-pools/fastpool-member.clar b/contracts/strategies/public-pools/fastpool-member.clar index ae74e6e..71fda8c 100644 --- a/contracts/strategies/public-pools/fastpool-member.clar +++ b/contracts/strategies/public-pools/fastpool-member.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-constant err-unauthorised (err u5000)) (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 allow-contract-caller 'SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2 none)) diff --git a/contracts/strategies/public-pools/public-pools-strategy.clar b/contracts/strategies/public-pools/public-pools-strategy.clar index b368f91..28bd353 100644 --- a/contracts/strategies/public-pools/public-pools-strategy.clar +++ b/contracts/strategies/public-pools/public-pools-strategy.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .strategy-trait.strategy-trait) (define-constant err-not-vault-caller (err u2000)) diff --git a/contracts/strategies/public-pools/xverse-member.clar b/contracts/strategies/public-pools/xverse-member.clar index 4d919c2..48c6cbe 100644 --- a/contracts/strategies/public-pools/xverse-member.clar +++ b/contracts/strategies/public-pools/xverse-member.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-constant err-unauthorised (err u5000)) (define-data-var pool-reward-pox-addr diff --git a/contracts/token-lisa.clar b/contracts/token-lisa.clar index c516f5d..37885d5 100644 --- a/contracts/token-lisa.clar +++ b/contracts/token-lisa.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (impl-trait .sip-010-trait.sip-010-trait) (define-constant err-unauthorised (err u3000)) diff --git a/contracts/token-lqstx.clar b/contracts/token-lqstx.clar index 519132c..0c846c0 100644 --- a/contracts/token-lqstx.clar +++ b/contracts/token-lqstx.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + ;; lqstx ;; diff --git a/contracts/token-vlqstx.clar b/contracts/token-vlqstx.clar index a6c1bd2..1f82be4 100644 --- a/contracts/token-vlqstx.clar +++ b/contracts/token-vlqstx.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + ;; vlqstx (define-fungible-token vlqstx) diff --git a/contracts/traits/extension-trait.clar b/contracts/traits/extension-trait.clar index 758886f..f073bd3 100644 --- a/contracts/traits/extension-trait.clar +++ b/contracts/traits/extension-trait.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-trait extension-trait ( (callback (principal (buff 2048)) (response bool uint)) diff --git a/contracts/traits/proposal-trait.clar b/contracts/traits/proposal-trait.clar index f21c9ad..647152e 100644 --- a/contracts/traits/proposal-trait.clar +++ b/contracts/traits/proposal-trait.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-trait proposal-trait ( (execute (principal) (response bool uint)) diff --git a/contracts/traits/proxy-trait.clar b/contracts/traits/proxy-trait.clar index 7618835..f0f6461 100644 --- a/contracts/traits/proxy-trait.clar +++ b/contracts/traits/proxy-trait.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-trait proxy-trait ((proxy-call ((buff 2048)) (response bool uint))) ) diff --git a/contracts/traits/rebase-strategy-trait.clar b/contracts/traits/rebase-strategy-trait.clar index ac21dd3..d319166 100644 --- a/contracts/traits/rebase-strategy-trait.clar +++ b/contracts/traits/rebase-strategy-trait.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-trait rebase-strategy-trait ( (rebase () (response uint uint)) diff --git a/contracts/traits/sip-010-extensions-trait.clar b/contracts/traits/sip-010-extensions-trait.clar index e9585c7..7258453 100644 --- a/contracts/traits/sip-010-extensions-trait.clar +++ b/contracts/traits/sip-010-extensions-trait.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-trait sip-010-extensions-trait ( (mint (uint principal) (response bool uint)) diff --git a/contracts/traits/sip-010-trait.clar b/contracts/traits/sip-010-trait.clar index 8910402..e5db26f 100644 --- a/contracts/traits/sip-010-trait.clar +++ b/contracts/traits/sip-010-trait.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-trait sip-010-trait ( ;; Transfer from the caller to a new principal diff --git a/contracts/traits/sip-010-transferable-trait.clar b/contracts/traits/sip-010-transferable-trait.clar index 562ec1f..4e5c2ee 100644 --- a/contracts/traits/sip-010-transferable-trait.clar +++ b/contracts/traits/sip-010-transferable-trait.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-trait sip-010-transferable-trait ( (transfer (uint principal principal (optional (buff 2048))) (response bool uint)) diff --git a/contracts/traits/strategy-trait.clar b/contracts/traits/strategy-trait.clar index 61cf6c5..88d6df4 100644 --- a/contracts/traits/strategy-trait.clar +++ b/contracts/traits/strategy-trait.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-trait strategy-trait ( (execute ((buff 2048)) (response uint uint)) diff --git a/contracts/traits/trait-rebase-sip-010.clar b/contracts/traits/trait-rebase-sip-010.clar index 1d6ee20..5ad6f88 100644 --- a/contracts/traits/trait-rebase-sip-010.clar +++ b/contracts/traits/trait-rebase-sip-010.clar @@ -1,3 +1,6 @@ + +;; SPDX-License-Identifier: BUSL-1.1 + (define-trait rebase-sip-010-trait ( ;; Transfer from the caller to a new principal diff --git a/deployments/0-init.devenet-plan.yaml b/deployments/0-init.devenet-plan.yaml index 9f02d9b..5f88684 100644 --- a/deployments/0-init.devenet-plan.yaml +++ b/deployments/0-init.devenet-plan.yaml @@ -1,3 +1,6 @@ +# +# SPDX-License-Identifier: BUSL-1.1 + --- id: 0 name: Devnet deployment diff --git a/deployments/1-alice-delegate.devnet-plan.yaml b/deployments/1-alice-delegate.devnet-plan.yaml index dfc3c13..9545287 100644 --- a/deployments/1-alice-delegate.devnet-plan.yaml +++ b/deployments/1-alice-delegate.devnet-plan.yaml @@ -1,3 +1,6 @@ +# +# SPDX-License-Identifier: BUSL-1.1 + --- id: 0 name: Devnet deployment diff --git a/deployments/1-bob-delegate.devnet-plan.yaml b/deployments/1-bob-delegate.devnet-plan.yaml index 8582daa..05da449 100644 --- a/deployments/1-bob-delegate.devnet-plan.yaml +++ b/deployments/1-bob-delegate.devnet-plan.yaml @@ -1,3 +1,6 @@ +# +# SPDX-License-Identifier: BUSL-1.1 + --- id: 0 name: Devnet deployment diff --git a/deployments/2-pool-delegates.devnet-plan.yaml b/deployments/2-pool-delegates.devnet-plan.yaml index 8f7279a..c33a84b 100644 --- a/deployments/2-pool-delegates.devnet-plan.yaml +++ b/deployments/2-pool-delegates.devnet-plan.yaml @@ -1,3 +1,6 @@ +# +# SPDX-License-Identifier: BUSL-1.1 + --- id: 0 name: Devnet deployment diff --git a/deployments/3a-alice-extends.devnet-plan.yaml b/deployments/3a-alice-extends.devnet-plan.yaml index 9ac4fec..8ad115e 100644 --- a/deployments/3a-alice-extends.devnet-plan.yaml +++ b/deployments/3a-alice-extends.devnet-plan.yaml @@ -1,3 +1,6 @@ +# +# SPDX-License-Identifier: BUSL-1.1 + --- id: 0 name: Devnet deployment diff --git a/deployments/3b-pool-reduces.devnet-plan.yaml b/deployments/3b-pool-reduces.devnet-plan.yaml index bd9e4fb..aa0bf3f 100644 --- a/deployments/3b-pool-reduces.devnet-plan.yaml +++ b/deployments/3b-pool-reduces.devnet-plan.yaml @@ -1,3 +1,6 @@ +# +# SPDX-License-Identifier: BUSL-1.1 + --- id: 0 name: Devnet deployment diff --git a/deployments/default.devnet-plan.yaml b/deployments/default.devnet-plan.yaml index aae7e68..bbdda89 100644 --- a/deployments/default.devnet-plan.yaml +++ b/deployments/default.devnet-plan.yaml @@ -1,3 +1,6 @@ +# +# SPDX-License-Identifier: BUSL-1.1 + --- id: 0 name: Devnet deployment diff --git a/deployments/default.simnet-plan.yaml b/deployments/default.simnet-plan.yaml index 1266e18..06d9be1 100644 --- a/deployments/default.simnet-plan.yaml +++ b/deployments/default.simnet-plan.yaml @@ -39,7 +39,6 @@ genesis: - pox - pox-2 - pox-3 - - pox-4 - lockup - costs-2 - costs-3 @@ -54,6 +53,9 @@ plan: emulated-sender: SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE path: "./.cache/requirements/SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.clar" clarity-version: 1 + epoch: "2.0" + - id: 1 + transactions: - emulated-contract-publish: contract-name: trait-sip-010 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM @@ -99,8 +101,8 @@ plan: emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM path: contracts_modules/alex_v1/traits/trait-vault.clar clarity-version: 1 - epoch: "2.1" - - id: 1 + epoch: "2.05" + - id: 2 transactions: - emulated-contract-publish: contract-name: pox-pools-1-cycle-v2 @@ -228,7 +230,7 @@ plan: path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 epoch: "2.4" - - id: 2 + - id: 3 transactions: - emulated-contract-publish: contract-name: xverse-member1 @@ -356,7 +358,7 @@ plan: path: contracts/traits/rebase-strategy-trait.clar clarity-version: 2 epoch: "2.4" - - id: 3 + - id: 4 transactions: - emulated-contract-publish: contract-name: regtest-boot diff --git a/package-lock.json b/package-lock.json index 8d45413..c1f77de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,3 +1,5 @@ + + { "name": "lisa", "version": "1.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ec145f..7d74683 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,3 +1,5 @@ + + lockfileVersion: '6.0' settings: diff --git a/scripts/analyse-multisig-deployment-plan.ts b/scripts/analyse-multisig-deployment-plan.ts index 322142c..967ca7e 100644 --- a/scripts/analyse-multisig-deployment-plan.ts +++ b/scripts/analyse-multisig-deployment-plan.ts @@ -1,3 +1,6 @@ + +// SPDX-License-Identifier: BUSL-1.1 + import { MultiSigSpendingCondition, StacksMessageType, diff --git a/scripts/broadcast-multisig-deployment-plan.ts b/scripts/broadcast-multisig-deployment-plan.ts index 406485b..3ac4981 100644 --- a/scripts/broadcast-multisig-deployment-plan.ts +++ b/scripts/broadcast-multisig-deployment-plan.ts @@ -1,3 +1,6 @@ + +// SPDX-License-Identifier: BUSL-1.1 + import { deserializeTransaction, getNonce, diff --git a/scripts/clarinet_manager.sh b/scripts/clarinet_manager.sh index 6c3ac0d..fd9bb5f 100755 --- a/scripts/clarinet_manager.sh +++ b/scripts/clarinet_manager.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# +# SPDX-License-Identifier: BUSL-1.1 + set -euo pipefail DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" diff --git a/scripts/config.ts b/scripts/config.ts index 7f763f1..ed2ef38 100644 --- a/scripts/config.ts +++ b/scripts/config.ts @@ -1,3 +1,6 @@ + +// SPDX-License-Identifier: BUSL-1.1 + import fs from "fs"; import { hexToBytes } from '@stacks/common'; import { AddressHashMode, TransactionVersion, addressFromHashMode, createStacksPrivateKey, publicKeyFromBytes } from "@stacks/transactions"; diff --git a/scripts/create-multisig-deployment-plan.ts b/scripts/create-multisig-deployment-plan.ts index 9bd1880..d441099 100755 --- a/scripts/create-multisig-deployment-plan.ts +++ b/scripts/create-multisig-deployment-plan.ts @@ -1,3 +1,6 @@ + +// SPDX-License-Identifier: BUSL-1.1 + import { makeUnsignedContractDeploy, StacksPublicKey, diff --git a/scripts/generate-secret.ts b/scripts/generate-secret.ts index 3c51cb6..fcb098a 100644 --- a/scripts/generate-secret.ts +++ b/scripts/generate-secret.ts @@ -1,3 +1,6 @@ + +// SPDX-License-Identifier: BUSL-1.1 + import { makeRandomPrivKey } from "@stacks/transactions"; import { bytesToHex } from '@stacks/common'; diff --git a/scripts/get-secret-pubkeys.ts b/scripts/get-secret-pubkeys.ts index fe57b68..11da2ba 100644 --- a/scripts/get-secret-pubkeys.ts +++ b/scripts/get-secret-pubkeys.ts @@ -1,3 +1,6 @@ + +// SPDX-License-Identifier: BUSL-1.1 + import { AddressHashMode, AddressVersion, addressFromPublicKeys, addressToString, compressPublicKey, pubKeyfromPrivKey } from "@stacks/transactions"; import { getNetwork, getStacksPubkeys, loadConfig } from "./config.ts"; import { bytesToHex } from '@stacks/common'; diff --git a/scripts/prepare_tests.sh b/scripts/prepare_tests.sh index aca3e94..7dcda48 100755 --- a/scripts/prepare_tests.sh +++ b/scripts/prepare_tests.sh @@ -1,4 +1,7 @@ #!/bin/bash +# +# SPDX-License-Identifier: BUSL-1.1 + find . -type f -name "*.clar" -exec \ sed -i 's/SP000000000000000000002Q6VF78/ST000000000000000000002AMW42H/g' {} \; \ No newline at end of file diff --git a/scripts/revert_prepare_tests.sh b/scripts/revert_prepare_tests.sh index 52aeee0..070823f 100755 --- a/scripts/revert_prepare_tests.sh +++ b/scripts/revert_prepare_tests.sh @@ -1,4 +1,7 @@ #!/bin/bash +# +# SPDX-License-Identifier: BUSL-1.1 + find . -type f -name "*.clar" -exec \ sed -i 's/ST000000000000000000002AMW42H/SP000000000000000000002Q6VF78/g' {} \; \ No newline at end of file diff --git a/scripts/sign-multisig-deployment-plan.ts b/scripts/sign-multisig-deployment-plan.ts index 20db9bf..0e18057 100644 --- a/scripts/sign-multisig-deployment-plan.ts +++ b/scripts/sign-multisig-deployment-plan.ts @@ -1,3 +1,6 @@ + +// SPDX-License-Identifier: BUSL-1.1 + import { TransactionSigner, compressPublicKey, diff --git a/scripts/utils.ts b/scripts/utils.ts index 8afcd81..3a32ddd 100644 --- a/scripts/utils.ts +++ b/scripts/utils.ts @@ -1,3 +1,6 @@ + +// SPDX-License-Identifier: BUSL-1.1 + import { Address, SpendingCondition, StacksPublicKey } from "@stacks/transactions"; import fs from "fs"; diff --git a/settings/Devnet.toml b/settings/Devnet.toml index 68f53cc..ca50664 100644 --- a/settings/Devnet.toml +++ b/settings/Devnet.toml @@ -1,3 +1,6 @@ +# +# SPDX-License-Identifier: BUSL-1.1 + [network] name = "devnet" deployment_fee_rate = 10 diff --git a/tests/lqstx-mint-endpoint-with-public-pools.test.ts b/tests/lqstx-mint-endpoint-with-public-pools.test.ts index 6663208..b3a76fe 100644 --- a/tests/lqstx-mint-endpoint-with-public-pools.test.ts +++ b/tests/lqstx-mint-endpoint-with-public-pools.test.ts @@ -1,3 +1,6 @@ + +// SPDX-License-Identifier: BUSL-1.1 + import { tx } from '@hirosystems/clarinet-sdk'; import { BufferCV, diff --git a/tests/lqstx-mint-endpoint.test.ts b/tests/lqstx-mint-endpoint.test.ts index 071b725..51f2a1b 100644 --- a/tests/lqstx-mint-endpoint.test.ts +++ b/tests/lqstx-mint-endpoint.test.ts @@ -1,3 +1,6 @@ + +// SPDX-License-Identifier: BUSL-1.1 + import { tx } from '@hirosystems/clarinet-sdk'; import { Cl } from '@stacks/transactions'; import { describe, expect, it } from 'vitest'; diff --git a/tests/operators.test.ts b/tests/operators.test.ts index 30e5cf4..b5c8a40 100644 --- a/tests/operators.test.ts +++ b/tests/operators.test.ts @@ -1,3 +1,6 @@ + +// SPDX-License-Identifier: BUSL-1.1 + import { ParsedTransactionResult, tx } from '@hirosystems/clarinet-sdk'; import { BooleanCV, Cl, IntCV, SomeCV, TupleCV, UIntCV } from '@stacks/transactions'; import { describe, expect, it } from 'vitest'; diff --git a/tsconfig.json b/tsconfig.json index 1bdaf36..4b4a096 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,5 @@ + { "compilerOptions": { "target": "ESNext", diff --git a/vitest.config.js b/vitest.config.js index 36a2261..8d01c50 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -1,4 +1,3 @@ - /// import { defineConfig } from "vite"; From 3d66eb1452777d0c203535453bef8797c2140347 Mon Sep 17 00:00:00 2001 From: fiftyeightandeight Date: Fri, 15 Mar 2024 10:31:36 +0800 Subject: [PATCH 14/18] fix prepare_tests.sh to work on macos --- contracts/deployed/lqstx-mint-endpoint.clar | 4 +- contracts/extensions/lqstx-mint-endpoint.clar | 2 +- .../public-pools/fastpool-member.clar | 4 +- .../public-pools/xverse-member.clar | 4 +- deployments/default.simnet-plan.yaml | 350 +++++++++--------- scripts/prepare_tests.sh | 2 +- 6 files changed, 182 insertions(+), 184 deletions(-) diff --git a/contracts/deployed/lqstx-mint-endpoint.clar b/contracts/deployed/lqstx-mint-endpoint.clar index 16f79b1..5262b1f 100644 --- a/contracts/deployed/lqstx-mint-endpoint.clar +++ b/contracts/deployed/lqstx-mint-endpoint.clar @@ -79,14 +79,14 @@ ;; @dev used for testing only (define-read-only (get-reward-cycle (stacks-height uint)) - ;; (some (contract-call? 'SP000000000000000000002Q6VF78.pox-3 current-pox-reward-cycle))) + ;; (some (contract-call? 'ST000000000000000000002AMW42H.pox-3 current-pox-reward-cycle))) (if (>= stacks-height (var-get activation-block)) (some (/ (- stacks-height (var-get activation-block)) (var-get reward-cycle-length))) none)) ;; @dev used for testing only (define-read-only (get-first-stacks-block-in-reward-cycle (reward-cycle uint)) - ;; (contract-call? 'SP000000000000000000002Q6VF78.pox-3 reward-cycle-to-burn-height reward-cycle)) + ;; (contract-call? 'ST000000000000000000002AMW42H.pox-3 reward-cycle-to-burn-height reward-cycle)) (+ (var-get activation-block) (* (var-get reward-cycle-length) reward-cycle))) (define-read-only (get-mint-delay) diff --git a/contracts/extensions/lqstx-mint-endpoint.clar b/contracts/extensions/lqstx-mint-endpoint.clar index ab3bbe8..16e4794 100644 --- a/contracts/extensions/lqstx-mint-endpoint.clar +++ b/contracts/extensions/lqstx-mint-endpoint.clar @@ -23,7 +23,7 @@ ;; corresponds to `first-burnchain-block-height` and `pox-reward-cycle-length` in pox-3 ;; __IF_MAINNET__ -(define-constant pox-info (unwrap-panic (contract-call? 'SP000000000000000000002Q6VF78.pox-3 get-pox-info))) +(define-constant pox-info (unwrap-panic (contract-call? 'ST000000000000000000002AMW42H.pox-3 get-pox-info))) (define-constant activation-burn-block (get first-burnchain-block-height pox-info)) (define-constant reward-cycle-length (get reward-cycle-length pox-info)) ;; (define-constant activation-burn-block u0) diff --git a/contracts/strategies/public-pools/fastpool-member.clar b/contracts/strategies/public-pools/fastpool-member.clar index 71fda8c..7e5154f 100644 --- a/contracts/strategies/public-pools/fastpool-member.clar +++ b/contracts/strategies/public-pools/fastpool-member.clar @@ -3,7 +3,7 @@ (define-constant err-unauthorised (err u5000)) -(as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 allow-contract-caller 'SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2 none)) +(as-contract (contract-call? 'ST000000000000000000002AMW42H.pox-3 allow-contract-caller 'SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2 none)) (define-read-only (is-strategy-caller) (ok (asserts! (is-eq contract-caller .public-pools-strategy) err-unauthorised)) @@ -20,7 +20,7 @@ (define-public (revoke-delegate-stx) (begin (try! (is-strategy-caller)) - (match (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 revoke-delegate-stx)) + (match (as-contract (contract-call? 'ST000000000000000000002AMW42H.pox-3 revoke-delegate-stx)) ok-val (ok ok-val) err-val (err (to-uint err-val)) ) diff --git a/contracts/strategies/public-pools/xverse-member.clar b/contracts/strategies/public-pools/xverse-member.clar index 48c6cbe..86f4ce1 100644 --- a/contracts/strategies/public-pools/xverse-member.clar +++ b/contracts/strategies/public-pools/xverse-member.clar @@ -8,7 +8,7 @@ { hashbytes: 0x827a04335a9eb22cb46979f180670c8e7ba453b5, version: 0x04 } ) -(as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 allow-contract-caller 'SP001SFSMC2ZY76PD4M68P3WGX154XCH7NE3TYMX.pox-pools-1-cycle-v2 none)) +(as-contract (contract-call? 'ST000000000000000000002AMW42H.pox-3 allow-contract-caller 'SP001SFSMC2ZY76PD4M68P3WGX154XCH7NE3TYMX.pox-pools-1-cycle-v2 none)) (define-read-only (is-dao-or-extension) (ok (asserts! (or (is-eq tx-sender .lisa-dao) (contract-call? .lisa-dao is-extension contract-caller)) err-unauthorised)) @@ -37,7 +37,7 @@ (define-public (revoke-delegate-stx) (begin (try! (is-strategy-caller)) - (match (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 revoke-delegate-stx)) + (match (as-contract (contract-call? 'ST000000000000000000002AMW42H.pox-3 revoke-delegate-stx)) ok-val (ok ok-val) err-val (err (to-uint err-val)) ) diff --git a/deployments/default.simnet-plan.yaml b/deployments/default.simnet-plan.yaml index 06d9be1..3adbb44 100644 --- a/deployments/default.simnet-plan.yaml +++ b/deployments/default.simnet-plan.yaml @@ -39,6 +39,7 @@ genesis: - pox - pox-2 - pox-3 + - pox-4 - lockup - costs-2 - costs-3 @@ -51,353 +52,350 @@ plan: - emulated-contract-publish: contract-name: sip-010-trait-ft-standard emulated-sender: SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE - path: "./.cache/requirements/SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.clar" + path: /Users/chanahn/githome/liquid-stacking/./.cache/requirements/SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.clar clarity-version: 1 - epoch: "2.0" - - id: 1 - transactions: - emulated-contract-publish: contract-name: trait-sip-010 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts_modules/alex_v1/traits/trait-sip-010.clar + path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/traits/trait-sip-010.clar clarity-version: 1 - emulated-contract-publish: contract-name: trait-flash-loan-user emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts_modules/alex_v1/traits/trait-flash-loan-user.clar + path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/traits/trait-flash-loan-user.clar clarity-version: 1 - emulated-contract-publish: contract-name: trait-semi-fungible emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts_modules/alex_v1/traits/trait-semi-fungible.clar + path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/traits/trait-semi-fungible.clar clarity-version: 1 - emulated-contract-publish: contract-name: alex-vault-v1-1 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts_modules/alex_v1/alex-vault-v1-1.clar + path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/alex-vault-v1-1.clar clarity-version: 1 - emulated-contract-publish: contract-name: trait-ownable emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts_modules/alex_v1/traits/trait-ownable.clar + path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/traits/trait-ownable.clar clarity-version: 1 - emulated-contract-publish: contract-name: token-amm-swap-pool-v1-1 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts_modules/alex_v1/pool-token/token-amm-swap-pool-v1-1.clar + path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/pool-token/token-amm-swap-pool-v1-1.clar clarity-version: 1 - emulated-contract-publish: contract-name: amm-swap-pool-v1-1 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts_modules/alex_v1/pool/amm-swap-pool-v1-1.clar + path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/pool/amm-swap-pool-v1-1.clar clarity-version: 1 - emulated-contract-publish: contract-name: token-wstx emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts_modules/alex_v1/wrapped-token/token-wstx.clar + path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/wrapped-token/token-wstx.clar clarity-version: 1 - emulated-contract-publish: contract-name: trait-vault emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts_modules/alex_v1/traits/trait-vault.clar + path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/traits/trait-vault.clar clarity-version: 1 - epoch: "2.05" - - id: 2 + epoch: "2.1" + - id: 1 transactions: - emulated-contract-publish: contract-name: pox-pools-1-cycle-v2 emulated-sender: SP001SFSMC2ZY76PD4M68P3WGX154XCH7NE3TYMX - path: "./.cache/requirements/SP001SFSMC2ZY76PD4M68P3WGX154XCH7NE3TYMX.pox-pools-1-cycle-v2.clar" + path: /Users/chanahn/githome/liquid-stacking/./.cache/requirements/SP001SFSMC2ZY76PD4M68P3WGX154XCH7NE3TYMX.pox-pools-1-cycle-v2.clar clarity-version: 2 - emulated-contract-publish: contract-name: pox-fast-pool-v2 emulated-sender: SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP - path: "./.cache/requirements/SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2.clar" + path: /Users/chanahn/githome/liquid-stacking/./.cache/requirements/SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2.clar clarity-version: 2 - emulated-contract-publish: contract-name: extension-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/traits/extension-trait.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/traits/extension-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: proposal-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/traits/proposal-trait.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/traits/proposal-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: lisa-dao emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/lisa-dao.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/lisa-dao.clar clarity-version: 2 - emulated-contract-publish: contract-name: sip-010-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/traits/sip-010-trait.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/traits/sip-010-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: lqstx-mint-registry emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/aux/lqstx-mint-registry.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/aux/lqstx-mint-registry.clar clarity-version: 2 - emulated-contract-publish: contract-name: proxy-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/traits/proxy-trait.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/traits/proxy-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: strategy-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/traits/strategy-trait.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/traits/strategy-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: lqstx-vault emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/extensions/lqstx-vault.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/lqstx-vault.clar clarity-version: 2 - emulated-contract-publish: contract-name: stx-transfer-proxy emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/proxies/stx-transfer-proxy.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/proxies/stx-transfer-proxy.clar clarity-version: 2 - emulated-contract-publish: contract-name: token-lqstx emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/token-lqstx.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/token-lqstx.clar clarity-version: 2 - emulated-contract-publish: contract-name: token-vlqstx emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/token-vlqstx.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/token-vlqstx.clar clarity-version: 2 - emulated-contract-publish: contract-name: lqstx-mint-endpoint-v1-01 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/extensions/lqstx-mint-endpoint.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/lqstx-mint-endpoint.clar clarity-version: 2 - emulated-contract-publish: contract-name: operators emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/extensions/operators.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/operators.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member1 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/fastpool-member.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member10 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/fastpool-member.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member2 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/fastpool-member.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member3 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/fastpool-member.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member4 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/fastpool-member.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member5 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/fastpool-member.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member6 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/fastpool-member.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member7 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/fastpool-member.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member8 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/fastpool-member.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member9 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/fastpool-member.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar + clarity-version: 2 + epoch: "2.4" + - id: 2 + transactions: + - emulated-contract-publish: + contract-name: xverse-member1 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: xverse-member10 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: xverse-member2 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: xverse-member3 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: xverse-member4 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: xverse-member5 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: xverse-member6 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: xverse-member7 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: xverse-member8 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: xverse-member9 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: public-pools-strategy + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/public-pools-strategy.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: public-pools-strategy-manager + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/public-pools-strategy-manager.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: token-lisa + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/token-lisa.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: boot + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/boot.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: lisa-rebase + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/lisa-rebase.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: lisa-transfer-proxy + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/proxies/lisa-transfer-proxy.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: rebase-strategy-trait + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/deployed/rebase-strategy-trait.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: lqstx-mint-endpoint + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/deployed/lqstx-mint-endpoint.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: lqstx-transfer-proxy + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/proxies/lqstx-transfer-proxy.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: mock-proposal + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/mocks/mock-proposal.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: mock-strategy + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/mocks/mock-strategy.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: mock-strategy-manager + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/mocks/mock-strategy-manager.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: rebase-1 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/rules/rebase-1.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: rebase-mock + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/mocks/rebase-mock.clar + clarity-version: 2 + - emulated-contract-publish: + contract-name: rebase-strategy-trait-v1-01 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: /Users/chanahn/githome/liquid-stacking/contracts/traits/rebase-strategy-trait.clar clarity-version: 2 epoch: "2.4" - id: 3 - transactions: - - emulated-contract-publish: - contract-name: xverse-member1 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/xverse-member.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: xverse-member10 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/xverse-member.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: xverse-member2 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/xverse-member.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: xverse-member3 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/xverse-member.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: xverse-member4 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/xverse-member.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: xverse-member5 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/xverse-member.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: xverse-member6 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/xverse-member.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: xverse-member7 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/xverse-member.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: xverse-member8 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/xverse-member.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: xverse-member9 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/xverse-member.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: public-pools-strategy - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/strategies/public-pools/public-pools-strategy.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: public-pools-strategy-manager - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/extensions/public-pools-strategy-manager.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: token-lisa - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/token-lisa.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: boot - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/boot.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: lisa-rebase - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/extensions/lisa-rebase.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: lisa-transfer-proxy - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/proxies/lisa-transfer-proxy.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: rebase-strategy-trait - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/deployed/rebase-strategy-trait.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: lqstx-mint-endpoint - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/deployed/lqstx-mint-endpoint.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: lqstx-transfer-proxy - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/proxies/lqstx-transfer-proxy.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: mock-proposal - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/mocks/mock-proposal.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: mock-strategy - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/mocks/mock-strategy.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: mock-strategy-manager - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/mocks/mock-strategy-manager.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: rebase-1 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/rules/rebase-1.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: rebase-mock - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/mocks/rebase-mock.clar - clarity-version: 2 - - emulated-contract-publish: - contract-name: rebase-strategy-trait-v1-01 - emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/traits/rebase-strategy-trait.clar - clarity-version: 2 - epoch: "2.4" - - id: 4 transactions: - emulated-contract-publish: contract-name: regtest-boot emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/regtest-boot.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/regtest-boot.clar clarity-version: 2 - emulated-contract-publish: contract-name: simnet-boot emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/simnet-boot.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/simnet-boot.clar clarity-version: 2 - emulated-contract-publish: contract-name: sip-010-extensions-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/traits/sip-010-extensions-trait.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/traits/sip-010-extensions-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: sip-010-transferable-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/traits/sip-010-transferable-trait.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/traits/sip-010-transferable-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: stx-transfer-many-proxy emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/proxies/stx-transfer-many-proxy.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/proxies/stx-transfer-many-proxy.clar clarity-version: 2 - emulated-contract-publish: contract-name: token-vesting emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/extensions/token-vesting.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/token-vesting.clar clarity-version: 2 - emulated-contract-publish: contract-name: token-wlqstx emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/mocks/token-wlqstx.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/mocks/token-wlqstx.clar clarity-version: 2 - emulated-contract-publish: contract-name: treasury emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: contracts/extensions/treasury.clar + path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/treasury.clar clarity-version: 2 epoch: "2.4" diff --git a/scripts/prepare_tests.sh b/scripts/prepare_tests.sh index 7dcda48..fae46a0 100755 --- a/scripts/prepare_tests.sh +++ b/scripts/prepare_tests.sh @@ -4,4 +4,4 @@ find . -type f -name "*.clar" -exec \ - sed -i 's/SP000000000000000000002Q6VF78/ST000000000000000000002AMW42H/g' {} \; \ No newline at end of file + sed -i '' -e 's/SP000000000000000000002Q6VF78/ST000000000000000000002AMW42H/g' {} \; \ No newline at end of file From 26b3f045231179d811d96a48a0729d88d0534d62 Mon Sep 17 00:00:00 2001 From: fiftyeightandeight Date: Fri, 15 Mar 2024 10:45:24 +0800 Subject: [PATCH 15/18] verbose test --- tests/lqstx-mint-endpoint-with-public-pools.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/lqstx-mint-endpoint-with-public-pools.test.ts b/tests/lqstx-mint-endpoint-with-public-pools.test.ts index b3a76fe..0622844 100644 --- a/tests/lqstx-mint-endpoint-with-public-pools.test.ts +++ b/tests/lqstx-mint-endpoint-with-public-pools.test.ts @@ -251,6 +251,7 @@ describe(contracts.endpoint, () => { ]); expect(responses[0].result).toBeErr(Cl.uint(1006)); // request pending expect(responses[1].result).toBeErr(Cl.uint(3000)); // not authorized + responses[2].events.map((e: any) => console.log(e.data.contract_identifier, e.data.value)); expect(responses[2].result).toBeOk(Cl.uint(100e6)); // 100 stx transferred, 99 stx locked const stxAccountFastPoolMember1 = simnet.runSnippet( From cdd6f7635c608d9e6ce968b25d49c7d9e32e592c Mon Sep 17 00:00:00 2001 From: fiftyeightandeight Date: Fri, 15 Mar 2024 10:58:27 +0800 Subject: [PATCH 16/18] increase mint size to 1m --- .../lqstx-mint-endpoint-with-public-pools.test.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/lqstx-mint-endpoint-with-public-pools.test.ts b/tests/lqstx-mint-endpoint-with-public-pools.test.ts index 0622844..770387a 100644 --- a/tests/lqstx-mint-endpoint-with-public-pools.test.ts +++ b/tests/lqstx-mint-endpoint-with-public-pools.test.ts @@ -84,14 +84,14 @@ const goToNextCycle = () => { }; const requestMint = () => - simnet.callPublicFn(contracts.endpoint, 'request-mint', [Cl.uint(100e6)], user); + simnet.callPublicFn(contracts.endpoint, 'request-mint', [Cl.uint(1_000_000e6)], user); // lock 99 stx and request burn of 1 stx const requestBurn = () => simnet.mineBlock([ tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), - tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(100e6)])], manager), + tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(1_000_000e6)])], manager), tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), tx.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(1e6)], user), ]); @@ -246,17 +246,17 @@ describe(contracts.endpoint, () => { let responses = simnet.mineBlock([ tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), - tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(100e6)])], bot), - tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(100e6)])], manager), + tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(1_000_000e6)])], bot), + tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(1_000_000e6)])], manager), ]); expect(responses[0].result).toBeErr(Cl.uint(1006)); // request pending expect(responses[1].result).toBeErr(Cl.uint(3000)); // not authorized - responses[2].events.map((e: any) => console.log(e.data.contract_identifier, e.data.value)); - expect(responses[2].result).toBeOk(Cl.uint(100e6)); // 100 stx transferred, 99 stx locked + responses[2].events.map((e: any) => console.log(e)); + expect(responses[2].result).toBeOk(Cl.uint(1_000_000e6)); // 100 stx transferred, 99 stx locked const stxAccountFastPoolMember1 = simnet.runSnippet( `(stx-account '${simnet.deployer}.fastpool-member1)` - ) as TupleCV<{ locked: UIntCV }>; + ) as TupleCV<{ locked: UIntCV, unlocked: UIntCV }>; expect(stxAccountFastPoolMember1.data.locked).toBeUint(99e6); goToNextCycle(); // go to the next cycle From ae75fad77018d1c00790dc60eb2b3c98c08f1044 Mon Sep 17 00:00:00 2001 From: friedger Date: Fri, 15 Mar 2024 14:42:45 +0100 Subject: [PATCH 17/18] chore: add tests for operator contracts --- contracts/regtest-boot.clar | 1 + package.json | 5 +- ...tx-mint-endpoint-with-public-pools.test.ts | 2 - tests/lqstx-mint-endpoint.test.ts | 395 ++++++------------ tests/operators.test.ts | 54 ++- 5 files changed, 181 insertions(+), 276 deletions(-) diff --git a/contracts/regtest-boot.clar b/contracts/regtest-boot.clar index 94b9609..086c272 100644 --- a/contracts/regtest-boot.clar +++ b/contracts/regtest-boot.clar @@ -17,6 +17,7 @@ {operator: tx-sender, enabled: true} {operator: 'ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM, enabled: true} {operator: 'ST2NEB84ASENDXKYGJPQW86YXQCEFEX2ZQPG87ND, enabled: true} + {operator: 'ST2REHHS5J3CERCRBEPMGH7921Q6PYKAADT7JP2VB, enabled: true} ))) (try! (contract-call? .operators set-proposal-threshold 2)) diff --git a/package.json b/package.json index dbc3c88..3754a54 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,9 @@ "generate-secret": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./scripts/generate-secret.ts", "setup:clarity": "./scripts/clarinet_manager.sh clean && ./scripts/clarinet_manager.sh install", "test": "./scripts/prepare_tests.sh && vitest run && ./scripts/revert_prepare_tests.sh", - "test:report": "vitest run -- --coverage --costs", - "test:watch": "chokidar \"tests/**/*.ts\" \"contracts/**/*.clar\" -c \"npm run test:report\"" + "test:report": "./scripts/prepare_tests.sh && vitest run -- --coverage --costs && ./scripts/revert_prepare_tests.sh", + "test:watch": "chokidar \"tests/**/*.ts\" \"contracts/**/*.clar\" -c \"npm run test:report\"", + "generate:report": "genhtml --branch-coverage -o coverage lcov.info" }, "author": "", "license": "BSL", diff --git a/tests/lqstx-mint-endpoint-with-public-pools.test.ts b/tests/lqstx-mint-endpoint-with-public-pools.test.ts index 6663208..79b8c58 100644 --- a/tests/lqstx-mint-endpoint-with-public-pools.test.ts +++ b/tests/lqstx-mint-endpoint-with-public-pools.test.ts @@ -273,7 +273,6 @@ describe(contracts.endpoint, () => { expect(responses[1].result).toBeOk( Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) ); - console.log(responses[2].result); expect(responses[2].result).toBeErr(Cl.uint(1)); // not enough funds expect(responses[3].result).toBeErr(Cl.uint(1006)); // request pending expect(responses[4].result).toBeErr(Cl.uint(3000)); // not authorized @@ -290,7 +289,6 @@ describe(contracts.endpoint, () => { tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.list([Cl.bool(true)])], manager), tx.callPublicFn(contracts.rebase1, 'finalize-burn', [Cl.uint(1)], bot), ]); - console.log(responses.map(r => r.result)); expect(responses[0].result).toBeOk(Cl.uint(99e6)); expect(responses[1].result).toBeOk(Cl.bool(true)); }); diff --git a/tests/lqstx-mint-endpoint.test.ts b/tests/lqstx-mint-endpoint.test.ts index 071b725..9361f09 100644 --- a/tests/lqstx-mint-endpoint.test.ts +++ b/tests/lqstx-mint-endpoint.test.ts @@ -1,5 +1,5 @@ import { tx } from '@hirosystems/clarinet-sdk'; -import { Cl } from '@stacks/transactions'; +import { Cl, ResponseOkCV, UIntCV } from '@stacks/transactions'; import { describe, expect, it } from 'vitest'; const accounts = simnet.getAccounts(); @@ -24,67 +24,65 @@ const contracts = { boot: 'regtest-boot', manager: 'mock-strategy-manager', operators: 'operators', - proposal: 'mock-proposal' -} + proposal: 'mock-proposal', +}; +const mintDelay = 144; const prepareTest = () => simnet.mineBlock([ tx.callPublicFn( contracts.dao, 'construct', - [ - Cl.contractPrincipal(simnet.deployer, contracts.boot), - ], - simnet.deployer, + [Cl.contractPrincipal(simnet.deployer, contracts.boot)], + simnet.deployer ), ]); const requestMint = () => - simnet.callPublicFn( - contracts.endpoint, - 'request-mint', - [Cl.uint(100e6)], - user, - ) + simnet.callPublicFn(contracts.endpoint, 'request-mint', [Cl.uint(100e6)], user); const requestBurn = (payload: Buffer) => simnet.mineBlock([ - tx.callPublicFn( - contracts.rebase1, - 'rebase', - [], - oracle - ), - tx.callPublicFn( - contracts.rebase1, - 'finalize-mint', - [Cl.uint(1)], - bot - ), - tx.callPublicFn( - contracts.manager, - 'fund-strategy', - [ - Cl.uint(100e6) - ], - manager - ), - tx.callPublicFn( - contracts.rebase1, - 'rebase', - [], - oracle - ), - tx.callPublicFn( - contracts.rebase1, - 'request-burn', - [ - Cl.uint(100e6), - ], - user - ), + tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.uint(100e6)], manager), + tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), + tx.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(100e6)], user), ]); +const getRewardCycle = () => { + return ( + simnet.callReadOnlyFn( + contracts.endpoint, + 'get-reward-cycle', + [Cl.uint(simnet.blockHeight)], + user + ).result as ResponseOkCV + ).value.value; +}; + +const getBlocksToStartOfCycle = (cycle: bigint) => { + return ( + Number( + ( + simnet.callReadOnlyFn( + contracts.endpoint, + 'get-first-burn-block-in-reward-cycle', + [Cl.uint(cycle)], + user + ).result as ResponseOkCV + ).value + ) - simnet.blockHeight + ); +}; + +const goToNextCycle = () => { + const cycle = getRewardCycle(); + const blocksToMine = getBlocksToStartOfCycle(cycle + 1n); + + simnet.mineEmptyBlocks(blocksToMine); +}; + describe(contracts.endpoint, () => { it('can request mint', () => { prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); @@ -97,33 +95,16 @@ describe(contracts.endpoint, () => { expect(requestMint().result).toBeOk(Cl.uint(1)); - const cycle = simnet.callReadOnlyFn(contracts.endpoint, 'get-reward-cycle', [Cl.uint(simnet.blockHeight)], user).result.value.value; - const blocksToMine = Number(simnet.callReadOnlyFn(contracts.endpoint, 'get-first-burn-block-in-reward-cycle', [Cl.uint(cycle + 1n)], user).result.value) - simnet.blockHeight; - simnet.mineEmptyBlocks(blocksToMine); // go to the next cycle + goToNextCycle(); - const finaliseErr = simnet.callPublicFn( - contracts.rebase1, - 'finalize-mint', - [Cl.uint(1)], - bot - ); + const finaliseErr = simnet.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot); expect(finaliseErr.result).toBeErr(Cl.uint(1006)); - simnet.mineEmptyBlocks(144); // mint-delay + simnet.mineEmptyBlocks(mintDelay); let responses = simnet.mineBlock([ - tx.callPublicFn( - contracts.rebase1, - 'finalize-mint', - [Cl.uint(1)], - bot - ), - tx.callPublicFn( - contracts.endpoint, - 'revoke-mint', - [Cl.uint(1)], - user - ), + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.endpoint, 'revoke-mint', [Cl.uint(1)], user), ]); expect(responses[0].result).toBeOk(Cl.bool(true)); expect(responses[1].result).toBeErr(Cl.uint(1007)); @@ -135,34 +116,17 @@ describe(contracts.endpoint, () => { expect(requestMint().result).toBeOk(Cl.uint(1)); let responses = simnet.mineBlock([ - tx.callPublicFn( - contracts.endpoint, - 'revoke-mint', - [Cl.uint(1)], - bot - ), - tx.callPublicFn( - contracts.endpoint, - 'revoke-mint', - [Cl.uint(1)], - user - ), + tx.callPublicFn(contracts.endpoint, 'revoke-mint', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.endpoint, 'revoke-mint', [Cl.uint(1)], user), ]); expect(responses[0].result).toBeErr(Cl.uint(1000)); expect(responses[1].result).toBeOk(Cl.bool(true)); - const cycle = simnet.callReadOnlyFn(contracts.endpoint, 'get-reward-cycle', [Cl.uint(simnet.blockHeight)], user).result.value.value; - const blocksToMine = Number(simnet.callReadOnlyFn(contracts.endpoint, 'get-first-burn-block-in-reward-cycle', [Cl.uint(cycle + 1n)], user).result.value) - simnet.blockHeight; - simnet.mineEmptyBlocks(blocksToMine); // go to the next cycle - simnet.mineEmptyBlocks(144); // mint-delay + goToNextCycle(); + simnet.mineEmptyBlocks(mintDelay); // mint-delay responses = simnet.mineBlock([ - tx.callPublicFn( - contracts.rebase1, - 'finalize-mint', - [Cl.uint(1)], - bot - ) + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), ]); expect(responses[0].result).toBeErr(Cl.uint(1007)); }); @@ -171,10 +135,8 @@ describe(contracts.endpoint, () => { prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); expect(requestMint().result).toBeOk(Cl.uint(1)); - const cycle = simnet.callReadOnlyFn(contracts.endpoint, 'get-reward-cycle', [Cl.uint(simnet.blockHeight)], user).result.value.value; - const blocksToMine = Number(simnet.callReadOnlyFn(contracts.endpoint, 'get-first-burn-block-in-reward-cycle', [Cl.uint(cycle + 1n)], user).result.value) - simnet.blockHeight; - simnet.mineEmptyBlocks(blocksToMine); // go to the next cycle - simnet.mineEmptyBlocks(144); // mint-delay + goToNextCycle(); + simnet.mineEmptyBlocks(mintDelay); const payload = simnet.callReadOnlyFn( contracts.strategy, @@ -187,17 +149,18 @@ describe(contracts.endpoint, () => { expect(responses[1].result).toBeOk(Cl.bool(true)); expect(responses[2].result).toBeOk(Cl.uint(100e6)); expect(responses[3].result).toBeOk(Cl.uint(100e6)); - expect(responses[4].result).toBeOk(Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') })); + expect(responses[4].result).toBeOk( + Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) + ); }); it('can finalize burn', () => { prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); expect(requestMint().result).toBeOk(Cl.uint(1)); - const cycle = simnet.callReadOnlyFn(contracts.endpoint, 'get-reward-cycle', [Cl.uint(simnet.blockHeight)], user).result.value.value; - const blocksToMine = Number(simnet.callReadOnlyFn(contracts.endpoint, 'get-first-burn-block-in-reward-cycle', [Cl.uint(cycle + 1n)], user).result.value) - simnet.blockHeight; - simnet.mineEmptyBlocks(blocksToMine); // go to the next cycle - simnet.mineEmptyBlocks(144); // mint-delay + + goToNextCycle(); + simnet.mineEmptyBlocks(mintDelay); const payload = simnet.callReadOnlyFn( contracts.strategy, @@ -210,51 +173,28 @@ describe(contracts.endpoint, () => { expect(burnResponses[1].result).toBeOk(Cl.bool(true)); expect(burnResponses[2].result).toBeOk(Cl.uint(100e6)); expect(burnResponses[3].result).toBeOk(Cl.uint(100e6)); - expect(burnResponses[4].result).toBeOk(Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') })); + expect(burnResponses[4].result).toBeOk( + Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) + ); const responses = simnet.mineBlock([ - tx.callPublicFn( - contracts.manager, - 'refund-strategy', - [ - Cl.uint(100e6) - ], - manager - ), - tx.callPublicFn( - contracts.rebase1, - 'rebase', - [], - oracle - ), - tx.callPublicFn( - contracts.rebase1, - 'finalize-burn', - [Cl.uint(1)], - bot - ), - tx.callPublicFn( - contracts.endpoint, - 'revoke-burn', - [Cl.uint(1)], - user - ), + tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.uint(100e6)], manager), + tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), + tx.callPublicFn(contracts.rebase1, 'finalize-burn', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.endpoint, 'revoke-burn', [Cl.uint(1)], user), ]); expect(responses[0].result).toBeOk(Cl.uint(100e6)); expect(responses[1].result).toBeOk(Cl.uint(100e6)); expect(responses[2].result).toBeOk(Cl.bool(true)); expect(responses[3].result).toBeErr(Cl.uint(1007)); - }); it('can revoke burn', () => { prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); expect(requestMint().result).toBeOk(Cl.uint(1)); - const cycle = simnet.callReadOnlyFn(contracts.endpoint, 'get-reward-cycle', [Cl.uint(simnet.blockHeight)], user).result.value.value; - const blocksToMine = Number(simnet.callReadOnlyFn(contracts.endpoint, 'get-first-burn-block-in-reward-cycle', [Cl.uint(cycle + 1n)], user).result.value) - simnet.blockHeight; - simnet.mineEmptyBlocks(blocksToMine); // go to the next cycle - simnet.mineEmptyBlocks(144); // mint-delay + goToNextCycle(); + simnet.mineEmptyBlocks(mintDelay); const payload = simnet.callReadOnlyFn( contracts.strategy, @@ -267,35 +207,15 @@ describe(contracts.endpoint, () => { expect(burnResponses[1].result).toBeOk(Cl.bool(true)); expect(burnResponses[2].result).toBeOk(Cl.uint(100e6)); expect(burnResponses[3].result).toBeOk(Cl.uint(100e6)); - expect(burnResponses[4].result).toBeOk(Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') })); + expect(burnResponses[4].result).toBeOk( + Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) + ); const responses = simnet.mineBlock([ - tx.callPublicFn( - contracts.manager, - 'refund-strategy', - [ - Cl.uint(100e6) - ], - manager - ), - tx.callPublicFn( - contracts.endpoint, - 'revoke-burn', - [Cl.uint(1)], - bot - ), - tx.callPublicFn( - contracts.endpoint, - 'revoke-burn', - [Cl.uint(1)], - user - ), - tx.callPublicFn( - contracts.rebase1, - 'finalize-mint', - [Cl.uint(1)], - bot - ) + tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.uint(100e6)], manager), + tx.callPublicFn(contracts.endpoint, 'revoke-burn', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.endpoint, 'revoke-burn', [Cl.uint(1)], user), + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), ]); expect(responses[0].result).toBeOk(Cl.uint(100e6)); expect(responses[1].result).toBeErr(Cl.uint(1000)); @@ -303,113 +223,59 @@ describe(contracts.endpoint, () => { expect(responses[3].result).toBeErr(Cl.uint(1007)); }); + it('can request burn and finalized immediately', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + expect(requestMint().result).toBeOk(Cl.uint(1)); + + let response; + response = simnet.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(100e6)], user); + expect(response.result).toBeErr(Cl.uint(1)); // not enough funds + + goToNextCycle(); + simnet.mineEmptyBlocks(mintDelay); + response = simnet.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot); + expect(response.result).toBeOk(Cl.bool(true)); + response = simnet.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(100e6)], user); + expect(response.result).toBeOk( + Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.buffer(new Uint8Array([1])) }) + ); + }); + it('can interact with strategies', () => { prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); expect(requestMint().result).toBeOk(Cl.uint(1)); - const payload = simnet.callReadOnlyFn( - contracts.strategy, - 'create-payload', - [Cl.uint(100e6)], - manager - ).result.buffer; - - const cycle = simnet.callReadOnlyFn(contracts.endpoint, 'get-reward-cycle', [Cl.uint(simnet.blockHeight)], user).result.value.value; - const blocksToMine = Number(simnet.callReadOnlyFn(contracts.endpoint, 'get-first-burn-block-in-reward-cycle', [Cl.uint(cycle + 1n)], user).result.value) - simnet.blockHeight; + const cycle = getRewardCycle(); + const blocksToMine = getBlocksToStartOfCycle(cycle + 1n); simnet.mineEmptyBlocks(blocksToMine - 100); let responses = simnet.mineBlock([ - tx.callPublicFn( - contracts.rebase1, - 'finalize-mint', - [Cl.uint(1)], - bot - ), - tx.callPublicFn( - contracts.manager, - 'fund-strategy', - [ - Cl.uint(100e6) - ], - bot - ), - tx.callPublicFn( - contracts.manager, - 'fund-strategy', - [ - Cl.uint(100e6) - ], - manager - ), + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.uint(100e6)], bot), + tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.uint(100e6)], manager), ]); expect(responses[0].result).toBeErr(Cl.uint(1006)); expect(responses[1].result).toBeErr(Cl.uint(1000)); expect(responses[2].result).toBeOk(Cl.uint(100e6)); simnet.mineEmptyBlocks(99); // go to the next cycle - simnet.mineEmptyBlocks(144); // mint-delay + simnet.mineEmptyBlocks(mintDelay); responses = simnet.mineBlock([ - tx.callPublicFn( - contracts.rebase1, - 'finalize-mint', - [Cl.uint(1)], - bot - ), - tx.callPublicFn( - contracts.rebase1, - 'request-burn', - [ - Cl.uint(100e6), - ], - user - ), - tx.callPublicFn( - contracts.rebase1, - 'finalize-burn', - [Cl.uint(1)], - bot - ), - tx.callPublicFn( - contracts.manager, - 'refund-strategy', - [ - Cl.uint(100e6) - ], - bot - ), - tx.callPublicFn( - contracts.manager, - 'refund-strategy', - [ - Cl.uint(100e6) - ], - manager - ), - tx.callPublicFn( - contracts.manager, - 'refund-strategy', - [ - Cl.uint(100e6) - ], - manager - ), - tx.callPublicFn( - contracts.rebase1, - 'rebase', - [], - oracle - ), - tx.callPublicFn( - contracts.rebase1, - 'finalize-burn', - [Cl.uint(1)], - bot - ) + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(100e6)], user), + tx.callPublicFn(contracts.rebase1, 'finalize-burn', [Cl.uint(1)], bot), + tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.uint(100e6)], bot), + tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.uint(100e6)], manager), + tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.uint(100e6)], manager), + tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), + tx.callPublicFn(contracts.rebase1, 'finalize-burn', [Cl.uint(1)], bot), ]); expect(responses[0].result).toBeOk(Cl.bool(true)); - expect(responses[1].result).toBeOk(Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') })); + expect(responses[1].result).toBeOk( + Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) + ); expect(responses[2].result).toBeErr(Cl.uint(1006)); expect(responses[3].result).toBeErr(Cl.uint(1000)); expect(responses[4].result).toBeOk(Cl.uint(100e6)); @@ -423,27 +289,15 @@ describe(contracts.endpoint, () => { expect(requestMint().result).toBeOk(Cl.uint(1)); - const cycle = simnet.callReadOnlyFn(contracts.endpoint, 'get-reward-cycle', [Cl.uint(simnet.blockHeight)], user).result.value.value; - const blocksToMine = Number(simnet.callReadOnlyFn(contracts.endpoint, 'get-first-burn-block-in-reward-cycle', [Cl.uint(cycle + 1n)], user).result.value) - simnet.blockHeight; - simnet.mineEmptyBlocks(blocksToMine); // go to the next cycle + goToNextCycle(); - const finaliseErr = simnet.callPublicFn( - contracts.rebase1, - 'finalize-mint', - [Cl.uint(1)], - bot - ); + const finaliseErr = simnet.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot); expect(finaliseErr.result).toBeErr(Cl.uint(1006)); - simnet.mineEmptyBlocks(144); // mint-delay + simnet.mineEmptyBlocks(mintDelay); let responses = simnet.mineBlock([ - tx.callPublicFn( - contracts.rebase1, - 'finalize-mint', - [Cl.uint(1)], - bot - ), + tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), tx.callPublicFn( contracts.amm, 'create-pool', @@ -453,10 +307,10 @@ describe(contracts.endpoint, () => { Cl.uint(1e8), Cl.principal(user), Cl.uint(1e8), - Cl.uint(1e8) + Cl.uint(1e8), ], user - ) + ), ]); expect(responses[0].result).toBeOk(Cl.bool(true)); expect(responses[1].result).toBeOk(Cl.bool(true)); @@ -477,7 +331,7 @@ describe(contracts.endpoint, () => { 'propose', [Cl.contractPrincipal(simnet.deployer, contracts.proposal)], simnet.deployer - ) + ), ]); expect(responses[0].result).toBeErr(Cl.uint(1001)); expect(responses[1].result).toBeOk(Cl.bool(false)); @@ -494,10 +348,9 @@ describe(contracts.endpoint, () => { 'signal', [Cl.contractPrincipal(simnet.deployer, contracts.proposal), Cl.bool(true)], manager - ), + ), ]); expect(responses[0].result).toBeErr(Cl.uint(1001)); - expect(responses[1].result).toBeOk(Cl.bool(true)); - - }); + expect(responses[1].result).toBeOk(Cl.bool(true)); + }); }); diff --git a/tests/operators.test.ts b/tests/operators.test.ts index 30e5cf4..1a45bcb 100644 --- a/tests/operators.test.ts +++ b/tests/operators.test.ts @@ -7,6 +7,7 @@ const user = accounts.get('wallet_1')!; const oracle = accounts.get('wallet_2')!; const bot = accounts.get('wallet_3')!; const manager = accounts.get('wallet_4')!; +const operator3 = accounts.get('wallet_5')!; const contracts = { endpoint: 'lqstx-mint-endpoint-v1-01', @@ -25,6 +26,7 @@ const contracts = { manager: 'mock-strategy-manager', operators: 'operators', proposal: 'mock-proposal', + proposal2: 'mock-proposal', }; const prepareTest = () => @@ -73,12 +75,28 @@ describe('operators contract', () => { expect(responses[1].result).toBeOk(Cl.bool(false)); responses = simnet.mineBlock([ + // signal from non-operator fails with unauthorized tx.callPublicFn( contracts.operators, 'signal', [Cl.contractPrincipal(simnet.deployer, contracts.proposal), Cl.bool(true)], bot ), + // second signal from 1st operator fails with double signal error + tx.callPublicFn( + contracts.operators, + 'signal', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal), Cl.bool(true)], + simnet.deployer + ), + // signal from 2nd operator + tx.callPublicFn( + contracts.operators, + 'signal', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal), Cl.bool(true)], + manager + ), + // 2nd signal from 2nd operator fails as proposal expired tx.callPublicFn( contracts.operators, 'signal', @@ -87,7 +105,41 @@ describe('operators contract', () => { ), ]); expect(responses[0].result).toBeErr(Cl.uint(1001)); - expect(responses[1].result).toBeOk(Cl.bool(true)); + expect(responses[1].result).toBeErr(Cl.uint(1002)); // err-already-signalled + expect(responses[2].result).toBeOk(Cl.bool(true)); + expect(responses[3].result).toBeErr(Cl.uint(1003)); // err-proposal-expired + }); + + it('contra operator out-weighs two pro operators', () => { + prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true))); + + let response; + response = simnet.callPublicFn( + contracts.operators, + 'propose', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal)], + simnet.deployer + ); + expect(response.result).toBeOk(Cl.bool(false)); + + let responses = simnet.mineBlock([ + // signal from 2nd operator against proposal + tx.callPublicFn( + contracts.operators, + 'signal', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal), Cl.bool(false)], + manager + ), + // signal from 3nd operator for proposal + tx.callPublicFn( + contracts.operators, + 'signal', + [Cl.contractPrincipal(simnet.deployer, contracts.proposal), Cl.bool(true)], + operator3 + ), + ]); + expect(responses[0].result).toBeOk(Cl.bool(false)); + expect(responses[1].result).toBeOk(Cl.bool(false)); }); it('signals should be reset when reproposed', () => { From 93e279679fae3880f5135191c1831556d5689252 Mon Sep 17 00:00:00 2001 From: friedger Date: Sat, 16 Mar 2024 09:39:12 +0100 Subject: [PATCH 18/18] chore: revert to mainnet addresses, fix tests with 1m STX --- contracts/deployed/lqstx-mint-endpoint.clar | 4 +- contracts/extensions/lqstx-mint-endpoint.clar | 2 +- .../public-pools/fastpool-member.clar | 4 +- .../public-pools/xverse-member.clar | 4 +- deployments/default.simnet-plan.yaml | 136 ++--- pnpm-lock.yaml | 570 ++++-------------- ...tx-mint-endpoint-with-public-pools.test.ts | 58 +- 7 files changed, 228 insertions(+), 550 deletions(-) diff --git a/contracts/deployed/lqstx-mint-endpoint.clar b/contracts/deployed/lqstx-mint-endpoint.clar index 5262b1f..16f79b1 100644 --- a/contracts/deployed/lqstx-mint-endpoint.clar +++ b/contracts/deployed/lqstx-mint-endpoint.clar @@ -79,14 +79,14 @@ ;; @dev used for testing only (define-read-only (get-reward-cycle (stacks-height uint)) - ;; (some (contract-call? 'ST000000000000000000002AMW42H.pox-3 current-pox-reward-cycle))) + ;; (some (contract-call? 'SP000000000000000000002Q6VF78.pox-3 current-pox-reward-cycle))) (if (>= stacks-height (var-get activation-block)) (some (/ (- stacks-height (var-get activation-block)) (var-get reward-cycle-length))) none)) ;; @dev used for testing only (define-read-only (get-first-stacks-block-in-reward-cycle (reward-cycle uint)) - ;; (contract-call? 'ST000000000000000000002AMW42H.pox-3 reward-cycle-to-burn-height reward-cycle)) + ;; (contract-call? 'SP000000000000000000002Q6VF78.pox-3 reward-cycle-to-burn-height reward-cycle)) (+ (var-get activation-block) (* (var-get reward-cycle-length) reward-cycle))) (define-read-only (get-mint-delay) diff --git a/contracts/extensions/lqstx-mint-endpoint.clar b/contracts/extensions/lqstx-mint-endpoint.clar index 16e4794..ab3bbe8 100644 --- a/contracts/extensions/lqstx-mint-endpoint.clar +++ b/contracts/extensions/lqstx-mint-endpoint.clar @@ -23,7 +23,7 @@ ;; corresponds to `first-burnchain-block-height` and `pox-reward-cycle-length` in pox-3 ;; __IF_MAINNET__ -(define-constant pox-info (unwrap-panic (contract-call? 'ST000000000000000000002AMW42H.pox-3 get-pox-info))) +(define-constant pox-info (unwrap-panic (contract-call? 'SP000000000000000000002Q6VF78.pox-3 get-pox-info))) (define-constant activation-burn-block (get first-burnchain-block-height pox-info)) (define-constant reward-cycle-length (get reward-cycle-length pox-info)) ;; (define-constant activation-burn-block u0) diff --git a/contracts/strategies/public-pools/fastpool-member.clar b/contracts/strategies/public-pools/fastpool-member.clar index 7e5154f..71fda8c 100644 --- a/contracts/strategies/public-pools/fastpool-member.clar +++ b/contracts/strategies/public-pools/fastpool-member.clar @@ -3,7 +3,7 @@ (define-constant err-unauthorised (err u5000)) -(as-contract (contract-call? 'ST000000000000000000002AMW42H.pox-3 allow-contract-caller 'SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2 none)) +(as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 allow-contract-caller 'SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2 none)) (define-read-only (is-strategy-caller) (ok (asserts! (is-eq contract-caller .public-pools-strategy) err-unauthorised)) @@ -20,7 +20,7 @@ (define-public (revoke-delegate-stx) (begin (try! (is-strategy-caller)) - (match (as-contract (contract-call? 'ST000000000000000000002AMW42H.pox-3 revoke-delegate-stx)) + (match (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 revoke-delegate-stx)) ok-val (ok ok-val) err-val (err (to-uint err-val)) ) diff --git a/contracts/strategies/public-pools/xverse-member.clar b/contracts/strategies/public-pools/xverse-member.clar index 86f4ce1..48c6cbe 100644 --- a/contracts/strategies/public-pools/xverse-member.clar +++ b/contracts/strategies/public-pools/xverse-member.clar @@ -8,7 +8,7 @@ { hashbytes: 0x827a04335a9eb22cb46979f180670c8e7ba453b5, version: 0x04 } ) -(as-contract (contract-call? 'ST000000000000000000002AMW42H.pox-3 allow-contract-caller 'SP001SFSMC2ZY76PD4M68P3WGX154XCH7NE3TYMX.pox-pools-1-cycle-v2 none)) +(as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 allow-contract-caller 'SP001SFSMC2ZY76PD4M68P3WGX154XCH7NE3TYMX.pox-pools-1-cycle-v2 none)) (define-read-only (is-dao-or-extension) (ok (asserts! (or (is-eq tx-sender .lisa-dao) (contract-call? .lisa-dao is-extension contract-caller)) err-unauthorised)) @@ -37,7 +37,7 @@ (define-public (revoke-delegate-stx) (begin (try! (is-strategy-caller)) - (match (as-contract (contract-call? 'ST000000000000000000002AMW42H.pox-3 revoke-delegate-stx)) + (match (as-contract (contract-call? 'SP000000000000000000002Q6VF78.pox-3 revoke-delegate-stx)) ok-val (ok ok-val) err-val (err (to-uint err-val)) ) diff --git a/deployments/default.simnet-plan.yaml b/deployments/default.simnet-plan.yaml index 3adbb44..1266e18 100644 --- a/deployments/default.simnet-plan.yaml +++ b/deployments/default.simnet-plan.yaml @@ -52,52 +52,52 @@ plan: - emulated-contract-publish: contract-name: sip-010-trait-ft-standard emulated-sender: SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE - path: /Users/chanahn/githome/liquid-stacking/./.cache/requirements/SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.clar + path: "./.cache/requirements/SP3FBR2AGK5H9QBDH3EEN6DF8EK8JY7RX8QJ5SVTE.sip-010-trait-ft-standard.clar" clarity-version: 1 - emulated-contract-publish: contract-name: trait-sip-010 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/traits/trait-sip-010.clar + path: contracts_modules/alex_v1/traits/trait-sip-010.clar clarity-version: 1 - emulated-contract-publish: contract-name: trait-flash-loan-user emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/traits/trait-flash-loan-user.clar + path: contracts_modules/alex_v1/traits/trait-flash-loan-user.clar clarity-version: 1 - emulated-contract-publish: contract-name: trait-semi-fungible emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/traits/trait-semi-fungible.clar + path: contracts_modules/alex_v1/traits/trait-semi-fungible.clar clarity-version: 1 - emulated-contract-publish: contract-name: alex-vault-v1-1 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/alex-vault-v1-1.clar + path: contracts_modules/alex_v1/alex-vault-v1-1.clar clarity-version: 1 - emulated-contract-publish: contract-name: trait-ownable emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/traits/trait-ownable.clar + path: contracts_modules/alex_v1/traits/trait-ownable.clar clarity-version: 1 - emulated-contract-publish: contract-name: token-amm-swap-pool-v1-1 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/pool-token/token-amm-swap-pool-v1-1.clar + path: contracts_modules/alex_v1/pool-token/token-amm-swap-pool-v1-1.clar clarity-version: 1 - emulated-contract-publish: contract-name: amm-swap-pool-v1-1 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/pool/amm-swap-pool-v1-1.clar + path: contracts_modules/alex_v1/pool/amm-swap-pool-v1-1.clar clarity-version: 1 - emulated-contract-publish: contract-name: token-wstx emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/wrapped-token/token-wstx.clar + path: contracts_modules/alex_v1/wrapped-token/token-wstx.clar clarity-version: 1 - emulated-contract-publish: contract-name: trait-vault emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts_modules/alex_v1/traits/trait-vault.clar + path: contracts_modules/alex_v1/traits/trait-vault.clar clarity-version: 1 epoch: "2.1" - id: 1 @@ -105,127 +105,127 @@ plan: - emulated-contract-publish: contract-name: pox-pools-1-cycle-v2 emulated-sender: SP001SFSMC2ZY76PD4M68P3WGX154XCH7NE3TYMX - path: /Users/chanahn/githome/liquid-stacking/./.cache/requirements/SP001SFSMC2ZY76PD4M68P3WGX154XCH7NE3TYMX.pox-pools-1-cycle-v2.clar + path: "./.cache/requirements/SP001SFSMC2ZY76PD4M68P3WGX154XCH7NE3TYMX.pox-pools-1-cycle-v2.clar" clarity-version: 2 - emulated-contract-publish: contract-name: pox-fast-pool-v2 emulated-sender: SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP - path: /Users/chanahn/githome/liquid-stacking/./.cache/requirements/SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2.clar + path: "./.cache/requirements/SP21YTSM60CAY6D011EZVEVNKXVW8FVZE198XEFFP.pox-fast-pool-v2.clar" clarity-version: 2 - emulated-contract-publish: contract-name: extension-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/traits/extension-trait.clar + path: contracts/traits/extension-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: proposal-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/traits/proposal-trait.clar + path: contracts/traits/proposal-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: lisa-dao emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/lisa-dao.clar + path: contracts/lisa-dao.clar clarity-version: 2 - emulated-contract-publish: contract-name: sip-010-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/traits/sip-010-trait.clar + path: contracts/traits/sip-010-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: lqstx-mint-registry emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/aux/lqstx-mint-registry.clar + path: contracts/aux/lqstx-mint-registry.clar clarity-version: 2 - emulated-contract-publish: contract-name: proxy-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/traits/proxy-trait.clar + path: contracts/traits/proxy-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: strategy-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/traits/strategy-trait.clar + path: contracts/traits/strategy-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: lqstx-vault emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/lqstx-vault.clar + path: contracts/extensions/lqstx-vault.clar clarity-version: 2 - emulated-contract-publish: contract-name: stx-transfer-proxy emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/proxies/stx-transfer-proxy.clar + path: contracts/proxies/stx-transfer-proxy.clar clarity-version: 2 - emulated-contract-publish: contract-name: token-lqstx emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/token-lqstx.clar + path: contracts/token-lqstx.clar clarity-version: 2 - emulated-contract-publish: contract-name: token-vlqstx emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/token-vlqstx.clar + path: contracts/token-vlqstx.clar clarity-version: 2 - emulated-contract-publish: contract-name: lqstx-mint-endpoint-v1-01 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/lqstx-mint-endpoint.clar + path: contracts/extensions/lqstx-mint-endpoint.clar clarity-version: 2 - emulated-contract-publish: contract-name: operators emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/operators.clar + path: contracts/extensions/operators.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member1 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar + path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member10 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar + path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member2 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar + path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member3 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar + path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member4 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar + path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member5 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar + path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member6 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar + path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member7 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar + path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member8 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar + path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: fastpool-member9 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/fastpool-member.clar + path: contracts/strategies/public-pools/fastpool-member.clar clarity-version: 2 epoch: "2.4" - id: 2 @@ -233,127 +233,127 @@ plan: - emulated-contract-publish: contract-name: xverse-member1 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + path: contracts/strategies/public-pools/xverse-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: xverse-member10 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + path: contracts/strategies/public-pools/xverse-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: xverse-member2 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + path: contracts/strategies/public-pools/xverse-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: xverse-member3 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + path: contracts/strategies/public-pools/xverse-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: xverse-member4 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + path: contracts/strategies/public-pools/xverse-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: xverse-member5 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + path: contracts/strategies/public-pools/xverse-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: xverse-member6 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + path: contracts/strategies/public-pools/xverse-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: xverse-member7 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + path: contracts/strategies/public-pools/xverse-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: xverse-member8 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + path: contracts/strategies/public-pools/xverse-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: xverse-member9 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/xverse-member.clar + path: contracts/strategies/public-pools/xverse-member.clar clarity-version: 2 - emulated-contract-publish: contract-name: public-pools-strategy emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/strategies/public-pools/public-pools-strategy.clar + path: contracts/strategies/public-pools/public-pools-strategy.clar clarity-version: 2 - emulated-contract-publish: contract-name: public-pools-strategy-manager emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/public-pools-strategy-manager.clar + path: contracts/extensions/public-pools-strategy-manager.clar clarity-version: 2 - emulated-contract-publish: contract-name: token-lisa emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/token-lisa.clar + path: contracts/token-lisa.clar clarity-version: 2 - emulated-contract-publish: contract-name: boot emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/boot.clar + path: contracts/boot.clar clarity-version: 2 - emulated-contract-publish: contract-name: lisa-rebase emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/lisa-rebase.clar + path: contracts/extensions/lisa-rebase.clar clarity-version: 2 - emulated-contract-publish: contract-name: lisa-transfer-proxy emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/proxies/lisa-transfer-proxy.clar + path: contracts/proxies/lisa-transfer-proxy.clar clarity-version: 2 - emulated-contract-publish: contract-name: rebase-strategy-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/deployed/rebase-strategy-trait.clar + path: contracts/deployed/rebase-strategy-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: lqstx-mint-endpoint emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/deployed/lqstx-mint-endpoint.clar + path: contracts/deployed/lqstx-mint-endpoint.clar clarity-version: 2 - emulated-contract-publish: contract-name: lqstx-transfer-proxy emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/proxies/lqstx-transfer-proxy.clar + path: contracts/proxies/lqstx-transfer-proxy.clar clarity-version: 2 - emulated-contract-publish: contract-name: mock-proposal emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/mocks/mock-proposal.clar + path: contracts/mocks/mock-proposal.clar clarity-version: 2 - emulated-contract-publish: contract-name: mock-strategy emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/mocks/mock-strategy.clar + path: contracts/mocks/mock-strategy.clar clarity-version: 2 - emulated-contract-publish: contract-name: mock-strategy-manager emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/mocks/mock-strategy-manager.clar + path: contracts/mocks/mock-strategy-manager.clar clarity-version: 2 - emulated-contract-publish: contract-name: rebase-1 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/rules/rebase-1.clar + path: contracts/rules/rebase-1.clar clarity-version: 2 - emulated-contract-publish: contract-name: rebase-mock emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/mocks/rebase-mock.clar + path: contracts/mocks/rebase-mock.clar clarity-version: 2 - emulated-contract-publish: contract-name: rebase-strategy-trait-v1-01 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/traits/rebase-strategy-trait.clar + path: contracts/traits/rebase-strategy-trait.clar clarity-version: 2 epoch: "2.4" - id: 3 @@ -361,41 +361,41 @@ plan: - emulated-contract-publish: contract-name: regtest-boot emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/regtest-boot.clar + path: contracts/regtest-boot.clar clarity-version: 2 - emulated-contract-publish: contract-name: simnet-boot emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/simnet-boot.clar + path: contracts/simnet-boot.clar clarity-version: 2 - emulated-contract-publish: contract-name: sip-010-extensions-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/traits/sip-010-extensions-trait.clar + path: contracts/traits/sip-010-extensions-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: sip-010-transferable-trait emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/traits/sip-010-transferable-trait.clar + path: contracts/traits/sip-010-transferable-trait.clar clarity-version: 2 - emulated-contract-publish: contract-name: stx-transfer-many-proxy emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/proxies/stx-transfer-many-proxy.clar + path: contracts/proxies/stx-transfer-many-proxy.clar clarity-version: 2 - emulated-contract-publish: contract-name: token-vesting emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/token-vesting.clar + path: contracts/extensions/token-vesting.clar clarity-version: 2 - emulated-contract-publish: contract-name: token-wlqstx emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/mocks/token-wlqstx.clar + path: contracts/mocks/token-wlqstx.clar clarity-version: 2 - emulated-contract-publish: contract-name: treasury emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - path: /Users/chanahn/githome/liquid-stacking/contracts/extensions/treasury.clar + path: contracts/extensions/treasury.clar clarity-version: 2 epoch: "2.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d74683..ce4fea5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,5 +1,3 @@ - - lockfileVersion: '6.0' settings: @@ -8,8 +6,14 @@ settings: dependencies: '@hirosystems/clarinet-sdk': - specifier: ^1.0.0 - version: 1.3.0(@types/node@20.11.24) + specifier: 2.4.0-beta2 + version: 2.4.0-beta2(@types/node@20.11.24) + '@stacks/prettier-config': + specifier: ^0.0.10 + version: 0.0.10 + '@stacks/stacking': + specifier: 6.11.4-pr.36558cf.0 + version: 6.11.4-pr.36558cf.0 '@stacks/transactions': specifier: ^6.9.0 version: 6.12.0 @@ -23,14 +27,14 @@ dependencies: specifier: ^5.2.2 version: 5.3.3 vite: - specifier: ^4.4.9 - version: 4.5.2(@types/node@20.11.24) + specifier: ^5.1.4 + version: 5.1.4(@types/node@20.11.24) vitest: - specifier: ^0.34.4 - version: 0.34.6 + specifier: ^1.3.1 + version: 1.3.1(@types/node@20.11.24) vitest-environment-clarinet: - specifier: ^1.0.0 - version: 1.1.0(@hirosystems/clarinet-sdk@1.3.0)(vitest@0.34.6) + specifier: ^2.0.0 + version: 2.0.0(@hirosystems/clarinet-sdk@2.4.0-beta2)(vitest@1.3.1) yaml: specifier: ^2.4.1 version: 2.4.1 @@ -53,15 +57,6 @@ packages: dev: false optional: true - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-arm64@0.19.12: resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} engines: {node: '>=12'} @@ -71,15 +66,6 @@ packages: dev: false optional: true - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-arm@0.19.12: resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} engines: {node: '>=12'} @@ -89,15 +75,6 @@ packages: dev: false optional: true - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: false - optional: true - /@esbuild/android-x64@0.19.12: resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} engines: {node: '>=12'} @@ -107,15 +84,6 @@ packages: dev: false optional: true - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@esbuild/darwin-arm64@0.19.12: resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} engines: {node: '>=12'} @@ -125,15 +93,6 @@ packages: dev: false optional: true - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - /@esbuild/darwin-x64@0.19.12: resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} engines: {node: '>=12'} @@ -143,15 +102,6 @@ packages: dev: false optional: true - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/freebsd-arm64@0.19.12: resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} engines: {node: '>=12'} @@ -161,15 +111,6 @@ packages: dev: false optional: true - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/freebsd-x64@0.19.12: resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} engines: {node: '>=12'} @@ -179,15 +120,6 @@ packages: dev: false optional: true - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-arm64@0.19.12: resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} engines: {node: '>=12'} @@ -197,15 +129,6 @@ packages: dev: false optional: true - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-arm@0.19.12: resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} engines: {node: '>=12'} @@ -215,15 +138,6 @@ packages: dev: false optional: true - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-ia32@0.19.12: resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} engines: {node: '>=12'} @@ -233,15 +147,6 @@ packages: dev: false optional: true - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-loong64@0.19.12: resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} engines: {node: '>=12'} @@ -251,15 +156,6 @@ packages: dev: false optional: true - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-mips64el@0.19.12: resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} engines: {node: '>=12'} @@ -269,15 +165,6 @@ packages: dev: false optional: true - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-ppc64@0.19.12: resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} engines: {node: '>=12'} @@ -287,15 +174,6 @@ packages: dev: false optional: true - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-riscv64@0.19.12: resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} engines: {node: '>=12'} @@ -305,15 +183,6 @@ packages: dev: false optional: true - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-s390x@0.19.12: resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} engines: {node: '>=12'} @@ -323,15 +192,6 @@ packages: dev: false optional: true - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - /@esbuild/linux-x64@0.19.12: resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} engines: {node: '>=12'} @@ -341,15 +201,6 @@ packages: dev: false optional: true - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/netbsd-x64@0.19.12: resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} engines: {node: '>=12'} @@ -359,15 +210,6 @@ packages: dev: false optional: true - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: false - optional: true - /@esbuild/openbsd-x64@0.19.12: resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} engines: {node: '>=12'} @@ -377,15 +219,6 @@ packages: dev: false optional: true - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: false - optional: true - /@esbuild/sunos-x64@0.19.12: resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} engines: {node: '>=12'} @@ -395,15 +228,6 @@ packages: dev: false optional: true - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-arm64@0.19.12: resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} engines: {node: '>=12'} @@ -413,15 +237,6 @@ packages: dev: false optional: true - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-ia32@0.19.12: resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} engines: {node: '>=12'} @@ -431,15 +246,6 @@ packages: dev: false optional: true - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@esbuild/win32-x64@0.19.12: resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} engines: {node: '>=12'} @@ -449,16 +255,19 @@ packages: dev: false optional: true - /@hirosystems/clarinet-sdk-wasm@2.3.1: - resolution: {integrity: sha512-2x5cdnhMrYu5mJrtB0/LCkSX8gLAWFoB8juzjQVoPj+Q3oi+9586COyvqCzqJdFPf1mZhuWYgtWQvk5rm3d4XA==} + /@hirosystems/clarinet-sdk-wasm@2.4.0-beta3: + resolution: {integrity: sha512-m4PHoE38F+YzH5WDwK5CuRs3/RZWGstIPx4bq2vX6ut1ETE2S9LkS8q91RFF4FnZHnI5f8LwxflTbaxE+RSNrA==} dev: false - /@hirosystems/clarinet-sdk@1.3.0(@types/node@20.11.24): - resolution: {integrity: sha512-CB6+E8gcFJp2Q+iYZ74opI+GJBsAEc54SdPdMY8lvz/H7lHonQtyjn0aOPl8Th5jcC3Cq+yqb6APDWbBr07vUA==} + /@hirosystems/clarinet-sdk@2.4.0-beta2(@types/node@20.11.24): + resolution: {integrity: sha512-GLcUCcyLJHBY31Zdp0X8TyLknxRatTSIlHjJIP2wM9mm1qiT1IspmISC/mBLHVom6OK1FBoXHSaxb1k/SjpHjQ==} engines: {node: '>=18.0.0'} hasBin: true dependencies: - '@hirosystems/clarinet-sdk-wasm': 2.3.1 + '@hirosystems/clarinet-sdk-wasm': 2.4.0-beta3 + '@stacks/encryption': 6.12.0 + '@stacks/network': 6.11.3 + '@stacks/stacking': 6.11.4-pr.36558cf.0 '@stacks/transactions': 6.12.0 kolorist: 1.8.0 prompts: 2.4.2 @@ -616,6 +425,21 @@ packages: dev: false optional: true + /@scure/base@1.1.1: + resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} + dev: false + + /@scure/base@1.1.5: + resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} + dev: false + + /@scure/bip39@1.1.0: + resolution: {integrity: sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==} + dependencies: + '@noble/hashes': 1.1.5 + '@scure/base': 1.1.5 + dev: false + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: false @@ -627,6 +451,27 @@ packages: '@types/node': 18.19.21 dev: false + /@stacks/common@6.11.4-pr.e279ac3.0: + resolution: {integrity: sha512-6PMFR75VWmVnuNSGd0UNz6PDFUKcwEsZIEHzODeG4YDfoGq8NuFi+Wu4box9iKk2gbYfqJL5i0TW9F5sjY2+Bg==} + dependencies: + '@types/bn.js': 5.1.5 + '@types/node': 18.19.21 + dev: false + + /@stacks/encryption@6.12.0: + resolution: {integrity: sha512-CubE51pHrcxx3yA+xapevPgA9UDleIoEaUZ06/9uD91B42yvTg37HyS8t06rzukU9q+X7Cv2I/+vbuf4nJIo8g==} + dependencies: + '@noble/hashes': 1.1.5 + '@noble/secp256k1': 1.7.1 + '@scure/bip39': 1.1.0 + '@stacks/common': 6.10.0 + '@types/node': 18.19.21 + base64-js: 1.5.1 + bs58: 5.0.0 + ripemd160-min: 0.0.6 + varuint-bitcoin: 1.1.2 + dev: false + /@stacks/network@6.11.3: resolution: {integrity: sha512-c4ClCU/QUwuu8NbHtDKPJNa0M5YxauLN3vYaR0+S4awbhVIKFQSxirm9Q9ckV1WBh7FtD6u2S0x+tDQGAODjNg==} dependencies: @@ -636,6 +481,40 @@ packages: - encoding dev: false + /@stacks/network@6.11.4-pr.e279ac3.0: + resolution: {integrity: sha512-3V7Gopn4zyNqKV3+62asMX9FWiZ5cKlzb3kBwfrui3fACHE6fFamPYfyPzNCQ1Y6Cpw00FS2OBVVq2Qw1GKWtw==} + dependencies: + '@stacks/common': 6.11.4-pr.e279ac3.0 + cross-fetch: 3.1.8 + transitivePeerDependencies: + - encoding + dev: false + + /@stacks/prettier-config@0.0.10: + resolution: {integrity: sha512-MrYWGEgO/mYR8TOZIKknQEHbFQZ5VyAD/s8eF2Yxr6Lgalt2alVEh+6ODehVP2uepkyXPmJzLbaQYs8/L4E78Q==} + dependencies: + prettier: 2.5.1 + dev: false + + /@stacks/stacking@6.11.4-pr.36558cf.0: + resolution: {integrity: sha512-BK3da72woKdqwrSi5KrQrp7pfEBSrJKDE/gn/yt5RRkYcX38jbUoNauJqbNCHaPgKdPlYVzYnmtbe4f5YUQ+Ng==} + dependencies: + '@noble/hashes': 1.1.5 + '@scure/base': 1.1.1 + '@stacks/common': 6.11.4-pr.e279ac3.0 + '@stacks/encryption': 6.12.0 + '@stacks/network': 6.11.4-pr.e279ac3.0 + '@stacks/stacks-blockchain-api-types': 0.61.0 + '@stacks/transactions': 6.12.0 + bs58: 5.0.0 + transitivePeerDependencies: + - encoding + dev: false + + /@stacks/stacks-blockchain-api-types@0.61.0: + resolution: {integrity: sha512-yPOfTUboo5eA9BZL/hqMcM71GstrFs9YWzOrJFPeP4cOO1wgYvAcckgBRbgiE3NqeX0A7SLZLDAXLZbATuRq9w==} + dev: false + /@stacks/transactions@6.12.0: resolution: {integrity: sha512-gRP3SfTaAIoTdjMvOiLrMZb/senqB8JQlT5Y4C3/CiHhiprYwTx7TbOCSa7WsNOU99H4aNfHvatmymuggXQVkA==} dependencies: @@ -671,16 +550,6 @@ packages: '@types/node': 18.19.21 dev: false - /@types/chai-subset@1.3.5: - resolution: {integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==} - dependencies: - '@types/chai': 4.3.12 - dev: false - - /@types/chai@4.3.12: - resolution: {integrity: sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==} - dev: false - /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: false @@ -697,14 +566,6 @@ packages: undici-types: 5.26.5 dev: false - /@vitest/expect@0.34.6: - resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} - dependencies: - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 - chai: 4.4.1 - dev: false - /@vitest/expect@1.3.1: resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==} dependencies: @@ -713,14 +574,6 @@ packages: chai: 4.4.1 dev: false - /@vitest/runner@0.34.6: - resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} - dependencies: - '@vitest/utils': 0.34.6 - p-limit: 4.0.0 - pathe: 1.1.2 - dev: false - /@vitest/runner@1.3.1: resolution: {integrity: sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==} dependencies: @@ -729,14 +582,6 @@ packages: pathe: 1.1.2 dev: false - /@vitest/snapshot@0.34.6: - resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} - dependencies: - magic-string: 0.30.8 - pathe: 1.1.2 - pretty-format: 29.7.0 - dev: false - /@vitest/snapshot@1.3.1: resolution: {integrity: sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==} dependencies: @@ -745,26 +590,12 @@ packages: pretty-format: 29.7.0 dev: false - /@vitest/spy@0.34.6: - resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} - dependencies: - tinyspy: 2.2.1 - dev: false - /@vitest/spy@1.3.1: resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==} dependencies: tinyspy: 2.2.1 dev: false - /@vitest/utils@0.34.6: - resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} - dependencies: - diff-sequences: 29.6.3 - loupe: 2.3.7 - pretty-format: 29.7.0 - dev: false - /@vitest/utils@1.3.1: resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==} dependencies: @@ -834,6 +665,10 @@ packages: resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} dev: false + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -846,6 +681,12 @@ packages: fill-range: 7.0.1 dev: false + /bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + dependencies: + base-x: 4.0.0 + dev: false + /c32check@2.0.0: resolution: {integrity: sha512-rpwfAcS/CMqo0oCqDf3r9eeLgScRE3l/xHDCXhM3UyrfvIn7PrLq63uHh7yYbv8NzaZn5MVsVhIRpQ+5GZ5HyA==} engines: {node: '>=8'} @@ -1010,36 +851,6 @@ packages: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: false - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: false - /esbuild@0.19.12: resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} engines: {node: '>=12'} @@ -1205,11 +1016,6 @@ packages: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} dev: false - /local-pkg@0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} - engines: {node: '>=14'} - dev: false - /local-pkg@0.5.0: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} @@ -1321,13 +1127,6 @@ packages: p-try: 2.2.0 dev: false - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - yocto-queue: 1.0.0 - dev: false - /p-limit@5.0.0: resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} engines: {node: '>=18'} @@ -1396,6 +1195,12 @@ packages: source-map-js: 1.0.2 dev: false + /prettier@2.5.1: + resolution: {integrity: sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: false + /pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1433,12 +1238,9 @@ packages: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: false - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 + /ripemd160-min@0.0.6: + resolution: {integrity: sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==} + engines: {node: '>=8'} dev: false /rollup@4.12.0: @@ -1464,6 +1266,10 @@ packages: fsevents: 2.3.3 dev: false + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: false @@ -1543,12 +1349,6 @@ packages: engines: {node: '>=12'} dev: false - /strip-literal@1.3.0: - resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} - dependencies: - acorn: 8.11.3 - dev: false - /strip-literal@2.0.0: resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} dependencies: @@ -1559,11 +1359,6 @@ packages: resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} dev: false - /tinypool@0.7.0: - resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} - engines: {node: '>=14.0.0'} - dev: false - /tinypool@0.8.2: resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} engines: {node: '>=14.0.0'} @@ -1639,26 +1434,10 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: false - /vite-node@0.34.6(@types/node@20.11.24): - resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} - engines: {node: '>=v14.18.0'} - hasBin: true + /varuint-bitcoin@1.1.2: + resolution: {integrity: sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==} dependencies: - cac: 6.7.14 - debug: 4.3.4 - mlly: 1.6.1 - pathe: 1.1.2 - picocolors: 1.0.0 - vite: 4.5.2(@types/node@20.11.24) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser + safe-buffer: 5.2.1 dev: false /vite-node@1.3.1(@types/node@20.11.24): @@ -1682,42 +1461,6 @@ packages: - terser dev: false - /vite@4.5.2(@types/node@20.11.24): - resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - '@types/node': 20.11.24 - esbuild: 0.18.20 - postcss: 8.4.35 - rollup: 3.29.4 - optionalDependencies: - fsevents: 2.3.3 - dev: false - /vite@5.1.4(@types/node@20.11.24): resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -1754,79 +1497,14 @@ packages: fsevents: 2.3.3 dev: false - /vitest-environment-clarinet@1.1.0(@hirosystems/clarinet-sdk@1.3.0)(vitest@0.34.6): - resolution: {integrity: sha512-abf6VPWVyzZ6Ynz3kNqKZGsJuS0MH5xKyJeR9dgE5Y4dQ34KaBoTeA2jzgamDUxyX1y+5/yA/SBQab4sZjX8Sg==} + /vitest-environment-clarinet@2.0.0(@hirosystems/clarinet-sdk@2.4.0-beta2)(vitest@1.3.1): + resolution: {integrity: sha512-NW8Z0JPV/hwB1WkvGiGED9JmXsefPUjImJRbO3BEsxdL8qxA1y2EAwuqjfmvXYDeisQSnZGbfns7DN8eDxJnpg==} peerDependencies: - '@hirosystems/clarinet-sdk': '1' - vitest: '1' + '@hirosystems/clarinet-sdk': '2' + vitest: ^1.3.1 dependencies: - '@hirosystems/clarinet-sdk': 1.3.0(@types/node@20.11.24) - vitest: 0.34.6 - dev: false - - /vitest@0.34.6: - resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} - engines: {node: '>=v14.18.0'} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - happy-dom: '*' - jsdom: '*' - playwright: '*' - safaridriver: '*' - webdriverio: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true - dependencies: - '@types/chai': 4.3.12 - '@types/chai-subset': 1.3.5 - '@types/node': 20.11.24 - '@vitest/expect': 0.34.6 - '@vitest/runner': 0.34.6 - '@vitest/snapshot': 0.34.6 - '@vitest/spy': 0.34.6 - '@vitest/utils': 0.34.6 - acorn: 8.11.3 - acorn-walk: 8.3.2 - cac: 6.7.14 - chai: 4.4.1 - debug: 4.3.4 - local-pkg: 0.4.3 - magic-string: 0.30.8 - pathe: 1.1.2 - picocolors: 1.0.0 - std-env: 3.7.0 - strip-literal: 1.3.0 - tinybench: 2.6.0 - tinypool: 0.7.0 - vite: 4.5.2(@types/node@20.11.24) - vite-node: 0.34.6(@types/node@20.11.24) - why-is-node-running: 2.2.2 - transitivePeerDependencies: - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser + '@hirosystems/clarinet-sdk': 2.4.0-beta2(@types/node@20.11.24) + vitest: 1.3.1(@types/node@20.11.24) dev: false /vitest@1.3.1(@types/node@20.11.24): diff --git a/tests/lqstx-mint-endpoint-with-public-pools.test.ts b/tests/lqstx-mint-endpoint-with-public-pools.test.ts index 770387a..52add22 100644 --- a/tests/lqstx-mint-endpoint-with-public-pools.test.ts +++ b/tests/lqstx-mint-endpoint-with-public-pools.test.ts @@ -1,16 +1,7 @@ - // SPDX-License-Identifier: BUSL-1.1 import { tx } from '@hirosystems/clarinet-sdk'; -import { - BufferCV, - Cl, - ResponseOkCV, - TupleCV, - UIntCV, - callReadOnlyFunction, - cvToString, -} from '@stacks/transactions'; +import { Cl, ResponseOkCV, TupleCV, UIntCV, cvToString } from '@stacks/transactions'; import { describe, expect, it } from 'vitest'; const mintDelay = 432; @@ -83,15 +74,18 @@ const goToNextCycle = () => { simnet.mineEmptyBlocks(blocksToMine); }; -const requestMint = () => - simnet.callPublicFn(contracts.endpoint, 'request-mint', [Cl.uint(1_000_000e6)], user); +// 1m STX +const mintAmount = 1_000_000e6; -// lock 99 stx and request burn of 1 stx +const requestMint = () => + simnet.callPublicFn(contracts.endpoint, 'request-mint', [Cl.uint(mintAmount)], user); + +// lock mintAmount stx and request burn of 1 stx const requestBurn = () => simnet.mineBlock([ tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), - tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(1_000_000e6)])], manager), + tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(mintAmount)])], manager), tx.callPublicFn(contracts.rebase1, 'rebase', [], oracle), tx.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(1e6)], user), ]); @@ -154,8 +148,8 @@ describe(contracts.endpoint, () => { const responses = requestBurn(); expect(responses[0].result).toBeOk(Cl.uint(0)); expect(responses[1].result).toBeOk(Cl.bool(true)); - expect(responses[2].result).toBeOk(Cl.uint(100e6)); - expect(responses[3].result).toBeOk(Cl.uint(100e6)); + expect(responses[2].result).toBeOk(Cl.uint(mintAmount)); + expect(responses[3].result).toBeOk(Cl.uint(mintAmount)); console.log(cvToString(responses[4].result)); expect(responses[4].result).toBeOk( Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) @@ -172,8 +166,8 @@ describe(contracts.endpoint, () => { const burnResponses = requestBurn(); expect(burnResponses[0].result).toBeOk(Cl.uint(0)); expect(burnResponses[1].result).toBeOk(Cl.bool(true)); - expect(burnResponses[2].result).toBeOk(Cl.uint(100e6)); - expect(burnResponses[3].result).toBeOk(Cl.uint(100e6)); + expect(burnResponses[2].result).toBeOk(Cl.uint(mintAmount)); + expect(burnResponses[3].result).toBeOk(Cl.uint(mintAmount)); expect(burnResponses[4].result).toBeOk( Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) ); @@ -185,7 +179,7 @@ describe(contracts.endpoint, () => { tx.callPublicFn(contracts.endpoint, 'revoke-burn', [Cl.uint(1)], user), ]); expect(responses[0].result).toBeOk(Cl.uint(1e6)); - expect(responses[1].result).toBeOk(Cl.uint(100e6)); + expect(responses[1].result).toBeOk(Cl.uint(mintAmount)); expect(responses[2].result).toBeOk(Cl.bool(true)); expect(responses[3].result).toBeErr(Cl.uint(1007)); }); @@ -200,8 +194,8 @@ describe(contracts.endpoint, () => { const burnResponses = requestBurn(); expect(burnResponses[0].result).toBeOk(Cl.uint(0)); expect(burnResponses[1].result).toBeOk(Cl.bool(true)); - expect(burnResponses[2].result).toBeOk(Cl.uint(100e6)); - expect(burnResponses[3].result).toBeOk(Cl.uint(100e6)); + expect(burnResponses[2].result).toBeOk(Cl.uint(mintAmount)); + expect(burnResponses[3].result).toBeOk(Cl.uint(mintAmount)); expect(burnResponses[4].result).toBeOk( Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') }) ); @@ -246,25 +240,30 @@ describe(contracts.endpoint, () => { let responses = simnet.mineBlock([ tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), - tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(1_000_000e6)])], bot), - tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(1_000_000e6)])], manager), + tx.callPublicFn(contracts.manager, 'fund-strategy', [Cl.list([Cl.uint(mintAmount)])], bot), + tx.callPublicFn( + contracts.manager, + 'fund-strategy', + [Cl.list([Cl.uint(mintAmount)])], + manager + ), ]); expect(responses[0].result).toBeErr(Cl.uint(1006)); // request pending expect(responses[1].result).toBeErr(Cl.uint(3000)); // not authorized responses[2].events.map((e: any) => console.log(e)); - expect(responses[2].result).toBeOk(Cl.uint(1_000_000e6)); // 100 stx transferred, 99 stx locked + expect(responses[2].result).toBeOk(Cl.uint(mintAmount)); // mintAmount stx transferred, mintAmount - 1 stx locked const stxAccountFastPoolMember1 = simnet.runSnippet( `(stx-account '${simnet.deployer}.fastpool-member1)` - ) as TupleCV<{ locked: UIntCV, unlocked: UIntCV }>; - expect(stxAccountFastPoolMember1.data.locked).toBeUint(99e6); + ) as TupleCV<{ locked: UIntCV; unlocked: UIntCV }>; + expect(stxAccountFastPoolMember1.data.locked).toBeUint(mintAmount - 1e6); goToNextCycle(); // go to the next cycle simnet.mineEmptyBlocks(mintDelay + 1); // mint-delay responses = simnet.mineBlock([ tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot), - tx.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(100e6)], user), + tx.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(mintAmount)], user), tx.callPublicFn(contracts.rebase1, 'request-burn', [Cl.uint(1e6)], user), tx.callPublicFn(contracts.rebase1, 'finalize-burn', [Cl.uint(1)], bot), tx.callPublicFn(contracts.manager, 'refund-strategy', [Cl.list([Cl.bool(true)])], bot), @@ -283,7 +282,7 @@ describe(contracts.endpoint, () => { expect(responses[4].result).toBeErr(Cl.uint(3000)); // not authorized expect(responses[5].result).toBeOk(Cl.uint(1e6)); // refund 1 stx expect(responses[6].result).toBeOk(Cl.uint(0)); // refund 0 stx - expect(responses[7].result).toBeOk(Cl.uint(100e6)); // rebase 100 stx + expect(responses[7].result).toBeOk(Cl.uint(mintAmount)); // rebase mintAmount stx expect(responses[8].result).toBeErr(Cl.uint(1006)); // request pending // refund remaining stx after unlock @@ -295,10 +294,11 @@ describe(contracts.endpoint, () => { tx.callPublicFn(contracts.rebase1, 'finalize-burn', [Cl.uint(1)], bot), ]); console.log(responses.map(r => r.result)); - expect(responses[0].result).toBeOk(Cl.uint(99e6)); + expect(responses[0].result).toBeOk(Cl.uint(mintAmount - 1e6)); expect(responses[1].result).toBeOk(Cl.bool(true)); }); + // user1 mints 100 STX, user2 100m STX it('can rebase', () => { prepareTest().map((e: any) => expect(e.result).toBeOk(Cl.bool(true)));