mirror of
https://github.com/zhigang1992/liquid-stacking.git
synced 2026-04-29 12:35:48 +08:00
123
README.md
Normal file
123
README.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# Liquid Stacking (LISA)
|
||||
|
||||
## Deployment
|
||||
|
||||
1. npm run
|
||||
|
||||
## Errors
|
||||
|
||||
The LISA protocol contracts each have their own error space. All protocol errors
|
||||
are in the form `(err uint)` and they are unique across all contracts.
|
||||
|
||||
### Error space
|
||||
|
||||
| Group | Error space | Description |
|
||||
| ------------- | ----------- | ---------------------------------------------- |
|
||||
| Dao | 1XXX | Errors related to the dao. |
|
||||
| Operators | 1XXX | Errors related to the operators. |
|
||||
| Strategy | 2XXX | Errors related to stacking strategy. |
|
||||
| Permissions | 3XXX | Errors related to governance of the dao. |
|
||||
| Token | 3XXX | Errors coming directly from the tokens. |
|
||||
| Proxy | 4XXX | Errors related to proxy contracts. |
|
||||
| Pool members | 5XXX | Errors related to stacking pool members. |
|
||||
| Wrapped token | 6XXX | Errors coming directly from the wrapped token. |
|
||||
| Mint Endpoint | 7XXX | Errors coming directly from the mint endpoint. |
|
||||
| Vesting | 9XXX | Errors coming directly from vesting. |
|
||||
| Pools | 4XX/5XX/6XX | Errors coming public stacking pools. |
|
||||
| Assets | 1/2/3/4 | Errors coming for native Clarity assets. |
|
||||
|
||||
### Error table
|
||||
|
||||
<!--errors-->
|
||||
| Contract | Constant | Value | Description |
|
||||
|-------------------------------|----------------------------------|-------------|-------------|
|
||||
| lisa-dao | err-unauthorised | (err u1000) | |
|
||||
| lqstx-mint-endpoint | err-unauthorised | (err u1000) | |
|
||||
| lqstx-mint-endpoint-v1-01 | err-unauthorised | (err u1000) | |
|
||||
| lqstx-vault | err-unauthorised | (err u1000) | |
|
||||
| operators | err-unauthorised | (err u1000) | |
|
||||
| token-vesting | err-unauthorised | (err u1000) | |
|
||||
| token-wlqstx | err-not-authorized | (err u1000) | |
|
||||
| treasury | err-unauthorised | (err u1000) | |
|
||||
| lisa-dao | err-already-executed | (err u1001) | |
|
||||
| lqstx-mint-endpoint | err-paused | (err u1001) | |
|
||||
| lqstx-mint-endpoint-v1-01 | err-paused | (err u1001) | |
|
||||
| operators | err-not-operator | (err u1001) | |
|
||||
| lisa-dao | err-invalid-extension | (err u1002) | |
|
||||
| operators | err-already-signalled | (err u1002) | |
|
||||
| operators | err-proposal-expired | (err u1003) | |
|
||||
| operators | err-unknown-proposal | (err u1004) | |
|
||||
| operators | err-reused-proposal | (err u1005) | |
|
||||
| lqstx-mint-endpoint | err-request-pending | (err u1006) | |
|
||||
| lqstx-mint-endpoint-v1-01 | err-request-pending | (err u1006) | |
|
||||
| lqstx-mint-endpoint | err-request-finalized-or-revoked | (err u1007) | |
|
||||
| lqstx-mint-endpoint-v1-01 | err-request-finalized-or-revoked | (err u1007) | |
|
||||
| lqstx-mint-endpoint | err-not-whitelisted | (err u1008) | |
|
||||
| lqstx-mint-endpoint-v1-01 | err-not-whitelisted | (err u1008) | |
|
||||
| lqstx-mint-registry | err-unknown-request-id | (err u1008) | |
|
||||
| public-pools-strategy | err-not-vault-caller | (err u2000) | |
|
||||
| public-pools-strategy | err-invalid-payload | (err u2001) | |
|
||||
| lisa-rebase | err-unauthorised | (err u3000) | |
|
||||
| lisa-rebase-v1-02 | err-unauthorised | (err u3000) | |
|
||||
| lqstx-mint-endpoint-v1-02 | err-unauthorised | (err u3000) | |
|
||||
| lqstx-mint-registry | err-unauthorised | (err u3000) | |
|
||||
| public-pools-strategy-manager | err-unauthorised | (err u3000) | |
|
||||
| token-lisa | err-unauthorised | (err u3000) | |
|
||||
| token-lqstx | err-unauthorised | (err u3000) | |
|
||||
| token-vlqstx | err-unauthorised | (err u3000) | |
|
||||
| token-wlqstx | err-transfer-failed | (err u3000) | |
|
||||
| token-lqstx | err-invalid-amount | (err u3001) | |
|
||||
| token-lisa | err-not-token-owner | (err u4) | |
|
||||
| lisa-transfer-proxy | err-invalid-payload | (err u4000) | |
|
||||
| lqstx-transfer-proxy | err-invalid-payload | (err u4000) | |
|
||||
| stx-transfer-many-proxy | err-invalid-payload | (err u4000) | |
|
||||
| stx-transfer-proxy | err-invalid-payload | (err u4000) | |
|
||||
| pox-fast-pool-v2 | err-unauthorized | (err u401) | |
|
||||
| pox-fast-pool-v2 | err-forbidden | (err u403) | |
|
||||
| pox-pools-1-cycle-v2 | err-not-found | (err u404) | |
|
||||
| pox-fast-pool-v2 | err-too-early | (err u500) | |
|
||||
| pox-pools-1-cycle-v2 | err-non-positive-amount | (err u500) | |
|
||||
| fastpool-member1 | err-unauthorised | (err u5000) | |
|
||||
| fastpool-member10 | err-unauthorised | (err u5000) | |
|
||||
| fastpool-member2 | err-unauthorised | (err u5000) | |
|
||||
| fastpool-member3 | err-unauthorised | (err u5000) | |
|
||||
| fastpool-member4 | err-unauthorised | (err u5000) | |
|
||||
| fastpool-member5 | err-unauthorised | (err u5000) | |
|
||||
| fastpool-member6 | err-unauthorised | (err u5000) | |
|
||||
| fastpool-member7 | err-unauthorised | (err u5000) | |
|
||||
| fastpool-member8 | err-unauthorised | (err u5000) | |
|
||||
| fastpool-member9 | err-unauthorised | (err u5000) | |
|
||||
| xverse-member1 | err-unauthorised | (err u5000) | |
|
||||
| xverse-member10 | err-unauthorised | (err u5000) | |
|
||||
| xverse-member2 | err-unauthorised | (err u5000) | |
|
||||
| xverse-member3 | err-unauthorised | (err u5000) | |
|
||||
| xverse-member4 | err-unauthorised | (err u5000) | |
|
||||
| xverse-member5 | err-unauthorised | (err u5000) | |
|
||||
| xverse-member6 | err-unauthorised | (err u5000) | |
|
||||
| xverse-member7 | err-unauthorised | (err u5000) | |
|
||||
| xverse-member8 | err-unauthorised | (err u5000) | |
|
||||
| xverse-member9 | err-unauthorised | (err u5000) | |
|
||||
| pox-pools-1-cycle-v2 | err-no-stacker-info | (err u501) | |
|
||||
| pox-pools-1-cycle-v2 | err-no-user-info | (err u502) | |
|
||||
| pox-fast-pool-v2 | err-decrease-forbidden | (err u503) | |
|
||||
| pox-pools-1-cycle-v2 | err-decrease-forbidden | (err u503) | |
|
||||
| pox-fast-pool-v2 | err-pox-address-deactivated | (err u504) | |
|
||||
| token-wlqstx | err-mint-failed | (err u6002) | |
|
||||
| token-wlqstx | err-burn-failed | (err u6003) | |
|
||||
| token-wlqstx | err-not-supported | (err u6004) | |
|
||||
| pox-fast-pool-v2 | err-already-stacking | (err u603) | |
|
||||
| pox-pools-1-cycle-v2 | err-already-stacking | (err u603) | |
|
||||
| pox-fast-pool-v2 | err-stacking-permission-denied | (err u609) | |
|
||||
| pox-pools-1-cycle-v2 | err-stacking-permission-denied | (err u609) | |
|
||||
| lqstx-mint-endpoint-v1-02 | err-paused | (err u7001) | |
|
||||
| lqstx-mint-endpoint-v1-02 | err-request-pending | (err u7006) | |
|
||||
| lqstx-mint-endpoint-v1-02 | err-request-finalized-or-revoked | (err u7007) | |
|
||||
| lqstx-mint-endpoint-v1-02 | err-not-whitelisted | (err u7008) | |
|
||||
| token-vesting | err-caller-not-recipient | (err u9000) | |
|
||||
| token-vesting | err-unknown-vesting-id | (err u9001) | |
|
||||
| token-vesting | err-event-not-vested | (err u9002) | |
|
||||
| token-vesting | err-event-already-claimed | (err u9003) | |
|
||||
| token-vesting | err-recipient-exists | (err u9004) | |
|
||||
<!--errors-->
|
||||
|
||||
## References
|
||||
@@ -2,7 +2,7 @@
|
||||
;; SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
;;
|
||||
;; lqstx-mint-endpoint-v1-01
|
||||
;; lqstx-mint-endpoint-v1-02
|
||||
;;
|
||||
|
||||
;; __IF_MAINNET__
|
||||
@@ -10,11 +10,11 @@
|
||||
;; (use-trait sip-010-trait .sip-010-trait.sip-010-trait)
|
||||
;; __ENDIF__
|
||||
|
||||
(define-constant err-unauthorised (err u1000))
|
||||
(define-constant err-paused (err u1001))
|
||||
(define-constant err-request-pending (err u1006))
|
||||
(define-constant err-request-finalized-or-revoked (err u1007))
|
||||
(define-constant err-not-whitelisted (err u1008))
|
||||
(define-constant err-unauthorised (err u3000))
|
||||
(define-constant err-paused (err u7001))
|
||||
(define-constant err-request-pending (err u7006))
|
||||
(define-constant err-request-finalized-or-revoked (err u7007))
|
||||
(define-constant err-not-whitelisted (err u7008))
|
||||
|
||||
(define-constant PENDING 0x00)
|
||||
(define-constant FINALIZED 0x01)
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"multisig-analyse": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./scripts/analyse-multisig-deployment-plan.ts",
|
||||
"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",
|
||||
"error-codes": "node --no-warnings=ExperimentalWarning --loader ts-node/esm --import=./scripts/logErrors.js ./scripts/error-codes.ts",
|
||||
"replace:mainnet": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./scripts/replace-mainnet-address.ts",
|
||||
"replace:testnet": "node --no-warnings=ExperimentalWarning --loader ts-node/esm ./scripts/replace-testnet-address.ts",
|
||||
"setup:clarity": "./scripts/clarinet_manager.sh clean && ./scripts/clarinet_manager.sh install",
|
||||
|
||||
92
scripts/error-codes.ts
Normal file
92
scripts/error-codes.ts
Normal file
@@ -0,0 +1,92 @@
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
import { initSimnet } from '@hirosystems/clarinet-sdk';
|
||||
import { readFileSync, writeFileSync } from 'fs';
|
||||
const readmeFile = './README.md';
|
||||
const manifestFile = './Clarinet.toml';
|
||||
|
||||
const constantErrRegex = /^\s*\(define-constant\s+(err-.+?)\s+(\(.+?\))\s*\)(.*?)$/gm;
|
||||
const errorCodeRegex = /u([0-9]+)/;
|
||||
const commentRegex = /;;\s*(.+)/;
|
||||
const readmeErrorsDelineator = '<!--errors-->';
|
||||
|
||||
const tableHeader = ['Contract', 'Constant', 'Value', 'Description'];
|
||||
|
||||
const simnet = await initSimnet(manifestFile);
|
||||
|
||||
export function isTestContract(contractName: string) {
|
||||
return contractName.indexOf('mock') >= 0;
|
||||
}
|
||||
|
||||
function padTableCell(content: string, length: number) {
|
||||
const repeat = length - content.length + 1;
|
||||
return repeat > 0 ? ' ' + content + ' '.repeat(repeat) : ' ';
|
||||
}
|
||||
|
||||
function createErrorsTable() {
|
||||
const errorsSeenCount: { [key: string]: { lastConstantName: string; count: number } } = {};
|
||||
let readme = readFileSync(readmeFile).toString();
|
||||
const errorTable: Array<Array<string>> = [];
|
||||
const longestColumnCells = tableHeader.map(v => v.length);
|
||||
|
||||
const compareReadme = process.env.EXTRACT_CHECK && readme;
|
||||
|
||||
for (const [contractId, abi] of simnet.getContractsInterfaces()) {
|
||||
if (isTestContract(contractId)) continue;
|
||||
console.log(abi);
|
||||
const source = simnet.getContractSource(contractId);
|
||||
if (!source) continue;
|
||||
const errorConstants = source.matchAll(constantErrRegex);
|
||||
for (const [, errorConstant, errorValue, errorComment] of errorConstants) {
|
||||
const errorDescription = errorComment?.match(commentRegex)?.[1] || ''; // || '_None_';
|
||||
if (!errorValue.match(errorCodeRegex))
|
||||
console.error(`Constant '${errorConstant}' error value is not in form of (err uint)`);
|
||||
if (!errorsSeenCount[errorValue])
|
||||
errorsSeenCount[errorValue] = { lastConstantName: errorConstant, count: 1 };
|
||||
else if (errorsSeenCount[errorValue].lastConstantName !== errorConstant) {
|
||||
errorsSeenCount[errorValue].lastConstantName = errorConstant;
|
||||
++errorsSeenCount[errorValue].count;
|
||||
}
|
||||
const row = [contractId.split('.')[1], errorConstant, errorValue, errorDescription];
|
||||
row.map((content, index) => {
|
||||
if (content.length > longestColumnCells[index]) longestColumnCells[index] = content.length;
|
||||
});
|
||||
errorTable.push(row);
|
||||
}
|
||||
}
|
||||
|
||||
const nonUniqueErrors = Object.entries(errorsSeenCount).filter(([, value]) => value.count > 1);
|
||||
if (nonUniqueErrors.length > 0) console.log(nonUniqueErrors);
|
||||
|
||||
errorTable.sort((a, b) => (a[2] === b[2] ? (a[0] > b[0] ? 1 : -1) : a[2] > b[2] ? 1 : -1)); // string sort
|
||||
|
||||
let errors =
|
||||
'|' +
|
||||
tableHeader
|
||||
.map((content, index) => padTableCell(content, longestColumnCells[index]))
|
||||
.join('|') +
|
||||
'|\n';
|
||||
errors += '|' + longestColumnCells.map(length => '-'.repeat(length + 2)).join('|') + '|\n';
|
||||
errors += errorTable.reduce(
|
||||
(accumulator, row) =>
|
||||
accumulator +
|
||||
'|' +
|
||||
row.map((content, index) => padTableCell(content, longestColumnCells[index])).join('|') +
|
||||
'|\n',
|
||||
''
|
||||
);
|
||||
|
||||
const split = readme.split(readmeErrorsDelineator);
|
||||
readme = `${split[0]}${readmeErrorsDelineator}\n${errors}${readmeErrorsDelineator}${split[2]}`;
|
||||
|
||||
if (compareReadme && compareReadme !== readme) {
|
||||
throw new Error(
|
||||
'Generated readme is not equal to readme in current commit (error table mismatch)'
|
||||
);
|
||||
}
|
||||
|
||||
writeFileSync(readmeFile, readme);
|
||||
console.log(`Error table written to ${readmeFile}`);
|
||||
}
|
||||
|
||||
console.log('start');
|
||||
createErrorsTable();
|
||||
5
scripts/logErrors.js
Normal file
5
scripts/logErrors.js
Normal file
@@ -0,0 +1,5 @@
|
||||
import { setUncaughtExceptionCaptureCallback } from 'node:process';
|
||||
setUncaughtExceptionCaptureCallback(err => {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
});
|
||||
@@ -105,7 +105,7 @@ describe(contracts.endpoint, () => {
|
||||
goToNextCycle();
|
||||
|
||||
const finaliseErr = simnet.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot);
|
||||
expect(finaliseErr.result).toBeErr(Cl.uint(1006));
|
||||
expect(finaliseErr.result).toBeErr(Cl.uint(7006));
|
||||
|
||||
simnet.mineEmptyBlocks(mintDelay + 1); // mint-delay
|
||||
|
||||
@@ -114,7 +114,7 @@ describe(contracts.endpoint, () => {
|
||||
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));
|
||||
expect(responses[1].result).toBeErr(Cl.uint(7007));
|
||||
});
|
||||
|
||||
it('can revoke mint', () => {
|
||||
@@ -126,7 +126,7 @@ describe(contracts.endpoint, () => {
|
||||
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[0].result).toBeErr(Cl.uint(3000));
|
||||
expect(responses[1].result).toBeOk(Cl.bool(true));
|
||||
|
||||
goToNextCycle();
|
||||
@@ -134,7 +134,7 @@ describe(contracts.endpoint, () => {
|
||||
responses = simnet.mineBlock([
|
||||
tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot),
|
||||
]);
|
||||
expect(responses[0].result).toBeErr(Cl.uint(1007));
|
||||
expect(responses[0].result).toBeErr(Cl.uint(7007));
|
||||
});
|
||||
|
||||
it('can request burn', () => {
|
||||
@@ -181,7 +181,7 @@ describe(contracts.endpoint, () => {
|
||||
expect(responses[0].result).toBeOk(Cl.uint(1e6));
|
||||
expect(responses[1].result).toBeOk(Cl.uint(mintAmount));
|
||||
expect(responses[2].result).toBeOk(Cl.bool(true));
|
||||
expect(responses[3].result).toBeErr(Cl.uint(1007));
|
||||
expect(responses[3].result).toBeErr(Cl.uint(7007));
|
||||
});
|
||||
|
||||
it('can revoke burn', () => {
|
||||
@@ -207,9 +207,9 @@ describe(contracts.endpoint, () => {
|
||||
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[1].result).toBeErr(Cl.uint(3000));
|
||||
expect(responses[2].result).toBeOk(Cl.bool(true));
|
||||
expect(responses[3].result).toBeErr(Cl.uint(1007));
|
||||
expect(responses[3].result).toBeErr(Cl.uint(7007));
|
||||
});
|
||||
|
||||
it('can interact with strategies', () => {
|
||||
@@ -248,7 +248,7 @@ describe(contracts.endpoint, () => {
|
||||
manager
|
||||
),
|
||||
]);
|
||||
expect(responses[0].result).toBeErr(Cl.uint(1006)); // request pending
|
||||
expect(responses[0].result).toBeErr(Cl.uint(7006)); // 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(mintAmount)); // mintAmount stx transferred, mintAmount - 1 stx locked
|
||||
@@ -277,12 +277,12 @@ describe(contracts.endpoint, () => {
|
||||
Cl.tuple({ 'request-id': Cl.uint(1), status: Cl.bufferFromHex('00') })
|
||||
);
|
||||
expect(responses[2].result).toBeErr(Cl.uint(1)); // not enough funds
|
||||
expect(responses[3].result).toBeErr(Cl.uint(1006)); // request pending
|
||||
expect(responses[3].result).toBeErr(Cl.uint(7006)); // 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(mintAmount)); // rebase mintAmount stx
|
||||
expect(responses[8].result).toBeErr(Cl.uint(1006)); // request pending
|
||||
expect(responses[8].result).toBeErr(Cl.uint(7006)); // request pending
|
||||
|
||||
// refund remaining stx after unlock
|
||||
goToNextCycle();
|
||||
@@ -404,7 +404,7 @@ describe(contracts.endpoint, () => {
|
||||
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));
|
||||
expect(finaliseErr.result).toBeErr(Cl.uint(7006));
|
||||
|
||||
simnet.mineEmptyBlocks(mintDelay + 1); // mint-delay
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ describe(contracts.endpoint, () => {
|
||||
goToNextCycle();
|
||||
|
||||
const finaliseErr = simnet.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot);
|
||||
expect(finaliseErr.result).toBeErr(Cl.uint(1006));
|
||||
expect(finaliseErr.result).toBeErr(Cl.uint(7006));
|
||||
|
||||
simnet.mineEmptyBlocks(mintDelay);
|
||||
|
||||
@@ -126,7 +126,7 @@ describe(contracts.endpoint, () => {
|
||||
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));
|
||||
expect(responses[1].result).toBeErr(Cl.uint(7007));
|
||||
});
|
||||
|
||||
it('can revoke mint', () => {
|
||||
@@ -138,7 +138,7 @@ describe(contracts.endpoint, () => {
|
||||
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[0].result).toBeErr(Cl.uint(3000));
|
||||
expect(responses[1].result).toBeOk(Cl.bool(true));
|
||||
|
||||
goToNextCycle();
|
||||
@@ -147,7 +147,7 @@ describe(contracts.endpoint, () => {
|
||||
responses = simnet.mineBlock([
|
||||
tx.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot),
|
||||
]);
|
||||
expect(responses[0].result).toBeErr(Cl.uint(1007));
|
||||
expect(responses[0].result).toBeErr(Cl.uint(7007));
|
||||
});
|
||||
|
||||
it('can request burn', () => {
|
||||
@@ -205,7 +205,7 @@ describe(contracts.endpoint, () => {
|
||||
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));
|
||||
expect(responses[3].result).toBeErr(Cl.uint(7007));
|
||||
});
|
||||
|
||||
it('can revoke burn', () => {
|
||||
@@ -237,9 +237,9 @@ describe(contracts.endpoint, () => {
|
||||
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));
|
||||
expect(responses[1].result).toBeErr(Cl.uint(3000));
|
||||
expect(responses[2].result).toBeOk(Cl.bool(true));
|
||||
expect(responses[3].result).toBeErr(Cl.uint(1007));
|
||||
expect(responses[3].result).toBeErr(Cl.uint(7007));
|
||||
});
|
||||
|
||||
it('can request burn and finalized immediately', () => {
|
||||
@@ -274,7 +274,7 @@ describe(contracts.endpoint, () => {
|
||||
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[0].result).toBeErr(Cl.uint(7006));
|
||||
expect(responses[1].result).toBeErr(Cl.uint(1000));
|
||||
expect(responses[2].result).toBeOk(Cl.uint(100e6));
|
||||
|
||||
@@ -295,7 +295,7 @@ describe(contracts.endpoint, () => {
|
||||
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[2].result).toBeErr(Cl.uint(7006));
|
||||
expect(responses[3].result).toBeErr(Cl.uint(1000));
|
||||
expect(responses[4].result).toBeOk(Cl.uint(100e6));
|
||||
expect(responses[5].result).toBeErr(Cl.uint(1));
|
||||
@@ -311,7 +311,7 @@ describe(contracts.endpoint, () => {
|
||||
goToNextCycle();
|
||||
|
||||
const finaliseErr = simnet.callPublicFn(contracts.rebase1, 'finalize-mint', [Cl.uint(1)], bot);
|
||||
expect(finaliseErr.result).toBeErr(Cl.uint(1006));
|
||||
expect(finaliseErr.result).toBeErr(Cl.uint(7006));
|
||||
|
||||
simnet.mineEmptyBlocks(mintDelay);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user