Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: slinky #ntrn-250 #281

Merged
merged 45 commits into from
Apr 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
49d00f6
fix: allow for execution of timelocked proposal when overruled in clo…
NeverHappened Feb 28, 2024
4a92918
Merge branch 'main' into fix/closed-proposals-not-overruled
NeverHappened Mar 27, 2024
5cc721b
updated neutronjsplus #NTRN-174
joldie777 Apr 2, 2024
1a455b1
Merge pull request #268 from neutron-org/fix/closed-proposals-not-ove…
pr0n00gler Apr 4, 2024
6cee49e
add basic slinky test
NeverHappened Apr 4, 2024
f2765be
add oracle docker image
NeverHappened Apr 5, 2024
9428df8
fix docker build
NeverHappened Apr 6, 2024
f07731f
Add proposal votes tests
albertandrejev Feb 7, 2024
709d840
Update tests
albertandrejev Feb 22, 2024
05f80cb
remove only
albertandrejev Feb 22, 2024
43e0d79
fix after rebase
albertandrejev Feb 25, 2024
25037fb
fix tests
albertandrejev Feb 25, 2024
7fba8ca
remove not used function
albertandrejev Feb 25, 2024
8d5d087
remove not needed stuff
NeverHappened Apr 6, 2024
7af4e3a
fix tests
albertandrejev Apr 9, 2024
dfb057c
remove unused vars
albertandrejev Apr 9, 2024
4b93588
extract slinky stuff into neutronjsplus
NeverHappened Apr 8, 2024
595231d
remove debug output and add comments
albertandrejev Apr 10, 2024
708dff6
fix typo
NeverHappened Apr 10, 2024
83b9b14
remove leftover arg
NeverHappened Apr 10, 2024
08efa09
update neutronjsplus commit
NeverHappened Apr 10, 2024
31897f6
Merge pull request #265 from neutron-org/feat/proposal-votes
pr0n00gler Apr 11, 2024
fc56d72
Merge remote-tracking branch 'origin/feat/sdk-50' into feat/slinky
NeverHappened Apr 12, 2024
0ece940
neutronjsplus release
pr0n00gler Apr 12, 2024
f57f9bc
Merge pull request #277 from neutron-org/feat/add-mco-title
pr0n00gler Apr 12, 2024
bcffb1e
Merge remote-tracking branch 'origin/feat/sdk-50' into feat/slinky
NeverHappened Apr 22, 2024
691fd2a
use neutronjs rc11 to make tests pass
NeverHappened Apr 22, 2024
0140a67
Merge branch 'feat/sdk-50' into feat/slinky
NeverHappened Apr 24, 2024
cec723a
Update setup/Makefile
NeverHappened Apr 24, 2024
dbb47d1
update neutronjs
NeverHappened Apr 24, 2024
c3a0870
fix lint
NeverHappened Apr 24, 2024
5ffd29f
Merge branch 'feat/sdk-50' into feat/slinky
NeverHappened Apr 24, 2024
9ba5eed
Merge branch 'feat/sdk-50' into feat/slinky
NeverHappened Apr 24, 2024
fa0ccf9
neutronjsplus 0.4.0-rc17
NeverHappened Apr 24, 2024
2c9e511
neutronjsplus rc18
NeverHappened Apr 24, 2024
225ac02
neutronjsplus rc v19
NeverHappened Apr 24, 2024
3c961d3
Merge branch 'main' into feat/slinky
NeverHappened Apr 24, 2024
6aebde7
recreate yarn.lock
NeverHappened Apr 24, 2024
0b416a3
upd yarn.lock and package.json
pr0n00gler Apr 25, 2024
7854a6b
add slinky to run in band tests
NeverHappened Apr 26, 2024
dbca0c3
recreate yarn.lock
NeverHappened Apr 26, 2024
ba3a36c
fix neutrojsplus
NeverHappened Apr 26, 2024
f2d094b
Merge branch 'feat/sdk-50' into feat/slinky
NeverHappened Apr 27, 2024
af9ff20
recreate yarn.lock
NeverHappened Apr 27, 2024
82f6016
use sdk-50 branch now
NeverHappened Apr 27, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
"scripts": {
"test": "yarn test:parallel && yarn test:run_in_band",
"test:parallel": "jest -b src/testcases/parallel",
"test:run_in_band": "yarn test:tge:auction && yarn test:tge:credits && yarn test:interchaintx && yarn test:interchain_kv_query && yarn test:interchain_tx_query_plain && yarn test:tokenomics && yarn test:reserve && yarn test:ibc_hooks && yarn test:float && yarn test:parameters && yarn test:dex_stargate && yarn test:globalfee && yarn test:dex_bindings && yarn test:pob",
"test:run_in_band": "yarn test:tge:auction && yarn test:tge:credits && yarn test:interchaintx && yarn test:interchain_kv_query && yarn test:interchain_tx_query_plain && yarn test:tokenomics && yarn test:reserve && yarn test:ibc_hooks && yarn test:float && yarn test:parameters && yarn test:dex_stargate && yarn test:globalfee && yarn test:dex_bindings && yarn test:pob && yarn test:slinky",
"test:simple": "jest -b src/testcases/parallel/simple",
"test:slinky": "jest -b src/testcases/run_in_band/slinky",
"test:stargate_queries": "jest -b src/testcases/parallel/stargate_queries",
"test:interchaintx": "jest -b src/testcases/run_in_band/interchaintx",
"test:interchain_kv_query": "jest -b src/testcases/run_in_band/interchain_kv_query",
Expand Down
1 change: 1 addition & 0 deletions setup/.tool-versions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodejs 16.20.0
5 changes: 4 additions & 1 deletion setup/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ build-hermes:
build-relayer:
cd $(APP_DIR)/neutron-query-relayer/ && make build-docker

build-all: build-gaia build-neutron build-hermes build-relayer
build-slinky:
@docker buildx build --load --build-context app=$(APP_DIR)/slinky -t skip-mev/slinky-e2e-oracle -f dockerbuilds/Dockerfile.slinky .

build-all: build-gaia build-neutron build-hermes build-relayer build-slinky

start-cosmopark:
@$(COMPOSE) up -d
Expand Down
16 changes: 16 additions & 0 deletions setup/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ services:
- 8090:9090
environment:
- RUN_BACKGROUND=0
- ORACLE_ADDRESS=oracle:8080
networks:
- neutron-testing

Expand Down Expand Up @@ -78,6 +79,21 @@ services:
networks:
- neutron-testing

oracle:
image: skip-mev/slinky-e2e-oracle
entrypoint: [
"slinky",
"--oracle-config-path",
"/oracle/oracle.json",
"--market-config-path",
"/oracle/market.json",
]
ports:
- "8080:8080" # main oracle port
- "8002:8002" # oracle metrics port
networks:
- neutron-testing

volumes:
data:
name: neutron-testing-data
Expand Down
21 changes: 21 additions & 0 deletions setup/dockerbuilds/Dockerfile.slinky
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
FROM golang:1.22-bullseye AS builder

WORKDIR /src/slinky
COPY --from=app go.mod .

RUN go mod download

COPY --from=app . .

RUN make build

FROM ubuntu:rolling
EXPOSE 8080
EXPOSE 8002

COPY --from=builder /src/slinky/build/* /usr/local/bin/
COPY --from=builder /src/slinky/config/local/* /oracle/
RUN apt-get update && apt-get install ca-certificates -y

WORKDIR /usr/local/bin/
ENTRYPOINT ["slinky", "--oracle-config-path", "/oracle/oracle.json", "--market-config-path", "/oracle/market.json"]
59 changes: 59 additions & 0 deletions src/helpers/gaia.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,19 @@ import {
MsgDelegate,
MsgUndelegate,
} from '@neutron-org/neutronjsplus/dist/proto/cosmos_sdk/cosmos/staking/v1beta1/tx_pb';
import {
MsgSubmitProposal,
MsgVote,
} from '@neutron-org/neutronjsplus/dist/proto/cosmos_sdk/cosmos/gov/v1beta1/tx_pb';
import {
packAnyMsg,
WalletWrapper,
} from '@neutron-org/neutronjsplus/dist/cosmos';
import Long from 'long';
import {
TextProposal,
VoteOption,
} from '@neutron-org/neutronjsplus/dist/proto/cosmos_sdk/cosmos/gov/v1beta1/gov_pb';

export const msgDelegate = async (
wallet: WalletWrapper,
Expand Down Expand Up @@ -48,5 +56,56 @@ export const msgUndelegate = async (
},
[packAnyMsg('/cosmos.staking.v1beta1.MsgUndelegate', msgUndelegate)],
);

return res?.tx_response;
};

export const msgSubmitProposal = async (
wallet: WalletWrapper,
proposer: string,
amount = '0',
): Promise<BroadcastTx200ResponseTxResponse> => {
const msgSubmitProposal = new MsgSubmitProposal({
proposer,
content: {
typeUrl: '/cosmos.gov.v1beta1.TextProposal',
value: new TextProposal({
title: 'mock',
description: 'mock',
}).toBinary(),
},
initialDeposit: [{ denom: wallet.chain.denom, amount: '10000000' }],
});
const res = await wallet.execTx(
{
gas_limit: Long.fromString('500000'),
amount: [{ denom: wallet.chain.denom, amount: amount }],
},
[packAnyMsg('/cosmos.gov.v1beta1.MsgSubmitProposal', msgSubmitProposal)],
);

return res?.tx_response;
};

export const msgVote = async (
wallet: WalletWrapper,
voter: string,
proposalId: number,
amount = '0',
): Promise<BroadcastTx200ResponseTxResponse> => {
const msgVote = new MsgVote({
voter,
proposalId: BigInt(proposalId),
option: VoteOption.YES,
});

const res = await wallet.execTx(
{
gas_limit: Long.fromString('500000'),
amount: [{ denom: wallet.chain.denom, amount: amount }],
},
[packAnyMsg('/cosmos.gov.v1beta1.MsgVote', msgVote)],
);

return res?.tx_response;
};
2 changes: 1 addition & 1 deletion src/testcases/parallel/overrule.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {

const config = require('../../config.json');

describe('Neutron / Subdao', () => {
describe('Neutron / Subdao Overrule', () => {
let testState: TestStateLocalCosmosTestNet;
let neutronChain: CosmosWrapper;
let neutronAccount1: WalletWrapper;
Expand Down
90 changes: 88 additions & 2 deletions src/testcases/parallel/subdao.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,16 @@ import {
TimelockConfig,
TimelockProposalListResponse,
} from '@neutron-org/neutronjsplus/dist/dao';
import { Wallet } from '@neutron-org/neutronjsplus/dist/types';
import {
SingleChoiceProposal,
Wallet,
} from '@neutron-org/neutronjsplus/dist/types';
import { BroadcastTx200ResponseTxResponse } from '@cosmos-client/core/cjs/openapi/api';
import cosmosclient from '@cosmos-client/core';
import { waitSeconds } from '@neutron-org/neutronjsplus/dist/wait';
import {
getWithAttempts,
waitSeconds,
} from '@neutron-org/neutronjsplus/dist/wait';
import {
paramChangeProposal,
sendProposal,
Expand Down Expand Up @@ -480,6 +486,86 @@ describe('Neutron / Subdao', () => {
});
});

describe('Timelock3: Closed overruled proposal should not prevent execution', () => {
let proposalId: number;
beforeAll(async () => {
proposalId = await subdaoMember1.submitUpdateSubDaoConfigProposal(
{
name: 'dao name after timelock3',
},
'single2',
);

// move proposal to the timelocked state where it can be overruled
const timelockedProp = await subdaoMember1.supportAndExecuteProposal(
proposalId,
'single2',
);

expect(timelockedProp.id).toEqual(proposalId);
expect(timelockedProp.status).toEqual('timelocked');
expect(timelockedProp.msgs).toHaveLength(1);
});

test('close rejected overrule proposal', async () => {
const overruleProposalId = await mainDao.getOverruleProposalId(
subDao.contracts.proposals.single2.pre_propose.timelock!.address,
proposalId,
);

// wait 20 seconds
await waitSeconds(20);

const propOverruledTest =
await mainDao.chain.queryContract<SingleChoiceProposal>(
mainDaoMember.dao.contracts.proposals.overrule?.address,
{
proposal: {
proposal_id: overruleProposalId,
},
},
);
expect(propOverruledTest.proposal.status).toEqual('rejected');

await subdaoMember1.user.executeContract(
mainDaoMember.dao.contracts.proposals.overrule.address,
JSON.stringify({
close: { proposal_id: overruleProposalId },
}),
);

const propOverruledTest2 = await getWithAttempts(
neutronChain.blockWaiter,
async () =>
await mainDao.chain.queryContractWithWait<SingleChoiceProposal>(
mainDaoMember.dao.contracts.proposals.overrule?.address,
{
proposal: {
proposal_id: overruleProposalId,
},
},
),
async (p) => p.proposal.status === 'closed',
5,
);

expect(propOverruledTest2.proposal.status).toEqual('closed');
});

test('execute timelocked: success', async () => {
await waitSeconds(20);
await subdaoMember1.executeTimelockedProposal(proposalId, 'single2');

const timelockedProp = await subDao.getTimelockedProposal(
proposalId,
'single2',
);
expect(timelockedProp.id).toEqual(proposalId);
expect(timelockedProp.status).toEqual('executed');
expect(timelockedProp.msgs).toHaveLength(1);
});
});

describe('Non-timelock typed duration pause proposal: Succeed creation', () => {
let proposalId: number;

Expand Down
2 changes: 1 addition & 1 deletion src/testcases/run_in_band/dex_bindings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ describe('Neutron / dex module bindings', () => {
);
console.log(resp);
expect(Number(resp.deposits[0].total_shares)).toBeGreaterThan(0);
expect(Number(resp.deposits[0].pool!.id)).toEqual(0);
expect(Number(resp.deposits[0].pool.id)).toEqual(0);

const respNoPoolData =
await neutronAccount.chain.queryContract<AllUserDepositsResponse>(
Expand Down
2 changes: 1 addition & 1 deletion src/testcases/run_in_band/dex_stargate.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,7 @@ describe('Neutron / dex module (stargate contract)', () => {
);
console.log(resp);
expect(Number(resp.deposits[0].total_shares)).toBeGreaterThan(0);
expect(Number(resp.deposits[0].pool!.id)).toEqual(0);
expect(Number(resp.deposits[0].pool.id)).toEqual(0);

const respNoPoolData =
await neutronAccount.chain.queryContract<AllUserDepositsResponse>(
Expand Down
Loading
Loading