From b9fb552e9e35983ba2fc110e36c2bab038c3ab7a Mon Sep 17 00:00:00 2001 From: tjs Date: Mon, 2 May 2022 12:23:58 -0400 Subject: [PATCH 1/4] move package.json to root directory to support the ui --- ts/client/package.json => package.json | 19 +++++++++++------ ts/client/tsconfig.json | 28 -------------------------- tsconfig.json | 18 +++++++++++++++++ ts/client/yarn.lock => yarn.lock | 6 +++--- 4 files changed, 34 insertions(+), 37 deletions(-) rename ts/client/package.json => package.json (76%) delete mode 100644 ts/client/tsconfig.json create mode 100644 tsconfig.json rename ts/client/yarn.lock => yarn.lock (99%) diff --git a/ts/client/package.json b/package.json similarity index 76% rename from ts/client/package.json rename to package.json index 97d614fe4..69fe5e765 100644 --- a/ts/client/package.json +++ b/package.json @@ -1,24 +1,28 @@ { - "name": "@blockworks-foundation/mango-client", + "name": "@blockworks-foundation/mango-v4", "version": "0.1.0", "description": "Typescript Client for mango-v4 program.", - "main": "lib/src/index.js", - "types": "lib/src/index.d.ts", + "main": "dist/index.js", + "types": "dist/index.d.ts", "repository": "https://github.com/blockworks-foundation/mango-v4", "scripts": { "build": "tsc", "clean": "rm -rf dist", - "example1-user": "ts-node src/scripts/example1-user.ts", - "example1-admin": "ts-node src/scripts/example1-admin.ts", + "example1-user": "ts-node ts/client/src/scripts/example1-user.ts", + "example1-admin": "ts-node ts/client/src/scripts/example1-admin.ts", "format": "prettier --check .", "lint": "eslint . --ext ts --ext tsx --ext js --quiet", - "type-check": "tsc --pretty --noEmit" + "type-check": "tsc --pretty --noEmit", + "prepare": "yarn build" }, "author": { "name": "Blockworks Foundation", "email": "hello@blockworks.foundation", "url": "https://blockworks.foundation" }, + "files": [ + "dist" + ], "devDependencies": { "@tsconfig/recommended": "^1.0.1", "@types/chai": "^4.3.0", @@ -36,6 +40,9 @@ "typedoc": "^0.22.5", "typescript": "^4.4.4" }, + "resolutions": { + "@types/bn.js": "^4.11.6" + }, "publishConfig": { "access": "public" }, diff --git a/ts/client/tsconfig.json b/ts/client/tsconfig.json deleted file mode 100644 index 4c7b94637..000000000 --- a/ts/client/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "extends": "@tsconfig/recommended/tsconfig.json", - "compilerOptions": { - "allowJs": true, - "checkJs": true, - "declaration": true, - "declarationDir": "dist", - "declarationMap": true, - "esModuleInterop": true, - "lib": [ - "es2019" - ], - "noImplicitAny": false, - "outDir": "dist", - "resolveJsonModule": true, - "sourceMap": true, - "strictNullChecks": true, - "target": "es6" - }, - "include": [ - "./src/**/*" - ], - "exclude": [ - "./src/**/*.test.js", - "node_modules", - "**/node_modules" - ] -} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..dd7d67348 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "@tsconfig/recommended/tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "target": "es6", + "lib": ["es2019"], + "allowJs": true, + "checkJs": true, + "declaration": true, + "declarationMap": true, + "noImplicitAny": false, + "resolveJsonModule": true, + "sourceMap": true, + "esModuleInterop": true + }, + "include": ["./ts/**/*"], + "exclude": ["./ts/**/*.test.js", "node_modules", "**/node_modules"] +} diff --git a/ts/client/yarn.lock b/yarn.lock similarity index 99% rename from ts/client/yarn.lock rename to yarn.lock index 2ce643b63..02c047301 100644 --- a/ts/client/yarn.lock +++ b/yarn.lock @@ -141,9 +141,9 @@ toml "^3.0.0" "@project-serum/anchor@^0.22.0": - version "0.22.0" - resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.22.0.tgz#79d182851346fb46d471577c63eabdf6f199c03e" - integrity sha512-EJOE790pAQjm07loh7/JYzfcgfYv3SChBb2b9lhVdjjiimSEQrf3ESy+CGMAqcFAsyr699Ewj5k7RizY1y31cg== + version "0.22.1" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.22.1.tgz#698a9620f94691de0a12bbc650a5c8380e2f0e8a" + integrity sha512-5pHeyvQhzLahIQ8aZymmDMZJAJFklN0joZdI+YIqFkK2uU/mlKr6rBLQjxysf/j1mLLiNG00tdyLfUtTAdQz7w== dependencies: "@project-serum/borsh" "^0.2.5" "@solana/web3.js" "^1.17.0" From cd9041d532bc064572a4105c83d1006a284a416e Mon Sep 17 00:00:00 2001 From: tjs Date: Mon, 2 May 2022 12:26:25 -0400 Subject: [PATCH 2/4] export constants for ui; expose indexedTotalDeposits for Banks; connect doesn't need to be async --- ts/client/src/accounts/bank.ts | 2 ++ ts/client/src/accounts/mangoAccount.ts | 10 +++++++--- ts/client/src/client.ts | 11 +++-------- ts/client/src/index.ts | 1 + 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/ts/client/src/accounts/bank.ts b/ts/client/src/accounts/bank.ts index 086517570..3fdb10ad6 100644 --- a/ts/client/src/accounts/bank.ts +++ b/ts/client/src/accounts/bank.ts @@ -8,6 +8,7 @@ export class Bank { public name: string; public depositIndex: I80F48; public borrowIndex: I80F48; + public indexedTotalDeposits: I80F48; static from( publicKey: PublicKey, @@ -73,6 +74,7 @@ export class Bank { this.name = utf8.decode(new Uint8Array(name)).split('\x00')[0]; this.depositIndex = I80F48.from(depositIndex); this.borrowIndex = I80F48.from(borrowIndex); + this.indexedTotalDeposits = I80F48.from(indexedTotalDeposits); } toString(): string { diff --git a/ts/client/src/accounts/mangoAccount.ts b/ts/client/src/accounts/mangoAccount.ts index 1b2c5a20f..a99aefab5 100644 --- a/ts/client/src/accounts/mangoAccount.ts +++ b/ts/client/src/accounts/mangoAccount.ts @@ -2,7 +2,7 @@ import { utf8 } from '@project-serum/anchor/dist/cjs/utils/bytes'; import { PublicKey } from '@solana/web3.js'; import { MangoClient } from '../client'; import { Bank } from './bank'; -import { I80F48, I80F48Dto } from './I80F48'; +import { I80F48, I80F48Dto, ZERO_I80F48 } from './I80F48'; export class MangoAccount { public tokens: TokenAccount[]; public serum3: Serum3Account[]; @@ -76,12 +76,12 @@ export class MangoAccount { getNativeDeposit(bank: Bank): I80F48 { const ta = this.findToken(bank.tokenIndex); - return bank.depositIndex.mul(ta?.indexedValue!); + return ta ? bank.depositIndex.mul(ta?.indexedValue) : ZERO_I80F48; } getNativeBorrow(bank: Bank): I80F48 { const ta = this.findToken(bank.tokenIndex); - return bank.borrowIndex.mul(ta?.indexedValue!); + return ta ? bank.borrowIndex.mul(ta?.indexedValue) : ZERO_I80F48; } } @@ -99,6 +99,10 @@ export class TokenAccount { public tokenIndex: number, public inUseCount: number, ) {} + + isActive(): boolean { + return this.tokenIndex !== 65535; + } } export class TokenAccountDto { diff --git a/ts/client/src/client.ts b/ts/client/src/client.ts index 705be5441..8afeed460 100644 --- a/ts/client/src/client.ts +++ b/ts/client/src/client.ts @@ -46,10 +46,8 @@ export class MangoClient { } public async getGroup(groupPk: PublicKey): Promise { - const group = Group.from( - groupPk, - await this.program.account.group.fetch(groupPk), - ); + const groupAccount = await this.program.account.group.fetch(groupPk); + const group = Group.from(groupPk, groupAccount); await group.reload(this); return group; } @@ -619,10 +617,7 @@ export class MangoClient { /// static - static async connect( - provider: Provider, - devnet?: boolean, - ): Promise { + static connect(provider?: Provider, devnet?: boolean): MangoClient { // TODO: use IDL on chain or in repository? decide... // Alternatively we could fetch IDL from chain. // const idl = await Program.fetchIdl(MANGO_V4_ID, provider); diff --git a/ts/client/src/index.ts b/ts/client/src/index.ts index 762b29351..2d599b58d 100644 --- a/ts/client/src/index.ts +++ b/ts/client/src/index.ts @@ -8,3 +8,4 @@ export { export { StubOracle } from './accounts/oracle'; export { Serum3Market } from './accounts/serum3'; export * from './client'; +export * from './constants'; From 4027ef540f594fc7c693da1b23ab85a84c0d4a9e Mon Sep 17 00:00:00 2001 From: tjs Date: Tue, 3 May 2022 23:49:59 -0400 Subject: [PATCH 3/4] v0.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 69fe5e765..11f719dec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@blockworks-foundation/mango-v4", - "version": "0.1.0", + "version": "0.0.1", "description": "Typescript Client for mango-v4 program.", "main": "dist/index.js", "types": "dist/index.d.ts", From 3aca793f0ecca965192f595b959f7eea95f4b78a Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 24 May 2022 17:01:34 +0200 Subject: [PATCH 4/4] Commit deployment changes --- ts/client/src/mango_v4.ts | 42 +++++++++++++++++++++++++++++++++++---- yarn.lock | 7 +++++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/ts/client/src/mango_v4.ts b/ts/client/src/mango_v4.ts index 4029a4628..1a07a6150 100644 --- a/ts/client/src/mango_v4.ts +++ b/ts/client/src/mango_v4.ts @@ -514,13 +514,26 @@ export type MangoV4 = { "name": "owner", "isMut": false, "isSigner": true + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false } ], "args": [ { - "name": "banksLen", + "name": "numHealthAccounts", "type": "u64" }, + { + "name": "withdraws", + "type": { + "vec": { + "defined": "(u8,u64)" + } + } + }, { "name": "cpiData", "type": "bytes" @@ -1703,12 +1716,16 @@ export type MangoV4 = { "name": "tokenIndex", "type": "u16" }, + { + "name": "bump", + "type": "u8" + }, { "name": "reserved", "type": { "array": [ "u8", - 6 + 5 ] } } @@ -3354,13 +3371,26 @@ export const IDL: MangoV4 = { "name": "owner", "isMut": false, "isSigner": true + }, + { + "name": "tokenProgram", + "isMut": false, + "isSigner": false } ], "args": [ { - "name": "banksLen", + "name": "numHealthAccounts", "type": "u64" }, + { + "name": "withdraws", + "type": { + "vec": { + "defined": "(u8,u64)" + } + } + }, { "name": "cpiData", "type": "bytes" @@ -4543,12 +4573,16 @@ export const IDL: MangoV4 = { "name": "tokenIndex", "type": "u16" }, + { + "name": "bump", + "type": "u8" + }, { "name": "reserved", "type": { "array": [ "u8", - 6 + 5 ] } } diff --git a/yarn.lock b/yarn.lock index 14eb6680e..75a065228 100644 --- a/yarn.lock +++ b/yarn.lock @@ -255,6 +255,13 @@ resolved "https://registry.yarnpkg.com/@tsconfig/recommended/-/recommended-1.0.1.tgz#7619bad397e06ead1c5182926c944e0ca6177f52" integrity sha512-2xN+iGTbPBEzGSnVp/Hd64vKJCJWxsi9gfs88x4PPMyEjHJoA3o5BY9r5OLPHIZU2pAQxkSAsJFqn6itClP8mQ== +"@types/bn.js@^4.11.6": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + "@types/bs58@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/bs58/-/bs58-4.0.1.tgz#3d51222aab067786d3bc3740a84a7f5a0effaa37"