diff --git a/CODEOWNERS b/CODEOWNERS index e90cc7b0ad..f940a3b5e3 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -59,6 +59,7 @@ /modules/sdk-coin-bera/ @BitGo/ethalt-team /modules/sdk-coin-bsc/ @BitGo/ethalt-team /modules/sdk-coin-coredao/ @BitGo/ethalt-team +/modules/sdk-coin-cosmos/ @BitGo/ethalt-team /modules/sdk-coin-cronos/ @BitGo/ethalt-team /modules/sdk-coin-cspr/ @BitGo/ethalt-team /modules/sdk-coin-dot/ @BitGo/ethalt-team diff --git a/Dockerfile b/Dockerfile index 95ad7079d5..e38cdb5c7d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -75,6 +75,7 @@ COPY --from=builder /tmp/bitgo/modules/sdk-coin-bsc /var/modules/sdk-coin-bsc/ COPY --from=builder /tmp/bitgo/modules/sdk-coin-celo /var/modules/sdk-coin-celo/ COPY --from=builder /tmp/bitgo/modules/sdk-coin-coredao /var/modules/sdk-coin-coredao/ COPY --from=builder /tmp/bitgo/modules/sdk-coin-coreum /var/modules/sdk-coin-coreum/ +COPY --from=builder /tmp/bitgo/modules/sdk-coin-cosmos /var/modules/sdk-coin-cosmos/ COPY --from=builder /tmp/bitgo/modules/sdk-coin-cronos /var/modules/sdk-coin-cronos/ COPY --from=builder /tmp/bitgo/modules/sdk-coin-cspr /var/modules/sdk-coin-cspr/ COPY --from=builder /tmp/bitgo/modules/sdk-coin-dot /var/modules/sdk-coin-dot/ @@ -170,6 +171,7 @@ cd /var/modules/sdk-coin-bsc && yarn link && \ cd /var/modules/sdk-coin-celo && yarn link && \ cd /var/modules/sdk-coin-coredao && yarn link && \ cd /var/modules/sdk-coin-coreum && yarn link && \ +cd /var/modules/sdk-coin-cosmos && yarn link && \ cd /var/modules/sdk-coin-cronos && yarn link && \ cd /var/modules/sdk-coin-cspr && yarn link && \ cd /var/modules/sdk-coin-dot && yarn link && \ @@ -268,6 +270,7 @@ RUN cd /var/bitgo-express && \ yarn link @bitgo/sdk-coin-celo && \ yarn link @bitgo/sdk-coin-coredao && \ yarn link @bitgo/sdk-coin-coreum && \ + yarn link @bitgo/sdk-coin-cosmos && \ yarn link @bitgo/sdk-coin-cronos && \ yarn link @bitgo/sdk-coin-cspr && \ yarn link @bitgo/sdk-coin-dot && \ diff --git a/modules/sdk-coin-cosmos/.eslintignore b/modules/sdk-coin-cosmos/.eslintignore new file mode 100644 index 0000000000..190f83e0df --- /dev/null +++ b/modules/sdk-coin-cosmos/.eslintignore @@ -0,0 +1,5 @@ +node_modules +.idea +public +dist + diff --git a/modules/sdk-coin-cosmos/.gitignore b/modules/sdk-coin-cosmos/.gitignore new file mode 100644 index 0000000000..67ccce4c64 --- /dev/null +++ b/modules/sdk-coin-cosmos/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +.idea/ +dist/ diff --git a/modules/sdk-coin-cosmos/.mocharc.yml b/modules/sdk-coin-cosmos/.mocharc.yml new file mode 100644 index 0000000000..95814796d1 --- /dev/null +++ b/modules/sdk-coin-cosmos/.mocharc.yml @@ -0,0 +1,8 @@ +require: 'ts-node/register' +timeout: '60000' +reporter: 'min' +reporter-option: + - 'cdn=true' + - 'json=false' +exit: true +spec: ['test/unit/**/*.ts'] diff --git a/modules/sdk-coin-cosmos/.npmignore b/modules/sdk-coin-cosmos/.npmignore new file mode 100644 index 0000000000..d5fb3a098c --- /dev/null +++ b/modules/sdk-coin-cosmos/.npmignore @@ -0,0 +1,14 @@ +!dist/ +dist/test/ +dist/tsconfig.tsbuildinfo +.idea/ +.prettierrc.yml +tsconfig.json +src/ +test/ +scripts/ +.nyc_output +CODEOWNERS +node_modules/ +.prettierignore +.mocharc.js diff --git a/modules/sdk-coin-cosmos/.prettierignore b/modules/sdk-coin-cosmos/.prettierignore new file mode 100644 index 0000000000..3a11d6af29 --- /dev/null +++ b/modules/sdk-coin-cosmos/.prettierignore @@ -0,0 +1,2 @@ +.nyc_output/ +dist/ diff --git a/modules/sdk-coin-cosmos/.prettierrc.yml b/modules/sdk-coin-cosmos/.prettierrc.yml new file mode 100644 index 0000000000..7c3d8dd32a --- /dev/null +++ b/modules/sdk-coin-cosmos/.prettierrc.yml @@ -0,0 +1,3 @@ +printWidth: 120 +singleQuote: true +trailingComma: 'es5' diff --git a/modules/sdk-coin-cosmos/README.md b/modules/sdk-coin-cosmos/README.md new file mode 100644 index 0000000000..62af47056f --- /dev/null +++ b/modules/sdk-coin-cosmos/README.md @@ -0,0 +1,5 @@ +# @bitgo/sdk-coin-cosmos + +Configurable common module for Cosmos SDK chains, using @bitgo/abstract-cosmos for reduced coin integration boilerplate. + +This module provides a shared implementation for Cosmos SDK-based coins, allowing new Cosmos chains to be added through configuration in statics rather than requiring individual coin modules. diff --git a/modules/sdk-coin-cosmos/package.json b/modules/sdk-coin-cosmos/package.json new file mode 100644 index 0000000000..3a72396a38 --- /dev/null +++ b/modules/sdk-coin-cosmos/package.json @@ -0,0 +1,47 @@ +{ + "name": "@bitgo/sdk-coin-cosmos", + "version": "1.0.0", + "description": "BitGo SDK coin library for Cosmos", + "main": "./dist/src/index.js", + "types": "./dist/src/index.d.ts", + "scripts": { + "build": "yarn tsc --build --incremental --verbose .", + "fmt": "prettier --write .", + "check-fmt": "prettier --check .", + "clean": "rm -r ./dist", + "lint": "eslint --quiet .", + "prepare": "npm run build", + "test": "npm run coverage", + "coverage": "nyc -- npm run unit-test", + "unit-test": "mocha" + }, + "author": "BitGo SDK Team ", + "license": "MIT", + "engines": { + "node": ">=18 <23" + }, + "repository": { + "type": "git", + "url": "https://github.com/BitGo/BitGoJS.git", + "directory": "modules/sdk-coin-cosmos" + }, + "lint-staged": { + "*.{js,ts}": [ + "yarn prettier --write", + "yarn eslint --fix" + ] + }, + "publishConfig": { + "access": "public" + }, + "nyc": { + "extension": [ + ".ts" + ] + }, + "dependencies": { + "@bitgo/sdk-core": "^35.7.0", + "@bitgo/abstract-cosmos": "^11.9.7" + }, + "devDependencies": {} +} diff --git a/modules/sdk-coin-cosmos/src/cosmosSharedCoin.ts b/modules/sdk-coin-cosmos/src/cosmosSharedCoin.ts new file mode 100644 index 0000000000..a478fd1311 --- /dev/null +++ b/modules/sdk-coin-cosmos/src/cosmosSharedCoin.ts @@ -0,0 +1,16 @@ +import { BaseCoin, BitGoBase } from '@bitgo/sdk-core'; +import { CosmosCoin } from '@bitgo/abstract-cosmos'; + +/** + * Shared Cosmos coin implementation that uses configuration from statics + * instead of requiring individual coin modules + */ +export class CosmosSharedCoin extends CosmosCoin { + protected constructor(bitgo: BitGoBase) { + super(bitgo); + } + + static createInstance(bitgo: BitGoBase): BaseCoin { + return new CosmosCoin(bitgo); + } +} diff --git a/modules/sdk-coin-cosmos/src/index.ts b/modules/sdk-coin-cosmos/src/index.ts new file mode 100644 index 0000000000..fb20117881 --- /dev/null +++ b/modules/sdk-coin-cosmos/src/index.ts @@ -0,0 +1 @@ +export { CosmosSharedCoin } from './cosmosSharedCoin'; diff --git a/modules/sdk-coin-cosmos/test/unit/index.ts b/modules/sdk-coin-cosmos/test/unit/index.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/modules/sdk-coin-cosmos/tsconfig.json b/modules/sdk-coin-cosmos/tsconfig.json new file mode 100644 index 0000000000..339ace24a2 --- /dev/null +++ b/modules/sdk-coin-cosmos/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./", + "strictPropertyInitialization": false, + "esModuleInterop": true, + "typeRoots": ["../../types", "./node_modules/@types", "../../node_modules/@types"] + }, + "include": ["src/**/*", "test/**/*"], + "exclude": ["node_modules"], + "references": [ + { + "path": "../sdk-api" + }, + { + "path": "../sdk-core" + }, + { + "path": "../sdk-test" + } + ] +} diff --git a/tsconfig.packages.json b/tsconfig.packages.json index 26cf38d312..118ec4ed5e 100644 --- a/tsconfig.packages.json +++ b/tsconfig.packages.json @@ -100,6 +100,9 @@ { "path": "./modules/sdk-coin-coreum" }, + { + "path": "./modules/sdk-coin-cosmos" + }, { "path": "./modules/sdk-coin-cronos" },