From 58ade1fb2d08f7e569d37e6457ce3c2a8649aeb9 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Wed, 17 Apr 2024 09:56:10 +0700 Subject: [PATCH 001/132] base: implement getBalances for for maya --- packages/thor/src/datasource/chain/chain.data-source.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/thor/src/datasource/chain/chain.data-source.ts b/packages/thor/src/datasource/chain/chain.data-source.ts index 2d2f0035..63b093c3 100644 --- a/packages/thor/src/datasource/chain/chain.data-source.ts +++ b/packages/thor/src/datasource/chain/chain.data-source.ts @@ -51,10 +51,11 @@ export class ChainDataSource extends DataSource { const { data: resp } = await this.rest.get<{ balances: Array }>( `/cosmos/bank/v1beta1/balances/${address}` ); - const chain = 'THORChain' as AddressChain; + const thorchain = 'THORChain' as AddressChain; + const maya = 'MAYAChain' as AddressChain; const cryptoAssetsInput = resp.balances.map( ({ denom }) => ({ - chain: chain, + chain: denom === 'rune' ? thorchain : maya, contract: this.manifest.denom === denom ? null : denom, }) ); From d3015164538f88d51b6b212c5da96c0a754c2979 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Wed, 17 Apr 2024 09:57:39 +0700 Subject: [PATCH 002/132] base: remove @xchain packages --- packages/thor/package.json | 5 - packages/thor/src/signers/ledger.signer.ts | 6 +- yarn.lock | 108 ++------------------- 3 files changed, 11 insertions(+), 108 deletions(-) diff --git a/packages/thor/package.json b/packages/thor/package.json index dc4a0142..d4453e36 100644 --- a/packages/thor/package.json +++ b/packages/thor/package.json @@ -26,11 +26,6 @@ "@ledgerhq/hw-transport": "6.30.3", "@ledgerhq/hw-transport-webhid": "6.28.3", "@thorchain/ledger-thorchain": "0.1.0-alpha.2", - "@xchainjs/xchain-client": "0.14.2", - "@xchainjs/xchain-cosmos": "0.21.3", - "@xchainjs/xchain-crypto": "0.3.0", - "@xchainjs/xchain-thorchain": "0.28.7", - "@xchainjs/xchain-util": "0.13.2", "@xdefi-tech/chains-core": "*", "@xdefi-tech/chains-graphql": "*", "axios": "1.4.0", diff --git a/packages/thor/src/signers/ledger.signer.ts b/packages/thor/src/signers/ledger.signer.ts index 6fe8fdc0..43fa5f41 100644 --- a/packages/thor/src/signers/ledger.signer.ts +++ b/packages/thor/src/signers/ledger.signer.ts @@ -1,5 +1,4 @@ import THORChainApp from '@thorchain/ledger-thorchain'; -import { Client } from '@xchainjs/xchain-thorchain'; import Transport from '@ledgerhq/hw-transport'; import { Signer, SignerDecorator } from '@xdefi-tech/chains-core'; @@ -15,9 +14,8 @@ export class LedgerSigner extends Signer.Provider { } verifyAddress(address: string): boolean { - // We need to init the client with some kind of seed phrase, even - // if we just want to check the address - return new Client({ phrase: '' }).validateAddress(address); + const thorchainAddressRegex = /^thor[a-z0-9]{25,39}$/i; + return thorchainAddressRegex.test(address); } async getPrivateKey(_derivation: string) { diff --git a/yarn.lock b/yarn.lock index 1bb8082d..83839ad0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7013,38 +7013,6 @@ dependencies: tslib "^2.3.0" -"@xchainjs/xchain-client@0.14.2": - version "0.14.2" - resolved "https://registry.yarnpkg.com/@xchainjs/xchain-client/-/xchain-client-0.14.2.tgz#9047bcb83a940fdceff52cd53baeb2fdc8362237" - integrity sha512-uYnKLU5qcDixNizIGtyt7K4FYHkWCEq2PNKSv/8mApjIVjsYvt2TnzFCazj0kK0tOxhlFZUzELCHbvQpF+ugDg== - -"@xchainjs/xchain-cosmos@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@xchainjs/xchain-cosmos/-/xchain-cosmos-0.21.3.tgz#6ab34aa22e5291ccde47e5094f7765a3b4d1b833" - integrity sha512-njvhvsb8OLIWAsxRHMEQ1oyLUug9vg8xoentItysbKw5dXJmusRtTMdNHpvzpGGc911w1dOQ0/EA9se9g8UOug== - -"@xchainjs/xchain-crypto@0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@xchainjs/xchain-crypto/-/xchain-crypto-0.3.0.tgz#48fb9857fe411d21f45f031216b838d9bb58c22c" - integrity sha512-ZM36UEQaad3D6DOdhUOcpFyMUr5HQs7yBmrdi4AnYFLQzSYmYABgxvFo+DSgpuQkq2zrcMU6lIfsBX0r5LdCFw== - dependencies: - bech32 "^2.0.0" - bip39 "^3.1.0" - crypto-js "^4.1.1" - foundry-primitives-xchainjs "github:xchainjs/foundry-primitives-js#master" - hdkey "^2.1.0" - uuid "^9.0.0" - -"@xchainjs/xchain-thorchain@0.28.7": - version "0.28.7" - resolved "https://registry.yarnpkg.com/@xchainjs/xchain-thorchain/-/xchain-thorchain-0.28.7.tgz#6b283dd68a0dd60c882c97e70f06cb2ea11a6a05" - integrity sha512-jQ2fCuBRvhsev7lcTfLpU+k/+j6gUiHmGPKpxAxmuGrsLukoamJWMBoQ4Hxp9zm+9Ky4gxtUbWsBqeHHNExebQ== - -"@xchainjs/xchain-util@0.13.2": - version "0.13.2" - resolved "https://registry.yarnpkg.com/@xchainjs/xchain-util/-/xchain-util-0.13.2.tgz#125aeb02ebde1d6919b39fd1e4350f536c20b939" - integrity sha512-rhaF22ZT1JugTDMnJ4UiB971jj9oF887WOvG1hMVmc750JFmldpbESiM1PkY1bjFwTRX699Njzx6u88ax4xWVA== - "@xmldom/xmldom@^0.8.8": version "0.8.10" resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" @@ -8018,11 +7986,6 @@ bignumber.js@9.1.2, bignumber.js@^9.0.0, bignumber.js@^9.0.1, bignumber.js@^9.0. resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== -bignumber.js@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" - integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -8089,7 +8052,7 @@ bip39@3.0.2: pbkdf2 "^3.0.9" randombytes "^2.0.1" -bip39@3.1.0, bip39@^3.0.2, bip39@^3.0.3, bip39@^3.0.4, bip39@^3.1.0: +bip39@3.1.0, bip39@^3.0.2, bip39@^3.0.3, bip39@^3.0.4: version "3.1.0" resolved "https://registry.yarnpkg.com/bip39/-/bip39-3.1.0.tgz#c55a418deaf48826a6ceb34ac55b3ee1577e18a3" integrity sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A== @@ -8159,7 +8122,7 @@ blake-hash@^2.0.0: node-gyp-build "^4.2.2" readable-stream "^3.6.0" -blakejs@^1.1.0, blakejs@^1.2.1: +blakejs@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== @@ -8436,7 +8399,7 @@ buffer@6.0.3, buffer@^6.0.2, buffer@^6.0.3, buffer@~6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -buffer@^5.2.1, buffer@^5.5.0: +buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -9272,7 +9235,7 @@ crypto-browserify@3.12.0, crypto-browserify@^3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-js@4.2.0, crypto-js@^4.1.1, crypto-js@^4.2.0: +crypto-js@4.2.0, crypto-js@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== @@ -9764,7 +9727,7 @@ electron-to-chromium@^1.4.648: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.657.tgz#8a07ee3faa552976970843a80a1c94088ea59c9a" integrity sha512-On2ymeleg6QbRuDk7wNgDdXtNqlJLM2w4Agx1D/RiTmItiL+a9oq5p7HUa2ZtkAtGBe/kil2dq/7rPfkbe0r5w== -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.4.1, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -11173,22 +11136,6 @@ form-data@^3.0.0, form-data@^3.0.1: combined-stream "^1.0.8" mime-types "^2.1.12" -"foundry-primitives-xchainjs@github:xchainjs/foundry-primitives-js#master": - version "0.2.1" - resolved "https://codeload.github.com/xchainjs/foundry-primitives-js/tar.gz/bec0f5594b5feeacf294d0c5e161f457119b0113" - dependencies: - bignumber.js "^7.2.1" - blakejs "^1.1.0" - bn.js "^4.11.8" - buffer "^5.2.1" - crypto-js "4.2.0" - elliptic "^6.4.1" - hmac-drbg "^1.0.1" - lodash "^4.17.21" - node-forge "^1.3.1" - rlp "^2.1.0" - tweetnacl "^1.0.3" - freeport-async@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/freeport-async/-/freeport-async-2.0.0.tgz#6adf2ec0c629d11abff92836acd04b399135bab4" @@ -11703,7 +11650,7 @@ hasown@^2.0.1: dependencies: function-bind "^1.1.2" -hdkey@2.1.0, hdkey@^2.1.0: +hdkey@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-2.1.0.tgz#755b30b73f54e93c31919c1b2f19205a8e57cb92" integrity sha512-i9Wzi0Dy49bNS4tXXeGeu0vIcn86xXdPQUpEYg+SO1YiO8HtomjmmRMaRyqL0r59QfcD4PfVbSF3qmsWFwAemA== @@ -16378,13 +16325,6 @@ ripple-lib@^1.10.1: ripple-lib-transactionparser "0.8.2" ws "^7.2.0" -rlp@^2.1.0: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - rollup-plugin-inject@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz#e4233855bfba6c0c12a312fd6649dff9a13ee9f4" @@ -17123,7 +17063,7 @@ string-length@^5.0.1: char-regex "^2.0.0" strip-ansi "^7.0.1" -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -17141,15 +17081,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -17220,7 +17151,7 @@ stringify-object@~0.1.7: resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-0.1.8.tgz#463348f38fdcd4fec1c011084c24a59ac653c1ee" integrity sha512-wud/ZQEJjTrbwG3x8aD4OnPoo1Tb/AYXazI4CMEerAjLhWCou3OYhyBzoqRXbDVGC6/XDuAZxIWjVOv7nzjq+g== -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -17241,13 +17172,6 @@ strip-ansi@^5.0.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -18417,11 +18341,6 @@ uuid@^8.0.0, uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - v8-compile-cache-lib@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -18846,7 +18765,7 @@ wonka@^6.3.2: resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.4.tgz#76eb9316e3d67d7febf4945202b5bdb2db534594" integrity sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -18864,15 +18783,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From 33f7fe56042fa5c7ca0de6278d84d261db34dd28 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Fri, 19 Apr 2024 09:29:03 +0700 Subject: [PATCH 003/132] chore: fix for mayachain --- packages/thor/src/datasource/chain/chain.data-source.ts | 5 ++--- packages/thor/src/manifests.ts | 1 + packages/thor/src/signers/ledger.signer.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/thor/src/datasource/chain/chain.data-source.ts b/packages/thor/src/datasource/chain/chain.data-source.ts index 63b093c3..3356fc1a 100644 --- a/packages/thor/src/datasource/chain/chain.data-source.ts +++ b/packages/thor/src/datasource/chain/chain.data-source.ts @@ -51,11 +51,10 @@ export class ChainDataSource extends DataSource { const { data: resp } = await this.rest.get<{ balances: Array }>( `/cosmos/bank/v1beta1/balances/${address}` ); - const thorchain = 'THORChain' as AddressChain; - const maya = 'MAYAChain' as AddressChain; + const cryptoAssetsInput = resp.balances.map( ({ denom }) => ({ - chain: denom === 'rune' ? thorchain : maya, + chain: this.manifest.chain as AddressChain, contract: this.manifest.denom === denom ? null : denom, }) ); diff --git a/packages/thor/src/manifests.ts b/packages/thor/src/manifests.ts index ee3026b8..daa1f487 100644 --- a/packages/thor/src/manifests.ts +++ b/packages/thor/src/manifests.ts @@ -48,6 +48,7 @@ export interface ThorManifest extends Chain.Manifest { name: string; decimals: any; chainId: string; + chain: string; rpcURL: string; denom: string; prefix: string; diff --git a/packages/thor/src/signers/ledger.signer.ts b/packages/thor/src/signers/ledger.signer.ts index 43fa5f41..ddd129bc 100644 --- a/packages/thor/src/signers/ledger.signer.ts +++ b/packages/thor/src/signers/ledger.signer.ts @@ -14,8 +14,8 @@ export class LedgerSigner extends Signer.Provider { } verifyAddress(address: string): boolean { - const thorchainAddressRegex = /^thor[a-z0-9]{25,39}$/i; - return thorchainAddressRegex.test(address); + const addressRegex = /^(thor|maya)[a-z0-9]{25,39}$/i; + return addressRegex.test(address); } async getPrivateKey(_derivation: string) { From 197c03eb9c29b112820d43fdb7bb689f5c3ae828 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Fri, 19 Apr 2024 09:45:28 +0700 Subject: [PATCH 004/132] chore: update LedgerSigner for Thor/Maya chain --- packages/thor/src/signers/ledger.signer.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/thor/src/signers/ledger.signer.ts b/packages/thor/src/signers/ledger.signer.ts index ddd129bc..86e03d7f 100644 --- a/packages/thor/src/signers/ledger.signer.ts +++ b/packages/thor/src/signers/ledger.signer.ts @@ -3,9 +3,11 @@ import Transport from '@ledgerhq/hw-transport'; import { Signer, SignerDecorator } from '@xdefi-tech/chains-core'; import { ChainMsg } from '../msg'; +import * as manifests from '../manifests'; @SignerDecorator(Signer.SignerType.LEDGER) export class LedgerSigner extends Signer.Provider { + declare manifest: manifests.ThorManifest; private transport: Transport; constructor(transport: Transport) { @@ -27,7 +29,7 @@ export class LedgerSigner extends Signer.Provider { const derivationArray = derivation.replace(/'/g, '').split('/').map(Number); const { bech32Address } = await app.getAddressAndPubKey( derivationArray, - 'thor' + this.manifest.prefix ); return bech32Address; From 7f0b1e13249456d47766904b44d7f23e5683ec4b Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Fri, 19 Apr 2024 10:43:17 +0700 Subject: [PATCH 005/132] chore: update --- packages/thor/src/signers/ledger.signer.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/thor/src/signers/ledger.signer.ts b/packages/thor/src/signers/ledger.signer.ts index 86e03d7f..abc45250 100644 --- a/packages/thor/src/signers/ledger.signer.ts +++ b/packages/thor/src/signers/ledger.signer.ts @@ -3,11 +3,9 @@ import Transport from '@ledgerhq/hw-transport'; import { Signer, SignerDecorator } from '@xdefi-tech/chains-core'; import { ChainMsg } from '../msg'; -import * as manifests from '../manifests'; @SignerDecorator(Signer.SignerType.LEDGER) export class LedgerSigner extends Signer.Provider { - declare manifest: manifests.ThorManifest; private transport: Transport; constructor(transport: Transport) { @@ -27,9 +25,10 @@ export class LedgerSigner extends Signer.Provider { async getAddress(derivation: string): Promise { const app = new THORChainApp(this.transport as Transport); const derivationArray = derivation.replace(/'/g, '').split('/').map(Number); + const prefix = derivation.slice(0, 4) const { bech32Address } = await app.getAddressAndPubKey( derivationArray, - this.manifest.prefix + prefix ); return bech32Address; From d7f8737e7fbe086c041cff914efde03f877d2a12 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Fri, 19 Apr 2024 10:57:59 +0700 Subject: [PATCH 006/132] chore: update addressRegex --- packages/thor/src/signers/ledger.signer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/thor/src/signers/ledger.signer.ts b/packages/thor/src/signers/ledger.signer.ts index abc45250..b66702bf 100644 --- a/packages/thor/src/signers/ledger.signer.ts +++ b/packages/thor/src/signers/ledger.signer.ts @@ -14,7 +14,7 @@ export class LedgerSigner extends Signer.Provider { } verifyAddress(address: string): boolean { - const addressRegex = /^(thor|maya)[a-z0-9]{25,39}$/i; + const addressRegex = /^(thor|maya)1[a-z0-9]{26,38}$/i; return addressRegex.test(address); } @@ -25,7 +25,7 @@ export class LedgerSigner extends Signer.Provider { async getAddress(derivation: string): Promise { const app = new THORChainApp(this.transport as Transport); const derivationArray = derivation.replace(/'/g, '').split('/').map(Number); - const prefix = derivation.slice(0, 4) + const prefix = derivation.slice(0, 4); const { bech32Address } = await app.getAddressAndPubKey( derivationArray, prefix From 32eb74be88e6bd2a51f61ed60ec9077b5d782b6b Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Tue, 19 Mar 2024 15:14:36 +0700 Subject: [PATCH 007/132] feat: add sign raw transactions to btc --- .../bitcoin/src/signers/private-key.signer.spec.ts | 12 +++++++++++- packages/bitcoin/src/signers/private-key.signer.ts | 14 ++++++++++++++ .../bitcoin/src/signers/seed-phrase.signer.spec.ts | 10 ++++++++++ packages/bitcoin/src/signers/seed-phrase.signer.ts | 9 +++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/packages/bitcoin/src/signers/private-key.signer.spec.ts b/packages/bitcoin/src/signers/private-key.signer.spec.ts index 7f6d602d..0fd5aa64 100644 --- a/packages/bitcoin/src/signers/private-key.signer.spec.ts +++ b/packages/bitcoin/src/signers/private-key.signer.spec.ts @@ -39,12 +39,22 @@ describe('private-key.signer', () => { expect(await signer.getAddress('')).toBe(txInput.from); }); - it('should sign a transaction using a ledger device', async () => { + it('should sign a transaction using a private key', async () => { await signer.sign(message as ChainMsg); expect(message.signedTransaction).toBeTruthy(); }); + it('should sign a raw transaction using a private key', async () => { + const txHex = + '70736274ff0100800200000001a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000000100de01000000000101426c66ff1f3b908caa99e2added93d818408c6df40448262b3fdb3b1ea934a9c0100000000ffffffff0210270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a53017a1400000000001600148f8c74cae629eb02883b3d70ac030617fd2e1a6602473044022045b7469de22230b35493fab0f2c5ca4ae3ac84c9c14c9530ea40ada7fa9e1f9c02203efa57d574ffd1a816e58f69cd7b05e7ce42c66167378f0eaed90cee8552ebc20121025182c020a60cdf306deb7a9b3eb4ed26656864e7a3969b6e372323b29d0666a30000000001011f10270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000'; + const signedTx = await signer.signRawTransaction(txHex); + + expect(signedTx).toEqual( + '02000000000101a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5302483045022100883119b3ba1fccb4ca79d6df974018bba0c838ffc1fbb4abb959e8685a03931002204e40ee30fdb35513f194e55878b79eaa81fde381cc93a0c97f35788ac8f48857012103e389368c5d8bd73599616a574d9b74bf77cb5aee13692e5a3855a7fd2b945f9200000000' + ); + }); + it('should return false when verifing an invalid address', async () => { expect(signer.verifyAddress('0xDEADBEEF')).toBe(false); }); diff --git a/packages/bitcoin/src/signers/private-key.signer.ts b/packages/bitcoin/src/signers/private-key.signer.ts index 1e7c72a6..2cf48acb 100644 --- a/packages/bitcoin/src/signers/private-key.signer.ts +++ b/packages/bitcoin/src/signers/private-key.signer.ts @@ -63,6 +63,20 @@ export class PrivateKeySigner extends Signer.Provider { message.sign(txP2WPKH.hex); } + + async signRawTransaction( + txHex: string, + derivation?: string + ): Promise { + const pk = Bitcoin.ECPair.fromWIF( + await this.getPrivateKey(derivation ?? '') + ); + const psbt = Bitcoin.Psbt.fromHex(txHex); + + psbt.signAllInputs(pk); + psbt.finalizeAllInputs(); + return psbt.extractTransaction(true).toHex(); + } } export default PrivateKeySigner; diff --git a/packages/bitcoin/src/signers/seed-phrase.signer.spec.ts b/packages/bitcoin/src/signers/seed-phrase.signer.spec.ts index 212ec383..ff09db0b 100644 --- a/packages/bitcoin/src/signers/seed-phrase.signer.spec.ts +++ b/packages/bitcoin/src/signers/seed-phrase.signer.spec.ts @@ -50,6 +50,16 @@ describe('seed-phrase.signer', () => { expect(message.signedTransaction).toBeTruthy(); }); + it('should sign a raw transaction using the seed phrase', async () => { + const txHex = + '70736274ff0100800200000001a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000000100de01000000000101426c66ff1f3b908caa99e2added93d818408c6df40448262b3fdb3b1ea934a9c0100000000ffffffff0210270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a53017a1400000000001600148f8c74cae629eb02883b3d70ac030617fd2e1a6602473044022045b7469de22230b35493fab0f2c5ca4ae3ac84c9c14c9530ea40ada7fa9e1f9c02203efa57d574ffd1a816e58f69cd7b05e7ce42c66167378f0eaed90cee8552ebc20121025182c020a60cdf306deb7a9b3eb4ed26656864e7a3969b6e372323b29d0666a30000000001011f10270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000'; + const signedTx = await signer.signRawTransaction(txHex, derivation); + + expect(signedTx).toEqual( + '02000000000101a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5302483045022100883119b3ba1fccb4ca79d6df974018bba0c838ffc1fbb4abb959e8685a03931002204e40ee30fdb35513f194e55878b79eaa81fde381cc93a0c97f35788ac8f48857012103e389368c5d8bd73599616a574d9b74bf77cb5aee13692e5a3855a7fd2b945f9200000000' + ); + }); + it('should return false when verifing an invalid address', async () => { expect(signer.verifyAddress('0xDEADBEEF')).toBe(false); }); diff --git a/packages/bitcoin/src/signers/seed-phrase.signer.ts b/packages/bitcoin/src/signers/seed-phrase.signer.ts index 90400560..0b070eac 100644 --- a/packages/bitcoin/src/signers/seed-phrase.signer.ts +++ b/packages/bitcoin/src/signers/seed-phrase.signer.ts @@ -68,6 +68,15 @@ export class SeedPhraseSigner extends Signer.Provider { message.sign(txP2WPKH.hex); } + + async signRawTransaction(txHex: string, derivation: string): Promise { + const pk = Bitcoin.ECPair.fromWIF(await this.getPrivateKey(derivation)); + const psbt = Bitcoin.Psbt.fromHex(txHex); + + psbt.signAllInputs(pk); + psbt.finalizeAllInputs(); + return psbt.extractTransaction(true).toHex(); + } } export default SeedPhraseSigner; From 9821685711cb9222ae94e926afe3248f9904cf7f Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Thu, 21 Mar 2024 16:10:35 +0700 Subject: [PATCH 008/132] feat: utxo chains raw tx signers --- packages/bitcoincash/package.json | 2 +- .../src/signers/private-key.signer.spec.ts | 14 ++++++++++++-- .../src/signers/private-key.signer.ts | 18 ++++++++++++++++++ .../src/signers/seed-phrase.signer.spec.ts | 10 ++++++++++ .../src/signers/seed-phrase.signer.ts | 14 ++++++++++++++ .../src/signers/private-key.signer.spec.ts | 10 ++++++++++ .../dogecoin/src/signers/private-key.signer.ts | 16 ++++++++++++++++ .../src/signers/seed-phrase.signer.spec.ts | 10 ++++++++++ .../dogecoin/src/signers/seed-phrase.signer.ts | 13 +++++++++++++ .../src/signers/private-key.signer.spec.ts | 10 ++++++++++ .../litecoin/src/signers/private-key.signer.ts | 16 ++++++++++++++++ .../src/signers/seed-phrase.signer.spec.ts | 10 ++++++++++ .../litecoin/src/signers/seed-phrase.signer.ts | 13 +++++++++++++ yarn.lock | 14 +------------- 14 files changed, 154 insertions(+), 16 deletions(-) diff --git a/packages/bitcoincash/package.json b/packages/bitcoincash/package.json index 6dc046d9..39cee399 100644 --- a/packages/bitcoincash/package.json +++ b/packages/bitcoincash/package.json @@ -34,7 +34,7 @@ "bignumber.js": "9.1.2", "bip32": "2.0.4", "bip39": "3.1.0", - "bitcoinjs-lib": "6.1.5", + "bitcoinjs-lib": "5.2.0", "coininfo": "5.2.1", "coinkey": "3.0.0", "coinselect": "3.1.13", diff --git a/packages/bitcoincash/src/signers/private-key.signer.spec.ts b/packages/bitcoincash/src/signers/private-key.signer.spec.ts index 358e8977..f3c3fc52 100644 --- a/packages/bitcoincash/src/signers/private-key.signer.spec.ts +++ b/packages/bitcoincash/src/signers/private-key.signer.spec.ts @@ -37,11 +37,11 @@ describe('private-key.signer', () => { message = provider.createMsg(txInput); }); - it('should get an address from the ledger device', async () => { + it('should get an address from the private key', async () => { expect(await signer.getAddress()).toBe(txInput.from); }); - it('should sign a transaction using a ledger device', async () => { + it('should sign a transaction using a private key', async () => { await signer.sign(message as ChainMsg); expect(message.signedTransaction).toEqual( @@ -49,6 +49,16 @@ describe('private-key.signer', () => { ); }); + it('should sign a raw transaction using a private key', async () => { + const txHex = + '020000000186339733afada6e9c280ed345dba8c67388066e3a0cd887edbc4c4eff3a436950000000000ffffffff0264000000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688acca250000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688ac00000000'; + const signedTx = await signer.signRawTransaction(txHex); + + expect(signedTx).toEqual( + '02000000000101a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5302483045022100883119b3ba1fccb4ca79d6df974018bba0c838ffc1fbb4abb959e8685a03931002204e40ee30fdb35513f194e55878b79eaa81fde381cc93a0c97f35788ac8f48857012103e389368c5d8bd73599616a574d9b74bf77cb5aee13692e5a3855a7fd2b945f9200000000' + ); + }); + it('should return false when verifing an invalid address', async () => { expect(signer.verifyAddress('0xDEADBEEF')).toBe(false); }); diff --git a/packages/bitcoincash/src/signers/private-key.signer.ts b/packages/bitcoincash/src/signers/private-key.signer.ts index 0d3e7c8a..863175b7 100644 --- a/packages/bitcoincash/src/signers/private-key.signer.ts +++ b/packages/bitcoincash/src/signers/private-key.signer.ts @@ -2,6 +2,7 @@ import { Signer, SignerDecorator } from '@xdefi-tech/chains-core'; import { UTXO } from '@xdefi-tech/chains-utxo'; import * as BitcoinCash from '@psf/bitcoincashjs-lib'; +import * as Bitcoin from 'bitcoinjs-lib'; import coininfo from 'coininfo'; import * as bchaddr from 'bchaddrjs'; @@ -71,8 +72,25 @@ export class PrivateKeySigner extends Signer.Provider { utxo.witnessUtxo.value ); }); + message.sign(builder.build().toHex()); } + + async signRawTransaction( + txHex: string, + derivation?: string + ): Promise { + const network = coininfo.bitcoincash.main.toBitcoinJS(); + const pk = Bitcoin.ECPair.fromWIF( + await this.getPrivateKey(derivation ?? ''), + network + ); + const psbt = Bitcoin.Psbt.fromHex(txHex, network); + + psbt.signAllInputs(pk); + psbt.finalizeAllInputs(); + return psbt.extractTransaction(true).toHex(); + } } export default PrivateKeySigner; diff --git a/packages/bitcoincash/src/signers/seed-phrase.signer.spec.ts b/packages/bitcoincash/src/signers/seed-phrase.signer.spec.ts index 2848f91b..b478cfa4 100644 --- a/packages/bitcoincash/src/signers/seed-phrase.signer.spec.ts +++ b/packages/bitcoincash/src/signers/seed-phrase.signer.spec.ts @@ -53,6 +53,16 @@ describe('seed-phrase.signer', () => { expect(message.signedTransaction).toBeTruthy(); }); + it('should sign a raw transaction using a seed phrase', async () => { + const txHex = + '020000000186339733afada6e9c280ed345dba8c67388066e3a0cd887edbc4c4eff3a436950000000000ffffffff0264000000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688acca250000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688ac00000000'; + const signedTx = await signer.signRawTransaction(txHex, derivation); + + expect(signedTx).toEqual( + '02000000000101a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5302483045022100883119b3ba1fccb4ca79d6df974018bba0c838ffc1fbb4abb959e8685a03931002204e40ee30fdb35513f194e55878b79eaa81fde381cc93a0c97f35788ac8f48857012103e389368c5d8bd73599616a574d9b74bf77cb5aee13692e5a3855a7fd2b945f9200000000' + ); + }); + it('should return false when verifing an invalid address', async () => { expect(signer.verifyAddress('0xDEADBEEF')).toBe(false); }); diff --git a/packages/bitcoincash/src/signers/seed-phrase.signer.ts b/packages/bitcoincash/src/signers/seed-phrase.signer.ts index d5da35dc..4b5dd565 100644 --- a/packages/bitcoincash/src/signers/seed-phrase.signer.ts +++ b/packages/bitcoincash/src/signers/seed-phrase.signer.ts @@ -5,6 +5,7 @@ import * as bip32 from 'bip32'; import * as bip39 from 'bip39'; /*eslint import/namespace: [2, { allowComputed: true }]*/ import * as BitcoinCash from '@psf/bitcoincashjs-lib'; +import * as Bitcoin from 'bitcoinjs-lib'; import coininfo from 'coininfo'; import * as bchaddr from 'bchaddrjs'; @@ -87,6 +88,19 @@ export class SeedPhraseSigner extends Signer.Provider { }); message.sign(builder.build().toHex()); } + + async signRawTransaction(txHex: string, derivation: string): Promise { + const network = coininfo.bitcoincash.main.toBitcoinJS(); + const pk = BitcoinCash.ECPair.fromWIF( + await this.getPrivateKey(derivation), + network + ); + const psbt = BitcoinCash.Psbt.fromHex(txHex, network); + + psbt.signAllInputs(pk); + psbt.finalizeAllInputs(); + return psbt.extractTransaction(true).toHex(); + } } export default SeedPhraseSigner; diff --git a/packages/dogecoin/src/signers/private-key.signer.spec.ts b/packages/dogecoin/src/signers/private-key.signer.spec.ts index 3b45d8d1..eff35dfd 100644 --- a/packages/dogecoin/src/signers/private-key.signer.spec.ts +++ b/packages/dogecoin/src/signers/private-key.signer.spec.ts @@ -75,6 +75,16 @@ describe('private-key.signer', () => { ); }); + it('should sign a raw transaction using a private key', async () => { + const txHex = + '70736274ff0100800200000001a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000000100de01000000000101426c66ff1f3b908caa99e2added93d818408c6df40448262b3fdb3b1ea934a9c0100000000ffffffff0210270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a53017a1400000000001600148f8c74cae629eb02883b3d70ac030617fd2e1a6602473044022045b7469de22230b35493fab0f2c5ca4ae3ac84c9c14c9530ea40ada7fa9e1f9c02203efa57d574ffd1a816e58f69cd7b05e7ce42c66167378f0eaed90cee8552ebc20121025182c020a60cdf306deb7a9b3eb4ed26656864e7a3969b6e372323b29d0666a30000000001011f10270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000'; + const signedTx = await signer.signRawTransaction(txHex); + + expect(signedTx).toEqual( + '02000000000101a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5302483045022100883119b3ba1fccb4ca79d6df974018bba0c838ffc1fbb4abb959e8685a03931002204e40ee30fdb35513f194e55878b79eaa81fde381cc93a0c97f35788ac8f48857012103e389368c5d8bd73599616a574d9b74bf77cb5aee13692e5a3855a7fd2b945f9200000000' + ); + }); + it('should return false when verifing an invalid address', async () => { expect(signer.verifyAddress('0xDEADBEEF')).toBe(false); }); diff --git a/packages/dogecoin/src/signers/private-key.signer.ts b/packages/dogecoin/src/signers/private-key.signer.ts index d2a15426..3ea83c57 100644 --- a/packages/dogecoin/src/signers/private-key.signer.ts +++ b/packages/dogecoin/src/signers/private-key.signer.ts @@ -63,6 +63,22 @@ export class PrivateKeySigner extends Signer.Provider { message.sign(psbt.hex); } + + async signRawTransaction( + txHex: string, + derivation?: string + ): Promise { + const network = coininfo.dogecoin.main.toBitcoinJS(); + const pk = Dogecoin.ECPair.fromWIF( + await this.getPrivateKey(derivation ?? ''), + network + ); + const psbt = Dogecoin.Psbt.fromHex(txHex, network); + + psbt.signAllInputs(pk); + psbt.finalizeAllInputs(); + return psbt.extractTransaction(true).toHex(); + } } export default PrivateKeySigner; diff --git a/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts b/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts index f7bfff4b..dffedaff 100644 --- a/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts +++ b/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts @@ -77,6 +77,16 @@ describe('seed-phrase.signer', () => { ); }); + it('should sign a raw transaction using a seed phrase', async () => { + const txHex = + '70736274ff0100800200000001a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000000100de01000000000101426c66ff1f3b908caa99e2added93d818408c6df40448262b3fdb3b1ea934a9c0100000000ffffffff0210270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a53017a1400000000001600148f8c74cae629eb02883b3d70ac030617fd2e1a6602473044022045b7469de22230b35493fab0f2c5ca4ae3ac84c9c14c9530ea40ada7fa9e1f9c02203efa57d574ffd1a816e58f69cd7b05e7ce42c66167378f0eaed90cee8552ebc20121025182c020a60cdf306deb7a9b3eb4ed26656864e7a3969b6e372323b29d0666a30000000001011f10270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000'; + const signedTx = await signer.signRawTransaction(txHex, derivation); + + expect(signedTx).toEqual( + '02000000000101a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5302483045022100883119b3ba1fccb4ca79d6df974018bba0c838ffc1fbb4abb959e8685a03931002204e40ee30fdb35513f194e55878b79eaa81fde381cc93a0c97f35788ac8f48857012103e389368c5d8bd73599616a574d9b74bf77cb5aee13692e5a3855a7fd2b945f9200000000' + ); + }); + it('should return false when verifing an invalid address', async () => { expect(signer.verifyAddress('0xDEADBEEF')).toBe(false); }); diff --git a/packages/dogecoin/src/signers/seed-phrase.signer.ts b/packages/dogecoin/src/signers/seed-phrase.signer.ts index 45eaa9ae..57315e91 100644 --- a/packages/dogecoin/src/signers/seed-phrase.signer.ts +++ b/packages/dogecoin/src/signers/seed-phrase.signer.ts @@ -70,6 +70,19 @@ export class SeedPhraseSigner extends Signer.Provider { message.sign(psbt.hex); } + + async signRawTransaction(txHex: string, derivation: string): Promise { + const network = coininfo.dogecoin.main.toBitcoinJS(); + const pk = Dogecoin.ECPair.fromWIF( + await this.getPrivateKey(derivation), + network + ); + const psbt = Dogecoin.Psbt.fromHex(txHex, network); + + psbt.signAllInputs(pk); + psbt.finalizeAllInputs(); + return psbt.extractTransaction(true).toHex(); + } } export default SeedPhraseSigner; diff --git a/packages/litecoin/src/signers/private-key.signer.spec.ts b/packages/litecoin/src/signers/private-key.signer.spec.ts index 80909d00..c4a0205f 100644 --- a/packages/litecoin/src/signers/private-key.signer.spec.ts +++ b/packages/litecoin/src/signers/private-key.signer.spec.ts @@ -49,6 +49,16 @@ describe('private-key.signer', () => { ); }); + it('should sign a raw transaction using a private key', async () => { + const txHex = + '70736274ff0100710200000001467066a38eef3daa8a2bb0e35dccfd098e505b17efa7fcee45e390446679c35c0000000000ffffffff0264000000000000001600145c62b57d49ea96f0ff6a8473c3332ec3fc501ca4ca250000000000001600145c62b57d49ea96f0ff6a8473c3332ec3fc501ca4000000000001011f10270000000000001600145c62b57d49ea96f0ff6a8473c3332ec3fc501ca4000000'; + const signedTx = await signer.signRawTransaction(txHex); + + expect(signedTx).toEqual( + '02000000000101467066a38eef3daa8a2bb0e35dccfd098e505b17efa7fcee45e390446679c35c0000000000ffffffff0264000000000000001600145c62b57d49ea96f0ff6a8473c3332ec3fc501ca4ca250000000000001600145c62b57d49ea96f0ff6a8473c3332ec3fc501ca40248304502210095104f03cf04aa7e9f8516b9280dc30ad091f7a1aafb49e9e1bdd8c4513701f2022039e449e17cc4613128b320b15c6a7f2937158f0fa6b6714f8472c6f035d977c00121026d165716c33a95fbbed7c3bdfc155afc43dce53eacf059fc65aa6092f8625ad800000000' + ); + }); + it('should return false when verifing an invalid address', async () => { expect(signer.verifyAddress('0xDEADBEEF')).toBe(false); }); diff --git a/packages/litecoin/src/signers/private-key.signer.ts b/packages/litecoin/src/signers/private-key.signer.ts index fd25a507..d7e95804 100644 --- a/packages/litecoin/src/signers/private-key.signer.ts +++ b/packages/litecoin/src/signers/private-key.signer.ts @@ -63,6 +63,22 @@ export class PrivateKeySigner extends Signer.Provider { message.sign(psbt.hex); } + + async signRawTransaction( + txHex: string, + derivation?: string + ): Promise { + const network = coininfo.litecoin.main.toBitcoinJS(); + const pk = Litecoin.ECPair.fromWIF( + await this.getPrivateKey(derivation ?? ''), + network + ); + const psbt = Litecoin.Psbt.fromHex(txHex, network); + + psbt.signAllInputs(pk); + psbt.finalizeAllInputs(); + return psbt.extractTransaction(true).toHex(); + } } export default PrivateKeySigner; diff --git a/packages/litecoin/src/signers/seed-phrase.signer.spec.ts b/packages/litecoin/src/signers/seed-phrase.signer.spec.ts index 1d933e92..1dd5c8f5 100644 --- a/packages/litecoin/src/signers/seed-phrase.signer.spec.ts +++ b/packages/litecoin/src/signers/seed-phrase.signer.spec.ts @@ -50,6 +50,16 @@ describe('seed-phrase.signer', () => { expect(message.signedTransaction).toBeTruthy(); }); + it('should sign a raw transaction using a seed phrase', async () => { + const txHex = + '70736274ff0100710200000001467066a38eef3daa8a2bb0e35dccfd098e505b17efa7fcee45e390446679c35c0000000000ffffffff0264000000000000001600145c62b57d49ea96f0ff6a8473c3332ec3fc501ca4ca250000000000001600145c62b57d49ea96f0ff6a8473c3332ec3fc501ca4000000000001011f10270000000000001600145c62b57d49ea96f0ff6a8473c3332ec3fc501ca4000000'; + const signedTx = await signer.signRawTransaction(txHex, derivation); + + expect(signedTx).toEqual( + '02000000000101467066a38eef3daa8a2bb0e35dccfd098e505b17efa7fcee45e390446679c35c0000000000ffffffff0264000000000000001600145c62b57d49ea96f0ff6a8473c3332ec3fc501ca4ca250000000000001600145c62b57d49ea96f0ff6a8473c3332ec3fc501ca40248304502210095104f03cf04aa7e9f8516b9280dc30ad091f7a1aafb49e9e1bdd8c4513701f2022039e449e17cc4613128b320b15c6a7f2937158f0fa6b6714f8472c6f035d977c00121026d165716c33a95fbbed7c3bdfc155afc43dce53eacf059fc65aa6092f8625ad800000000' + ); + }); + it('should return false when verifing an invalid address', async () => { expect(signer.verifyAddress('0xDEADBEEF')).toBe(false); }); diff --git a/packages/litecoin/src/signers/seed-phrase.signer.ts b/packages/litecoin/src/signers/seed-phrase.signer.ts index 5c8bb19e..09567c56 100644 --- a/packages/litecoin/src/signers/seed-phrase.signer.ts +++ b/packages/litecoin/src/signers/seed-phrase.signer.ts @@ -70,6 +70,19 @@ export class SeedPhraseSigner extends Signer.Provider { message.sign(psbt.hex); } + + async signRawTransaction(txHex: string, derivation: string): Promise { + const network = coininfo.litecoin.main.toBitcoinJS(); + const pk = Litecoin.ECPair.fromWIF( + await this.getPrivateKey(derivation), + network + ); + const psbt = Litecoin.Psbt.fromHex(txHex, network); + + psbt.signAllInputs(pk); + psbt.finalizeAllInputs(); + return psbt.extractTransaction(true).toHex(); + } } export default SeedPhraseSigner; diff --git a/yarn.lock b/yarn.lock index 9b94167c..8630a794 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8035,7 +8035,7 @@ bindings@^1.3.0, bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bip174@^2.0.1, bip174@^2.1.1: +bip174@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bip174/-/bip174-2.1.1.tgz#ef3e968cf76de234a546962bcf572cc150982f9f" integrity sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ== @@ -8129,18 +8129,6 @@ bitcoinjs-lib@5.2.0, bitcoinjs-lib@^5.2.0: varuint-bitcoin "^1.0.4" wif "^2.0.1" -bitcoinjs-lib@6.1.5: - version "6.1.5" - resolved "https://registry.yarnpkg.com/bitcoinjs-lib/-/bitcoinjs-lib-6.1.5.tgz#3b03509ae7ddd80a440f10fc38c4a97f0a028d8c" - integrity sha512-yuf6xs9QX/E8LWE2aMJPNd0IxGofwfuVOiYdNUESkc+2bHHVKjhJd8qewqapeoolh9fihzHGoDCB5Vkr57RZCQ== - dependencies: - "@noble/hashes" "^1.2.0" - bech32 "^2.0.0" - bip174 "^2.1.1" - bs58check "^3.0.1" - typeforce "^1.11.3" - varuint-bitcoin "^1.1.2" - bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" From 6eacd35c034fcec681f3b36ea4bed1fa6ac5bc18 Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Thu, 21 Mar 2024 16:11:42 +0700 Subject: [PATCH 009/132] fix: lint --- packages/bitcoincash/src/signers/seed-phrase.signer.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/bitcoincash/src/signers/seed-phrase.signer.ts b/packages/bitcoincash/src/signers/seed-phrase.signer.ts index 4b5dd565..1631b505 100644 --- a/packages/bitcoincash/src/signers/seed-phrase.signer.ts +++ b/packages/bitcoincash/src/signers/seed-phrase.signer.ts @@ -5,7 +5,6 @@ import * as bip32 from 'bip32'; import * as bip39 from 'bip39'; /*eslint import/namespace: [2, { allowComputed: true }]*/ import * as BitcoinCash from '@psf/bitcoincashjs-lib'; -import * as Bitcoin from 'bitcoinjs-lib'; import coininfo from 'coininfo'; import * as bchaddr from 'bchaddrjs'; From 80121a3a358be15d7e1d84c6717a1de414234666 Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Thu, 28 Mar 2024 18:00:14 +0200 Subject: [PATCH 010/132] feat: add personal signing to evm package --- .changeset/shaggy-donuts-report.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/shaggy-donuts-report.md diff --git a/.changeset/shaggy-donuts-report.md b/.changeset/shaggy-donuts-report.md new file mode 100644 index 00000000..2a4db599 --- /dev/null +++ b/.changeset/shaggy-donuts-report.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-evm': patch +--- + +Feat: add personal signing From b762c60f33001364b2439c7cbe8d98730d81c311 Mon Sep 17 00:00:00 2001 From: cicd Date: Thu, 28 Mar 2024 16:09:06 +0000 Subject: [PATCH 011/132] Version packages --- .changeset/shaggy-donuts-report.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/shaggy-donuts-report.md diff --git a/.changeset/shaggy-donuts-report.md b/.changeset/shaggy-donuts-report.md deleted file mode 100644 index 2a4db599..00000000 --- a/.changeset/shaggy-donuts-report.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-evm': patch ---- - -Feat: add personal signing From d54998ac2353a97aae1d15d779cd124d0461db28 Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Fri, 29 Mar 2024 15:42:00 +0700 Subject: [PATCH 012/132] feat: use mocks for dogecoin tests --- packages/dogecoin/src/msg.ts | 2 +- packages/dogecoin/src/signers/ledger.signer.spec.ts | 8 ++++++++ packages/dogecoin/src/signers/private-key.signer.spec.ts | 9 ++++++--- packages/dogecoin/src/signers/seed-phrase.signer.spec.ts | 5 +++++ packages/dogecoin/src/signers/trezor.signer.spec.ts | 5 +++++ 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/dogecoin/src/msg.ts b/packages/dogecoin/src/msg.ts index 8b03b928..a006c28b 100644 --- a/packages/dogecoin/src/msg.ts +++ b/packages/dogecoin/src/msg.ts @@ -37,7 +37,7 @@ export class ChainMsg extends BaseMsg { return this.data; } - async buildTx() { + async buildTx(): Promise { const msgData = this.toData(); const utxos = await this.provider.utxoDataSource.scanUTXOs(this.data.from); const { fee } = await this.getFee(); diff --git a/packages/dogecoin/src/signers/ledger.signer.spec.ts b/packages/dogecoin/src/signers/ledger.signer.spec.ts index 418781e6..4197e751 100644 --- a/packages/dogecoin/src/signers/ledger.signer.spec.ts +++ b/packages/dogecoin/src/signers/ledger.signer.spec.ts @@ -38,6 +38,14 @@ jest.mock('../datasource/indexer/queries/balances.query', () => ({ }, })); +jest.mock('coinselect/accumulative', () => ({ + __esModule: true, + default: () => ({ + inputs: [{ value: 1000, witnessUtxo: { script: '' } }], + outputs: [{ value: 100 }], + }), +})); + describe('ledger.signer', () => { let signer: LedgerSigner; let derivationPath: string; diff --git a/packages/dogecoin/src/signers/private-key.signer.spec.ts b/packages/dogecoin/src/signers/private-key.signer.spec.ts index eff35dfd..c1fd522d 100644 --- a/packages/dogecoin/src/signers/private-key.signer.spec.ts +++ b/packages/dogecoin/src/signers/private-key.signer.spec.ts @@ -14,6 +14,11 @@ jest.mock('../datasource/indexer/queries/balances.query', () => ({ }, })); +jest.mock('coinselect/accumulative', () => ({ + __esModule: true, + default: () => ({ inputs: [{ value: 1000 }], outputs: [{ value: 100 }] }), +})); + describe('private-key.signer', () => { let privateKey: string; let signer: PrivateKeySigner; @@ -70,9 +75,7 @@ describe('private-key.signer', () => { it('should sign a transaction using the private key', async () => { await signer.sign(message as ChainMsg); - expect(message.signedTransaction).toEqual( - '0200000001ad2c88f940cd48f724d667e58323efd048bdea62e32f426cf04b8fdf87071216000000006a473044022068b491ee366b00d7ee0643111977b4f9d69d280446e4672c25f91e137f82ca5702205ce414f90daa6cb99f79ad80db6b2fb6cc700dcb74594e57b4f87b72d60260bf0121037e6c9ff86d24858e73a75d08d1c4270cf3aa56d421e362eacdd063e264e5b12cffffffff0164000000000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac00000000' - ); + expect(message.signedTransaction).toEqual('signedtx'); }); it('should sign a raw transaction using a private key', async () => { diff --git a/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts b/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts index dffedaff..7ae76f9d 100644 --- a/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts +++ b/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts @@ -13,6 +13,11 @@ jest.mock('../datasource/indexer/queries/balances.query', () => ({ }, })); +jest.mock('coinselect/accumulative', () => ({ + __esModule: true, + default: () => ({ inputs: [{ value: 1000 }], outputs: [{ value: 100 }] }), +})); + describe('seed-phrase.signer', () => { let privateKey: string; let derivation: string; diff --git a/packages/dogecoin/src/signers/trezor.signer.spec.ts b/packages/dogecoin/src/signers/trezor.signer.spec.ts index f1501380..d3cabf1c 100644 --- a/packages/dogecoin/src/signers/trezor.signer.spec.ts +++ b/packages/dogecoin/src/signers/trezor.signer.spec.ts @@ -49,6 +49,11 @@ jest.mock('../datasource/indexer/queries/balances.query', () => ({ }, })); +jest.mock('coinselect/accumulative', () => ({ + __esModule: true, + default: () => ({ inputs: [{ value: 1000 }], outputs: [{ value: 100 }] }), +})); + describe('trezor.signer', () => { let signer: TrezorSigner; let derivationPath: string; From e1a721a2c2f5a886d41bb0e2e101ac143ed43f2c Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Fri, 29 Mar 2024 15:53:50 +0700 Subject: [PATCH 013/132] dont mock accumulate and use a real utxo --- packages/dogecoin/src/signers/ledger.signer.spec.ts | 8 -------- packages/dogecoin/src/signers/private-key.signer.spec.ts | 7 +------ packages/dogecoin/src/signers/seed-phrase.signer.spec.ts | 5 ----- packages/dogecoin/src/signers/trezor.signer.spec.ts | 5 ----- 4 files changed, 1 insertion(+), 24 deletions(-) diff --git a/packages/dogecoin/src/signers/ledger.signer.spec.ts b/packages/dogecoin/src/signers/ledger.signer.spec.ts index 4197e751..418781e6 100644 --- a/packages/dogecoin/src/signers/ledger.signer.spec.ts +++ b/packages/dogecoin/src/signers/ledger.signer.spec.ts @@ -38,14 +38,6 @@ jest.mock('../datasource/indexer/queries/balances.query', () => ({ }, })); -jest.mock('coinselect/accumulative', () => ({ - __esModule: true, - default: () => ({ - inputs: [{ value: 1000, witnessUtxo: { script: '' } }], - outputs: [{ value: 100 }], - }), -})); - describe('ledger.signer', () => { let signer: LedgerSigner; let derivationPath: string; diff --git a/packages/dogecoin/src/signers/private-key.signer.spec.ts b/packages/dogecoin/src/signers/private-key.signer.spec.ts index c1fd522d..c89f3da8 100644 --- a/packages/dogecoin/src/signers/private-key.signer.spec.ts +++ b/packages/dogecoin/src/signers/private-key.signer.spec.ts @@ -14,11 +14,6 @@ jest.mock('../datasource/indexer/queries/balances.query', () => ({ }, })); -jest.mock('coinselect/accumulative', () => ({ - __esModule: true, - default: () => ({ inputs: [{ value: 1000 }], outputs: [{ value: 100 }] }), -})); - describe('private-key.signer', () => { let privateKey: string; let signer: PrivateKeySigner; @@ -75,7 +70,7 @@ describe('private-key.signer', () => { it('should sign a transaction using the private key', async () => { await signer.sign(message as ChainMsg); - expect(message.signedTransaction).toEqual('signedtx'); + expect(message.signedTransaction).toEqual('0200000001ad2c88f940cd48f724d667e58323efd048bdea62e32f426cf04b8fdf87071216000000006a473044022068b491ee366b00d7ee0643111977b4f9d69d280446e4672c25f91e137f82ca5702205ce414f90daa6cb99f79ad80db6b2fb6cc700dcb74594e57b4f87b72d60260bf0121037e6c9ff86d24858e73a75d08d1c4270cf3aa56d421e362eacdd063e264e5b12cffffffff0164000000000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac00000000'); }); it('should sign a raw transaction using a private key', async () => { diff --git a/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts b/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts index 7ae76f9d..dffedaff 100644 --- a/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts +++ b/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts @@ -13,11 +13,6 @@ jest.mock('../datasource/indexer/queries/balances.query', () => ({ }, })); -jest.mock('coinselect/accumulative', () => ({ - __esModule: true, - default: () => ({ inputs: [{ value: 1000 }], outputs: [{ value: 100 }] }), -})); - describe('seed-phrase.signer', () => { let privateKey: string; let derivation: string; diff --git a/packages/dogecoin/src/signers/trezor.signer.spec.ts b/packages/dogecoin/src/signers/trezor.signer.spec.ts index d3cabf1c..f1501380 100644 --- a/packages/dogecoin/src/signers/trezor.signer.spec.ts +++ b/packages/dogecoin/src/signers/trezor.signer.spec.ts @@ -49,11 +49,6 @@ jest.mock('../datasource/indexer/queries/balances.query', () => ({ }, })); -jest.mock('coinselect/accumulative', () => ({ - __esModule: true, - default: () => ({ inputs: [{ value: 1000 }], outputs: [{ value: 100 }] }), -})); - describe('trezor.signer', () => { let signer: TrezorSigner; let derivationPath: string; From 5e9df547b1a8abc9da9c514017ee4e70cb41447e Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Fri, 29 Mar 2024 15:55:20 +0700 Subject: [PATCH 014/132] cleanup --- packages/dogecoin/src/signers/private-key.signer.spec.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/dogecoin/src/signers/private-key.signer.spec.ts b/packages/dogecoin/src/signers/private-key.signer.spec.ts index c89f3da8..eff35dfd 100644 --- a/packages/dogecoin/src/signers/private-key.signer.spec.ts +++ b/packages/dogecoin/src/signers/private-key.signer.spec.ts @@ -70,7 +70,9 @@ describe('private-key.signer', () => { it('should sign a transaction using the private key', async () => { await signer.sign(message as ChainMsg); - expect(message.signedTransaction).toEqual('0200000001ad2c88f940cd48f724d667e58323efd048bdea62e32f426cf04b8fdf87071216000000006a473044022068b491ee366b00d7ee0643111977b4f9d69d280446e4672c25f91e137f82ca5702205ce414f90daa6cb99f79ad80db6b2fb6cc700dcb74594e57b4f87b72d60260bf0121037e6c9ff86d24858e73a75d08d1c4270cf3aa56d421e362eacdd063e264e5b12cffffffff0164000000000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac00000000'); + expect(message.signedTransaction).toEqual( + '0200000001ad2c88f940cd48f724d667e58323efd048bdea62e32f426cf04b8fdf87071216000000006a473044022068b491ee366b00d7ee0643111977b4f9d69d280446e4672c25f91e137f82ca5702205ce414f90daa6cb99f79ad80db6b2fb6cc700dcb74594e57b4f87b72d60260bf0121037e6c9ff86d24858e73a75d08d1c4270cf3aa56d421e362eacdd063e264e5b12cffffffff0164000000000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac00000000' + ); }); it('should sign a raw transaction using a private key', async () => { From 2d2b7468bc0add878637a425444e3c7661d04e61 Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Fri, 29 Mar 2024 16:17:59 +0700 Subject: [PATCH 015/132] chore: changeset --- packages/dogecoin/src/msg.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/dogecoin/src/msg.ts b/packages/dogecoin/src/msg.ts index a006c28b..64ddf6cc 100644 --- a/packages/dogecoin/src/msg.ts +++ b/packages/dogecoin/src/msg.ts @@ -40,6 +40,7 @@ export class ChainMsg extends BaseMsg { async buildTx(): Promise { const msgData = this.toData(); const utxos = await this.provider.utxoDataSource.scanUTXOs(this.data.from); + // throw new Error(JSON.stringify(utxos)); const { fee } = await this.getFee(); if (!fee) throw new Error('Fee estimation is required for building transaction'); From 34bf98b1f4b0a44359138de74378b35edc5a81ad Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Fri, 29 Mar 2024 16:32:02 +0700 Subject: [PATCH 016/132] fix type --- packages/dogecoin/src/msg.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/dogecoin/src/msg.ts b/packages/dogecoin/src/msg.ts index 64ddf6cc..8b03b928 100644 --- a/packages/dogecoin/src/msg.ts +++ b/packages/dogecoin/src/msg.ts @@ -37,10 +37,9 @@ export class ChainMsg extends BaseMsg { return this.data; } - async buildTx(): Promise { + async buildTx() { const msgData = this.toData(); const utxos = await this.provider.utxoDataSource.scanUTXOs(this.data.from); - // throw new Error(JSON.stringify(utxos)); const { fee } = await this.getFee(); if (!fee) throw new Error('Fee estimation is required for building transaction'); From f5fae71e5bc14f8af7d089ef7246f22980993c84 Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Fri, 29 Mar 2024 16:38:21 +0700 Subject: [PATCH 017/132] chore: changeset --- .changeset/strong-needles-pump.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/strong-needles-pump.md diff --git a/.changeset/strong-needles-pump.md b/.changeset/strong-needles-pump.md new file mode 100644 index 00000000..0af62160 --- /dev/null +++ b/.changeset/strong-needles-pump.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-dogecoin': patch +--- + +update dogecoin mocks to not use network From a066744bc0463d9a32d43faad3beaf7c136b22b8 Mon Sep 17 00:00:00 2001 From: cicd Date: Fri, 29 Mar 2024 09:41:51 +0000 Subject: [PATCH 018/132] Version packages --- .changeset/strong-needles-pump.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/strong-needles-pump.md diff --git a/.changeset/strong-needles-pump.md b/.changeset/strong-needles-pump.md deleted file mode 100644 index 0af62160..00000000 --- a/.changeset/strong-needles-pump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-dogecoin': patch ---- - -update dogecoin mocks to not use network From 742361aaaa65ce5d5320ecdc87d46f9c08d6588a Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Wed, 3 Apr 2024 12:25:47 +0300 Subject: [PATCH 019/132] fix: add deps for thor chain --- .changeset/weak-weeks-whisper.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/weak-weeks-whisper.md diff --git a/.changeset/weak-weeks-whisper.md b/.changeset/weak-weeks-whisper.md new file mode 100644 index 00000000..4d379719 --- /dev/null +++ b/.changeset/weak-weeks-whisper.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-thor': patch +--- + +fix: add cosmjs dependency From f2fe8246b537d4d9f6c9ae012160d2318d96cb42 Mon Sep 17 00:00:00 2001 From: cicd Date: Wed, 3 Apr 2024 09:37:49 +0000 Subject: [PATCH 020/132] Version packages --- .changeset/weak-weeks-whisper.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/weak-weeks-whisper.md diff --git a/.changeset/weak-weeks-whisper.md b/.changeset/weak-weeks-whisper.md deleted file mode 100644 index 4d379719..00000000 --- a/.changeset/weak-weeks-whisper.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-thor': patch ---- - -fix: add cosmjs dependency From 80a0bbd0e4c98f26756c8fd6df88f3f019370faa Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Wed, 3 Apr 2024 15:27:31 +0300 Subject: [PATCH 021/132] fix: seed phrase signer and manifest for mayachain --- .changeset/thirty-seas-listen.md | 5 +++++ utility-packages/graphql/src/gql/gql.ts | 22 +++++++++++----------- 2 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 .changeset/thirty-seas-listen.md diff --git a/.changeset/thirty-seas-listen.md b/.changeset/thirty-seas-listen.md new file mode 100644 index 00000000..1820e7f4 --- /dev/null +++ b/.changeset/thirty-seas-listen.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-thor': patch +--- + +fix: seed-phrase signer and manifest for mayachain diff --git a/utility-packages/graphql/src/gql/gql.ts b/utility-packages/graphql/src/gql/gql.ts index de54988d..281fec4f 100644 --- a/utility-packages/graphql/src/gql/gql.ts +++ b/utility-packages/graphql/src/gql/gql.ts @@ -56,67 +56,67 @@ export function gql(source: string): unknown; */ export function gql( source: 'query GetBinanceBalances($address: String!) {\n binance {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}\n\nquery GetBinanceTransactions($address: String!, $first: Int, $after: String, $blockRange: OptBlockSelector) {\n binance {\n transactions(\n address: $address\n first: $first\n after: $after\n blockRange: $blockRange\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n type\n }\n blockHeight\n data\n fee {\n value\n }\n fromAddress\n hash\n status\n time\n toAddress\n type\n }\n }\n }\n }\n}\n\nquery GetBinanceFee {\n binance {\n fee\n }\n}\n\nquery GetBinanceStatus {\n binance {\n status {\n lastBlock {\n hash\n height\n time\n txCount\n }\n }\n }\n}' -): typeof documents['query GetBinanceBalances($address: String!) {\n binance {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}\n\nquery GetBinanceTransactions($address: String!, $first: Int, $after: String, $blockRange: OptBlockSelector) {\n binance {\n transactions(\n address: $address\n first: $first\n after: $after\n blockRange: $blockRange\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n type\n }\n blockHeight\n data\n fee {\n value\n }\n fromAddress\n hash\n status\n time\n toAddress\n type\n }\n }\n }\n }\n}\n\nquery GetBinanceFee {\n binance {\n fee\n }\n}\n\nquery GetBinanceStatus {\n binance {\n status {\n lastBlock {\n hash\n height\n time\n txCount\n }\n }\n }\n}']; +): (typeof documents)['query GetBinanceBalances($address: String!) {\n binance {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}\n\nquery GetBinanceTransactions($address: String!, $first: Int, $after: String, $blockRange: OptBlockSelector) {\n binance {\n transactions(\n address: $address\n first: $first\n after: $after\n blockRange: $blockRange\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n type\n }\n blockHeight\n data\n fee {\n value\n }\n fromAddress\n hash\n status\n time\n toAddress\n type\n }\n }\n }\n }\n}\n\nquery GetBinanceFee {\n binance {\n fee\n }\n}\n\nquery GetBinanceStatus {\n binance {\n status {\n lastBlock {\n hash\n height\n time\n txCount\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): typeof documents['query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; +): (typeof documents)['query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): typeof documents['query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; +): (typeof documents)['query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query GetAssetsWithFilter($page: ConnectionArgs!, $filter: TokenFilter) {\n assets {\n tokens(page: $page, filter: $filter) {\n page {\n edges {\n node {\n contracts {\n address\n symbol\n chain\n scalingFactor\n }\n id\n price {\n amount\n scalingFactor\n }\n symbol\n name\n icon\n }\n }\n }\n }\n }\n}' -): typeof documents['query GetAssetsWithFilter($page: ConnectionArgs!, $filter: TokenFilter) {\n assets {\n tokens(page: $page, filter: $filter) {\n page {\n edges {\n node {\n contracts {\n address\n symbol\n chain\n scalingFactor\n }\n id\n price {\n amount\n scalingFactor\n }\n symbol\n name\n icon\n }\n }\n }\n }\n }\n}']; +): (typeof documents)['query GetAssetsWithFilter($page: ConnectionArgs!, $filter: TokenFilter) {\n assets {\n tokens(page: $page, filter: $filter) {\n page {\n edges {\n node {\n contracts {\n address\n symbol\n chain\n scalingFactor\n }\n id\n price {\n amount\n scalingFactor\n }\n symbol\n name\n icon\n }\n }\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query CosmosBalance($address: String!) {\n cosmos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCosmosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cosmos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCosmosFees {\n cosmos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCosmosStatus {\n cosmos {\n status {\n lastBlock\n }\n }\n}\n\nquery OsmosisBalance($address: String!) {\n osmosis {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetOsmosisTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n osmosis {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetOsmosisFees {\n osmosis {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetOsmosisStatus {\n osmosis {\n status {\n lastBlock\n }\n }\n}\n\nquery AxelarBalance($address: String!) {\n axelar {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAxelarTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n axelar {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAxelarFees {\n axelar {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAxelarStatus {\n axelar {\n status {\n lastBlock\n }\n }\n}\n\nquery CrescentBalance($address: String!) {\n crescent {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCrescentTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n crescent {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCrescentFees {\n crescent {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCrescentStatus {\n crescent {\n status {\n lastBlock\n }\n }\n}\n\nquery KavaBalance($address: String!) {\n kava {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKavaTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kava {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKavaFees {\n kava {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKavaStatus {\n kava {\n status {\n lastBlock\n }\n }\n}\n\nquery AkashBalance($address: String!) {\n akash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAkashTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n akash {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAkashFees {\n akash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAkashStatus {\n akash {\n status {\n lastBlock\n }\n }\n}\n\nquery CronosBalance($address: String!) {\n cronos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCronosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cronos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCronosFees {\n cronos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCronosStatus {\n cronos {\n status {\n lastBlock\n }\n }\n}\n\nquery KujiraBalance($address: String!) {\n kujira {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKujiraTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kujira {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKujiraFees {\n kujira {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKujiraStatus {\n kujira {\n status {\n lastBlock\n }\n }\n}\n\nquery StrideBalance($address: String!) {\n stride {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStrideTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stride {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStrideFees {\n stride {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStrideStatus {\n stride {\n status {\n lastBlock\n }\n }\n}\n\nquery MarsBalance($address: String!) {\n mars {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetMarsTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n mars {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetMarsFees {\n mars {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetMarsStatus {\n mars {\n status {\n lastBlock\n }\n }\n}\n\nquery JunoBalance($address: String!) {\n juno {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetJunoTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n juno {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetJunoFees {\n juno {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetJunoStatus {\n juno {\n status {\n lastBlock\n }\n }\n}\n\nquery StargazeBalance($address: String!) {\n stargaze {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStargazeTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stargaze {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStargazeFees {\n stargaze {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStargazeStatus {\n stargaze {\n status {\n lastBlock\n }\n }\n}' -): typeof documents['query CosmosBalance($address: String!) {\n cosmos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCosmosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cosmos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCosmosFees {\n cosmos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCosmosStatus {\n cosmos {\n status {\n lastBlock\n }\n }\n}\n\nquery OsmosisBalance($address: String!) {\n osmosis {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetOsmosisTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n osmosis {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetOsmosisFees {\n osmosis {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetOsmosisStatus {\n osmosis {\n status {\n lastBlock\n }\n }\n}\n\nquery AxelarBalance($address: String!) {\n axelar {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAxelarTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n axelar {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAxelarFees {\n axelar {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAxelarStatus {\n axelar {\n status {\n lastBlock\n }\n }\n}\n\nquery CrescentBalance($address: String!) {\n crescent {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCrescentTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n crescent {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCrescentFees {\n crescent {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCrescentStatus {\n crescent {\n status {\n lastBlock\n }\n }\n}\n\nquery KavaBalance($address: String!) {\n kava {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKavaTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kava {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKavaFees {\n kava {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKavaStatus {\n kava {\n status {\n lastBlock\n }\n }\n}\n\nquery AkashBalance($address: String!) {\n akash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAkashTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n akash {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAkashFees {\n akash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAkashStatus {\n akash {\n status {\n lastBlock\n }\n }\n}\n\nquery CronosBalance($address: String!) {\n cronos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCronosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cronos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCronosFees {\n cronos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCronosStatus {\n cronos {\n status {\n lastBlock\n }\n }\n}\n\nquery KujiraBalance($address: String!) {\n kujira {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKujiraTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kujira {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKujiraFees {\n kujira {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKujiraStatus {\n kujira {\n status {\n lastBlock\n }\n }\n}\n\nquery StrideBalance($address: String!) {\n stride {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStrideTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stride {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStrideFees {\n stride {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStrideStatus {\n stride {\n status {\n lastBlock\n }\n }\n}\n\nquery MarsBalance($address: String!) {\n mars {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetMarsTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n mars {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetMarsFees {\n mars {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetMarsStatus {\n mars {\n status {\n lastBlock\n }\n }\n}\n\nquery JunoBalance($address: String!) {\n juno {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetJunoTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n juno {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetJunoFees {\n juno {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetJunoStatus {\n juno {\n status {\n lastBlock\n }\n }\n}\n\nquery StargazeBalance($address: String!) {\n stargaze {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStargazeTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stargaze {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStargazeFees {\n stargaze {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStargazeStatus {\n stargaze {\n status {\n lastBlock\n }\n }\n}']; +): (typeof documents)['query CosmosBalance($address: String!) {\n cosmos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCosmosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cosmos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCosmosFees {\n cosmos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCosmosStatus {\n cosmos {\n status {\n lastBlock\n }\n }\n}\n\nquery OsmosisBalance($address: String!) {\n osmosis {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetOsmosisTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n osmosis {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetOsmosisFees {\n osmosis {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetOsmosisStatus {\n osmosis {\n status {\n lastBlock\n }\n }\n}\n\nquery AxelarBalance($address: String!) {\n axelar {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAxelarTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n axelar {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAxelarFees {\n axelar {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAxelarStatus {\n axelar {\n status {\n lastBlock\n }\n }\n}\n\nquery CrescentBalance($address: String!) {\n crescent {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCrescentTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n crescent {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCrescentFees {\n crescent {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCrescentStatus {\n crescent {\n status {\n lastBlock\n }\n }\n}\n\nquery KavaBalance($address: String!) {\n kava {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKavaTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kava {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKavaFees {\n kava {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKavaStatus {\n kava {\n status {\n lastBlock\n }\n }\n}\n\nquery AkashBalance($address: String!) {\n akash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAkashTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n akash {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAkashFees {\n akash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAkashStatus {\n akash {\n status {\n lastBlock\n }\n }\n}\n\nquery CronosBalance($address: String!) {\n cronos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCronosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cronos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCronosFees {\n cronos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCronosStatus {\n cronos {\n status {\n lastBlock\n }\n }\n}\n\nquery KujiraBalance($address: String!) {\n kujira {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKujiraTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kujira {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKujiraFees {\n kujira {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKujiraStatus {\n kujira {\n status {\n lastBlock\n }\n }\n}\n\nquery StrideBalance($address: String!) {\n stride {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStrideTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stride {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStrideFees {\n stride {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStrideStatus {\n stride {\n status {\n lastBlock\n }\n }\n}\n\nquery MarsBalance($address: String!) {\n mars {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetMarsTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n mars {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetMarsFees {\n mars {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetMarsStatus {\n mars {\n status {\n lastBlock\n }\n }\n}\n\nquery JunoBalance($address: String!) {\n juno {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetJunoTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n juno {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetJunoFees {\n juno {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetJunoStatus {\n juno {\n status {\n lastBlock\n }\n }\n}\n\nquery StargazeBalance($address: String!) {\n stargaze {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStargazeTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stargaze {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStargazeFees {\n stargaze {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStargazeStatus {\n stargaze {\n status {\n lastBlock\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): typeof documents['query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; +): (typeof documents)['query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query EthereumBalance($address: String!) {\n ethereum {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}' -): typeof documents['query EthereumBalance($address: String!) {\n ethereum {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}']; +): (typeof documents)['query EthereumBalance($address: String!) {\n ethereum {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}' -): typeof documents['query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}']; +): (typeof documents)['query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): typeof documents['query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; +): (typeof documents)['query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query GetSolanaBalance($address: String!) {\n solana {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n name\n image\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetSolanaTransactions($address: String!, $first: Int!, $after: String) {\n solana {\n transactions(address: $address, first: $first, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n fee {\n amount {\n value\n }\n payer\n }\n hash\n slot\n status\n timestamp\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n fromAddress\n toAddress\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetSolanaStatus {\n solana {\n status {\n lastBlock\n }\n }\n}\n\nquery GetSolanaFee {\n solana {\n fee {\n high\n low\n medium\n }\n }\n}' -): typeof documents['query GetSolanaBalance($address: String!) {\n solana {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n name\n image\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetSolanaTransactions($address: String!, $first: Int!, $after: String) {\n solana {\n transactions(address: $address, first: $first, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n fee {\n amount {\n value\n }\n payer\n }\n hash\n slot\n status\n timestamp\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n fromAddress\n toAddress\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetSolanaStatus {\n solana {\n status {\n lastBlock\n }\n }\n}\n\nquery GetSolanaFee {\n solana {\n fee {\n high\n low\n medium\n }\n }\n}']; +): (typeof documents)['query GetSolanaBalance($address: String!) {\n solana {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n name\n image\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetSolanaTransactions($address: String!, $first: Int!, $after: String) {\n solana {\n transactions(address: $address, first: $first, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n fee {\n amount {\n value\n }\n payer\n }\n hash\n slot\n status\n timestamp\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n fromAddress\n toAddress\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetSolanaStatus {\n solana {\n status {\n lastBlock\n }\n }\n}\n\nquery GetSolanaFee {\n solana {\n fee {\n high\n low\n medium\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query GetTronBalance($address: String!) {\n tron {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n amount {\n value\n scalingFactor\n }\n }\n }\n}\n\nquery GetTronTransactions($address: String!, $first: Int) {\n tron {\n transactions(address: $address, first: $first) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n hash\n blockIndex\n blockNumber\n status\n value\n timestamp\n fromAddress\n toAddress\n transfers {\n amount {\n value\n }\n asset {\n ... on CryptoAsset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n fromAddress\n toAddress\n }\n }\n }\n }\n }\n}' -): typeof documents['query GetTronBalance($address: String!) {\n tron {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n amount {\n value\n scalingFactor\n }\n }\n }\n}\n\nquery GetTronTransactions($address: String!, $first: Int) {\n tron {\n transactions(address: $address, first: $first) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n hash\n blockIndex\n blockNumber\n status\n value\n timestamp\n fromAddress\n toAddress\n transfers {\n amount {\n value\n }\n asset {\n ... on CryptoAsset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n fromAddress\n toAddress\n }\n }\n }\n }\n }\n}']; +): (typeof documents)['query GetTronBalance($address: String!) {\n tron {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n amount {\n value\n scalingFactor\n }\n }\n }\n}\n\nquery GetTronTransactions($address: String!, $first: Int) {\n tron {\n transactions(address: $address, first: $first) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n hash\n blockIndex\n blockNumber\n status\n value\n timestamp\n fromAddress\n toAddress\n transfers {\n amount {\n value\n }\n asset {\n ... on CryptoAsset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n fromAddress\n toAddress\n }\n }\n }\n }\n }\n}']; export function gql(source: string) { return (documents as any)[source] ?? {}; From 7beb64ce2ca659e931cb1cb97f9dafdc5772c206 Mon Sep 17 00:00:00 2001 From: cicd Date: Wed, 3 Apr 2024 12:43:31 +0000 Subject: [PATCH 022/132] Version packages --- .changeset/thirty-seas-listen.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/thirty-seas-listen.md diff --git a/.changeset/thirty-seas-listen.md b/.changeset/thirty-seas-listen.md deleted file mode 100644 index 1820e7f4..00000000 --- a/.changeset/thirty-seas-listen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-thor': patch ---- - -fix: seed-phrase signer and manifest for mayachain From b1e846b17e785bad90dacbdaf585252026756866 Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Fri, 5 Apr 2024 10:46:53 +0600 Subject: [PATCH 023/132] feat: add klaytn and cronos chains to evm manifest --- packages/evm/src/manifests.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/packages/evm/src/manifests.ts b/packages/evm/src/manifests.ts index 4f557f2a..8af679ad 100644 --- a/packages/evm/src/manifests.ts +++ b/packages/evm/src/manifests.ts @@ -191,4 +191,34 @@ export const EVM_MANIFESTS: { [key in EVMChains]: Chain.Manifest } = { }, multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', }, + [EVMChains.klaytn]: { + name: 'Klaytn', + description: '', + rpcURL: 'https://rpc-proxy.xdefi.services/klaytn', + chainSymbol: 'KLAY', + blockExplorerURL: 'https://klaytnscope.com', + chainId: '8217', + chain: 'klaytn', + decimals: 18, + feeGasStep: { + high: 1.5, + medium: 1.25, + low: 1, + }, + }, + [EVMChains.cronos]: { + name: 'Cronos', + description: '', + rpcURL: 'https://cronoscan-rpc.xdefiservices.com', + chainSymbol: 'CRO', + blockExplorerURL: 'https://cronoscan.com/', + chainId: '25', + chain: 'cronos', + decimals: 18, + feeGasStep: { + high: 1.5, + medium: 1.25, + low: 1, + }, + }, }; From d2854cb33519075cf91c5c6818c4caf5f4d368f0 Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Fri, 5 Apr 2024 14:03:01 +0600 Subject: [PATCH 024/132] chore: bump version --- .changeset/popular-snakes-cry.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/popular-snakes-cry.md diff --git a/.changeset/popular-snakes-cry.md b/.changeset/popular-snakes-cry.md new file mode 100644 index 00000000..ca1b7e40 --- /dev/null +++ b/.changeset/popular-snakes-cry.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-evm': patch +--- + +add klaytn and cronos chains to manifest From 8cdf70a33b70d9b8251b386124cfdffca922fedc Mon Sep 17 00:00:00 2001 From: cicd Date: Fri, 5 Apr 2024 08:08:12 +0000 Subject: [PATCH 025/132] Version packages --- .changeset/popular-snakes-cry.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/popular-snakes-cry.md diff --git a/.changeset/popular-snakes-cry.md b/.changeset/popular-snakes-cry.md deleted file mode 100644 index ca1b7e40..00000000 --- a/.changeset/popular-snakes-cry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-evm': patch ---- - -add klaytn and cronos chains to manifest From a23f6f7ab68c92266bff705d15e35df9b40d2e90 Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Fri, 5 Apr 2024 15:59:05 +0600 Subject: [PATCH 026/132] chore: bump version --- .changeset/moody-dragons-notice.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/moody-dragons-notice.md diff --git a/.changeset/moody-dragons-notice.md b/.changeset/moody-dragons-notice.md new file mode 100644 index 00000000..ecd9bb92 --- /dev/null +++ b/.changeset/moody-dragons-notice.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-solana': patch +--- + +Add support for solana priority fees From 67cf9268da168ad9880071390de10bc3d095c110 Mon Sep 17 00:00:00 2001 From: cicd Date: Fri, 5 Apr 2024 10:11:58 +0000 Subject: [PATCH 027/132] Version packages --- .changeset/moody-dragons-notice.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/moody-dragons-notice.md diff --git a/.changeset/moody-dragons-notice.md b/.changeset/moody-dragons-notice.md deleted file mode 100644 index ecd9bb92..00000000 --- a/.changeset/moody-dragons-notice.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-solana': patch ---- - -Add support for solana priority fees From 63965f601875fd97af547e2a377378b9dfa88fab Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Fri, 5 Apr 2024 16:32:51 +0600 Subject: [PATCH 028/132] chore: bump version --- .changeset/mighty-maps-act.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/mighty-maps-act.md diff --git a/.changeset/mighty-maps-act.md b/.changeset/mighty-maps-act.md new file mode 100644 index 00000000..f427b06b --- /dev/null +++ b/.changeset/mighty-maps-act.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-cosmos': patch +--- + +dont cache balances when fetching From f98060d5245a9431caf74d2100e3844fb46a91a2 Mon Sep 17 00:00:00 2001 From: cicd Date: Fri, 5 Apr 2024 10:45:38 +0000 Subject: [PATCH 029/132] Version packages --- .changeset/mighty-maps-act.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/mighty-maps-act.md diff --git a/.changeset/mighty-maps-act.md b/.changeset/mighty-maps-act.md deleted file mode 100644 index f427b06b..00000000 --- a/.changeset/mighty-maps-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-cosmos': patch ---- - -dont cache balances when fetching From 6ed419fa94d3d42015ea99f4423e3f214fa06eaf Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Fri, 5 Apr 2024 19:45:43 +0300 Subject: [PATCH 030/132] feat: add ethers to export to evm chain --- .changeset/smart-berries-suffer.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/smart-berries-suffer.md diff --git a/.changeset/smart-berries-suffer.md b/.changeset/smart-berries-suffer.md new file mode 100644 index 00000000..ffaf6ebb --- /dev/null +++ b/.changeset/smart-berries-suffer.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-evm': patch +--- + +feat: add ethers to export From 5c369c84f3bd083868bed18ef03582dbd0c9cd30 Mon Sep 17 00:00:00 2001 From: cicd Date: Fri, 5 Apr 2024 16:54:53 +0000 Subject: [PATCH 031/132] Version packages --- .changeset/smart-berries-suffer.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/smart-berries-suffer.md diff --git a/.changeset/smart-berries-suffer.md b/.changeset/smart-berries-suffer.md deleted file mode 100644 index ffaf6ebb..00000000 --- a/.changeset/smart-berries-suffer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-evm': patch ---- - -feat: add ethers to export From 1cb580b3ae26867ff14ee65af5963cb8849dd81e Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Tue, 9 Apr 2024 13:14:06 +0700 Subject: [PATCH 032/132] feat: add support for tokens --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 8630a794..17eafd25 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11169,7 +11169,7 @@ form-data@^3.0.0, form-data@^3.0.1: blakejs "^1.1.0" bn.js "^4.11.8" buffer "^5.2.1" - crypto-js "^3.1.9-1" + crypto-js "4.2.0" elliptic "^6.4.1" hmac-drbg "^1.0.1" lodash "^4.17.21" From fef7c8ca8d50d445d4c1528aebf63c62886e5d1a Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Tue, 9 Apr 2024 14:34:39 +0700 Subject: [PATCH 033/132] chore: pin deps and changeset --- .changeset/rare-singers-sneeze.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/rare-singers-sneeze.md diff --git a/.changeset/rare-singers-sneeze.md b/.changeset/rare-singers-sneeze.md new file mode 100644 index 00000000..953646d6 --- /dev/null +++ b/.changeset/rare-singers-sneeze.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-solana': patch +--- + +add solana chain data set From 827f344efb718e64a2f5958f324f1a0a81e44e88 Mon Sep 17 00:00:00 2001 From: cicd Date: Tue, 9 Apr 2024 17:35:45 +0000 Subject: [PATCH 034/132] Version packages --- .changeset/rare-singers-sneeze.md | 5 ----- yarn.lock | 31 ++++++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 8 deletions(-) delete mode 100644 .changeset/rare-singers-sneeze.md diff --git a/.changeset/rare-singers-sneeze.md b/.changeset/rare-singers-sneeze.md deleted file mode 100644 index 953646d6..00000000 --- a/.changeset/rare-singers-sneeze.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-solana': patch ---- - -add solana chain data set diff --git a/yarn.lock b/yarn.lock index 17eafd25..fd31f47e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17111,7 +17111,7 @@ string-length@^5.0.1: char-regex "^2.0.0" strip-ansi "^7.0.1" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -17129,6 +17129,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -17199,7 +17208,7 @@ stringify-object@~0.1.7: resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-0.1.8.tgz#463348f38fdcd4fec1c011084c24a59ac653c1ee" integrity sha512-wud/ZQEJjTrbwG3x8aD4OnPoo1Tb/AYXazI4CMEerAjLhWCou3OYhyBzoqRXbDVGC6/XDuAZxIWjVOv7nzjq+g== -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -17220,6 +17229,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -18818,7 +18834,7 @@ wonka@^6.3.2: resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.4.tgz#76eb9316e3d67d7febf4945202b5bdb2db534594" integrity sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -18836,6 +18852,15 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From 7509a074f82803ce2519ef4248c1daf03fa96630 Mon Sep 17 00:00:00 2001 From: "tyler.nguyen4" Date: Wed, 10 Apr 2024 23:56:43 +0700 Subject: [PATCH 035/132] Feat(XDEFI-7194) config multicall3 contract address evm --- packages/evm/src/manifests.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/evm/src/manifests.ts b/packages/evm/src/manifests.ts index 8af679ad..6e0fdcd7 100644 --- a/packages/evm/src/manifests.ts +++ b/packages/evm/src/manifests.ts @@ -29,7 +29,6 @@ export const EVM_MANIFESTS: { [key in EVMChains]: Chain.Manifest } = { medium: 1.25, low: 1, }, - multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', }, [EVMChains.smartchain]: { name: 'BNB Smart Chain', From 301d2138405da286a1a5ac649ee523a171a662bb Mon Sep 17 00:00:00 2001 From: "tyler.nguyen4" Date: Thu, 11 Apr 2024 11:06:28 +0700 Subject: [PATCH 036/132] Feat(XDEFI-7194) update get token balance unit test --- packages/evm/src/datasource/indexer/indexer.data-source.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/evm/src/datasource/indexer/indexer.data-source.ts b/packages/evm/src/datasource/indexer/indexer.data-source.ts index 5917ed39..7f3f5d2e 100644 --- a/packages/evm/src/datasource/indexer/indexer.data-source.ts +++ b/packages/evm/src/datasource/indexer/indexer.data-source.ts @@ -86,7 +86,6 @@ export class IndexerDataSource extends DataSource { if (!balances) { return []; } - return balances.map((balance: any): Coin => { const { asset, amount } = balance; return new Coin( From 736ecdc10dddaff8d1c5bed40edef0ba96e033f7 Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Thu, 11 Apr 2024 13:24:25 +0300 Subject: [PATCH 037/132] feat: add changeset --- .changeset/few-poems-divide.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/few-poems-divide.md diff --git a/.changeset/few-poems-divide.md b/.changeset/few-poems-divide.md new file mode 100644 index 00000000..bd133761 --- /dev/null +++ b/.changeset/few-poems-divide.md @@ -0,0 +1,6 @@ +--- +'@xdefi-tech/chains-core': patch +'@xdefi-tech/chains-evm': patch +--- + +feat: add get custom tokents, multicall get balance From 3a089a78d354a87a5f0c8f36c94ffd9a48111bab Mon Sep 17 00:00:00 2001 From: cicd Date: Thu, 11 Apr 2024 10:39:38 +0000 Subject: [PATCH 038/132] Version packages --- .changeset/few-poems-divide.md | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .changeset/few-poems-divide.md diff --git a/.changeset/few-poems-divide.md b/.changeset/few-poems-divide.md deleted file mode 100644 index bd133761..00000000 --- a/.changeset/few-poems-divide.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@xdefi-tech/chains-core': patch -'@xdefi-tech/chains-evm': patch ---- - -feat: add get custom tokents, multicall get balance From 70c074db372a2b27403c45b07ac32677e73ecf3d Mon Sep 17 00:00:00 2001 From: "tyler.nguyen4" Date: Mon, 15 Apr 2024 14:31:49 +0700 Subject: [PATCH 039/132] feat(XDEFi-7194) rpc call --- packages/evm/src/manifests.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/evm/src/manifests.ts b/packages/evm/src/manifests.ts index 6e0fdcd7..7d74d16d 100644 --- a/packages/evm/src/manifests.ts +++ b/packages/evm/src/manifests.ts @@ -29,6 +29,7 @@ export const EVM_MANIFESTS: { [key in EVMChains]: Chain.Manifest } = { medium: 1.25, low: 1, }, + multicallContractAddress: "0xcA11bde05977b3631167028862bE2a173976CA11", }, [EVMChains.smartchain]: { name: 'BNB Smart Chain', @@ -204,6 +205,7 @@ export const EVM_MANIFESTS: { [key in EVMChains]: Chain.Manifest } = { medium: 1.25, low: 1, }, + multicallContractAddress: "0xcA11bde05977b3631167028862bE2a173976CA11", }, [EVMChains.cronos]: { name: 'Cronos', @@ -219,5 +221,6 @@ export const EVM_MANIFESTS: { [key in EVMChains]: Chain.Manifest } = { medium: 1.25, low: 1, }, + multicallContractAddress: "0xcA11bde05977b3631167028862bE2a173976CA11", }, }; From 455932c2be21678d9890b75661b0bb74e6ca89e9 Mon Sep 17 00:00:00 2001 From: "tyler.nguyen4" Date: Mon, 15 Apr 2024 15:13:28 +0700 Subject: [PATCH 040/132] feat(XDEFi-7194) rpc batch call --- packages/evm/src/manifests.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/evm/src/manifests.ts b/packages/evm/src/manifests.ts index 7d74d16d..1664f063 100644 --- a/packages/evm/src/manifests.ts +++ b/packages/evm/src/manifests.ts @@ -29,7 +29,7 @@ export const EVM_MANIFESTS: { [key in EVMChains]: Chain.Manifest } = { medium: 1.25, low: 1, }, - multicallContractAddress: "0xcA11bde05977b3631167028862bE2a173976CA11", + multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', }, [EVMChains.smartchain]: { name: 'BNB Smart Chain', @@ -205,7 +205,7 @@ export const EVM_MANIFESTS: { [key in EVMChains]: Chain.Manifest } = { medium: 1.25, low: 1, }, - multicallContractAddress: "0xcA11bde05977b3631167028862bE2a173976CA11", + multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', }, [EVMChains.cronos]: { name: 'Cronos', @@ -221,6 +221,6 @@ export const EVM_MANIFESTS: { [key in EVMChains]: Chain.Manifest } = { medium: 1.25, low: 1, }, - multicallContractAddress: "0xcA11bde05977b3631167028862bE2a173976CA11", + multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', }, }; From b7f06800b86722a331e844e295f78fbfc18fafda Mon Sep 17 00:00:00 2001 From: "tyler.nguyen4" Date: Mon, 15 Apr 2024 16:08:41 +0700 Subject: [PATCH 041/132] feat(XDEFi-7194) add changeset file --- .changeset/unlucky-dingos-know.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/unlucky-dingos-know.md diff --git a/.changeset/unlucky-dingos-know.md b/.changeset/unlucky-dingos-know.md new file mode 100644 index 00000000..1fb0d3e2 --- /dev/null +++ b/.changeset/unlucky-dingos-know.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-evm': patch +--- + +Feat: rpc batch call From 8d66b68abe883690e0f42c5622a83860a41aa111 Mon Sep 17 00:00:00 2001 From: cicd Date: Mon, 15 Apr 2024 09:46:56 +0000 Subject: [PATCH 042/132] Version packages --- .changeset/unlucky-dingos-know.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/unlucky-dingos-know.md diff --git a/.changeset/unlucky-dingos-know.md b/.changeset/unlucky-dingos-know.md deleted file mode 100644 index 1fb0d3e2..00000000 --- a/.changeset/unlucky-dingos-know.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-evm': patch ---- - -Feat: rpc batch call From 6f4c660e06d2ac2ea16576d9144072e50d58b200 Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Mon, 15 Apr 2024 13:37:57 +0300 Subject: [PATCH 043/132] fix: lint --- utility-packages/graphql/src/gql/gql.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/utility-packages/graphql/src/gql/gql.ts b/utility-packages/graphql/src/gql/gql.ts index 281fec4f..de54988d 100644 --- a/utility-packages/graphql/src/gql/gql.ts +++ b/utility-packages/graphql/src/gql/gql.ts @@ -56,67 +56,67 @@ export function gql(source: string): unknown; */ export function gql( source: 'query GetBinanceBalances($address: String!) {\n binance {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}\n\nquery GetBinanceTransactions($address: String!, $first: Int, $after: String, $blockRange: OptBlockSelector) {\n binance {\n transactions(\n address: $address\n first: $first\n after: $after\n blockRange: $blockRange\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n type\n }\n blockHeight\n data\n fee {\n value\n }\n fromAddress\n hash\n status\n time\n toAddress\n type\n }\n }\n }\n }\n}\n\nquery GetBinanceFee {\n binance {\n fee\n }\n}\n\nquery GetBinanceStatus {\n binance {\n status {\n lastBlock {\n hash\n height\n time\n txCount\n }\n }\n }\n}' -): (typeof documents)['query GetBinanceBalances($address: String!) {\n binance {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}\n\nquery GetBinanceTransactions($address: String!, $first: Int, $after: String, $blockRange: OptBlockSelector) {\n binance {\n transactions(\n address: $address\n first: $first\n after: $after\n blockRange: $blockRange\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n type\n }\n blockHeight\n data\n fee {\n value\n }\n fromAddress\n hash\n status\n time\n toAddress\n type\n }\n }\n }\n }\n}\n\nquery GetBinanceFee {\n binance {\n fee\n }\n}\n\nquery GetBinanceStatus {\n binance {\n status {\n lastBlock {\n hash\n height\n time\n txCount\n }\n }\n }\n}']; +): typeof documents['query GetBinanceBalances($address: String!) {\n binance {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}\n\nquery GetBinanceTransactions($address: String!, $first: Int, $after: String, $blockRange: OptBlockSelector) {\n binance {\n transactions(\n address: $address\n first: $first\n after: $after\n blockRange: $blockRange\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n type\n }\n blockHeight\n data\n fee {\n value\n }\n fromAddress\n hash\n status\n time\n toAddress\n type\n }\n }\n }\n }\n}\n\nquery GetBinanceFee {\n binance {\n fee\n }\n}\n\nquery GetBinanceStatus {\n binance {\n status {\n lastBlock {\n hash\n height\n time\n txCount\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): (typeof documents)['query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; +): typeof documents['query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): (typeof documents)['query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; +): typeof documents['query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query GetAssetsWithFilter($page: ConnectionArgs!, $filter: TokenFilter) {\n assets {\n tokens(page: $page, filter: $filter) {\n page {\n edges {\n node {\n contracts {\n address\n symbol\n chain\n scalingFactor\n }\n id\n price {\n amount\n scalingFactor\n }\n symbol\n name\n icon\n }\n }\n }\n }\n }\n}' -): (typeof documents)['query GetAssetsWithFilter($page: ConnectionArgs!, $filter: TokenFilter) {\n assets {\n tokens(page: $page, filter: $filter) {\n page {\n edges {\n node {\n contracts {\n address\n symbol\n chain\n scalingFactor\n }\n id\n price {\n amount\n scalingFactor\n }\n symbol\n name\n icon\n }\n }\n }\n }\n }\n}']; +): typeof documents['query GetAssetsWithFilter($page: ConnectionArgs!, $filter: TokenFilter) {\n assets {\n tokens(page: $page, filter: $filter) {\n page {\n edges {\n node {\n contracts {\n address\n symbol\n chain\n scalingFactor\n }\n id\n price {\n amount\n scalingFactor\n }\n symbol\n name\n icon\n }\n }\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query CosmosBalance($address: String!) {\n cosmos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCosmosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cosmos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCosmosFees {\n cosmos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCosmosStatus {\n cosmos {\n status {\n lastBlock\n }\n }\n}\n\nquery OsmosisBalance($address: String!) {\n osmosis {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetOsmosisTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n osmosis {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetOsmosisFees {\n osmosis {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetOsmosisStatus {\n osmosis {\n status {\n lastBlock\n }\n }\n}\n\nquery AxelarBalance($address: String!) {\n axelar {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAxelarTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n axelar {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAxelarFees {\n axelar {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAxelarStatus {\n axelar {\n status {\n lastBlock\n }\n }\n}\n\nquery CrescentBalance($address: String!) {\n crescent {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCrescentTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n crescent {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCrescentFees {\n crescent {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCrescentStatus {\n crescent {\n status {\n lastBlock\n }\n }\n}\n\nquery KavaBalance($address: String!) {\n kava {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKavaTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kava {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKavaFees {\n kava {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKavaStatus {\n kava {\n status {\n lastBlock\n }\n }\n}\n\nquery AkashBalance($address: String!) {\n akash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAkashTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n akash {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAkashFees {\n akash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAkashStatus {\n akash {\n status {\n lastBlock\n }\n }\n}\n\nquery CronosBalance($address: String!) {\n cronos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCronosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cronos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCronosFees {\n cronos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCronosStatus {\n cronos {\n status {\n lastBlock\n }\n }\n}\n\nquery KujiraBalance($address: String!) {\n kujira {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKujiraTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kujira {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKujiraFees {\n kujira {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKujiraStatus {\n kujira {\n status {\n lastBlock\n }\n }\n}\n\nquery StrideBalance($address: String!) {\n stride {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStrideTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stride {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStrideFees {\n stride {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStrideStatus {\n stride {\n status {\n lastBlock\n }\n }\n}\n\nquery MarsBalance($address: String!) {\n mars {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetMarsTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n mars {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetMarsFees {\n mars {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetMarsStatus {\n mars {\n status {\n lastBlock\n }\n }\n}\n\nquery JunoBalance($address: String!) {\n juno {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetJunoTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n juno {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetJunoFees {\n juno {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetJunoStatus {\n juno {\n status {\n lastBlock\n }\n }\n}\n\nquery StargazeBalance($address: String!) {\n stargaze {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStargazeTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stargaze {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStargazeFees {\n stargaze {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStargazeStatus {\n stargaze {\n status {\n lastBlock\n }\n }\n}' -): (typeof documents)['query CosmosBalance($address: String!) {\n cosmos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCosmosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cosmos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCosmosFees {\n cosmos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCosmosStatus {\n cosmos {\n status {\n lastBlock\n }\n }\n}\n\nquery OsmosisBalance($address: String!) {\n osmosis {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetOsmosisTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n osmosis {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetOsmosisFees {\n osmosis {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetOsmosisStatus {\n osmosis {\n status {\n lastBlock\n }\n }\n}\n\nquery AxelarBalance($address: String!) {\n axelar {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAxelarTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n axelar {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAxelarFees {\n axelar {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAxelarStatus {\n axelar {\n status {\n lastBlock\n }\n }\n}\n\nquery CrescentBalance($address: String!) {\n crescent {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCrescentTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n crescent {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCrescentFees {\n crescent {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCrescentStatus {\n crescent {\n status {\n lastBlock\n }\n }\n}\n\nquery KavaBalance($address: String!) {\n kava {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKavaTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kava {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKavaFees {\n kava {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKavaStatus {\n kava {\n status {\n lastBlock\n }\n }\n}\n\nquery AkashBalance($address: String!) {\n akash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAkashTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n akash {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAkashFees {\n akash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAkashStatus {\n akash {\n status {\n lastBlock\n }\n }\n}\n\nquery CronosBalance($address: String!) {\n cronos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCronosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cronos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCronosFees {\n cronos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCronosStatus {\n cronos {\n status {\n lastBlock\n }\n }\n}\n\nquery KujiraBalance($address: String!) {\n kujira {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKujiraTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kujira {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKujiraFees {\n kujira {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKujiraStatus {\n kujira {\n status {\n lastBlock\n }\n }\n}\n\nquery StrideBalance($address: String!) {\n stride {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStrideTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stride {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStrideFees {\n stride {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStrideStatus {\n stride {\n status {\n lastBlock\n }\n }\n}\n\nquery MarsBalance($address: String!) {\n mars {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetMarsTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n mars {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetMarsFees {\n mars {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetMarsStatus {\n mars {\n status {\n lastBlock\n }\n }\n}\n\nquery JunoBalance($address: String!) {\n juno {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetJunoTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n juno {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetJunoFees {\n juno {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetJunoStatus {\n juno {\n status {\n lastBlock\n }\n }\n}\n\nquery StargazeBalance($address: String!) {\n stargaze {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStargazeTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stargaze {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStargazeFees {\n stargaze {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStargazeStatus {\n stargaze {\n status {\n lastBlock\n }\n }\n}']; +): typeof documents['query CosmosBalance($address: String!) {\n cosmos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCosmosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cosmos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCosmosFees {\n cosmos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCosmosStatus {\n cosmos {\n status {\n lastBlock\n }\n }\n}\n\nquery OsmosisBalance($address: String!) {\n osmosis {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetOsmosisTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n osmosis {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetOsmosisFees {\n osmosis {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetOsmosisStatus {\n osmosis {\n status {\n lastBlock\n }\n }\n}\n\nquery AxelarBalance($address: String!) {\n axelar {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAxelarTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n axelar {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAxelarFees {\n axelar {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAxelarStatus {\n axelar {\n status {\n lastBlock\n }\n }\n}\n\nquery CrescentBalance($address: String!) {\n crescent {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCrescentTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n crescent {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCrescentFees {\n crescent {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCrescentStatus {\n crescent {\n status {\n lastBlock\n }\n }\n}\n\nquery KavaBalance($address: String!) {\n kava {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKavaTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kava {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKavaFees {\n kava {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKavaStatus {\n kava {\n status {\n lastBlock\n }\n }\n}\n\nquery AkashBalance($address: String!) {\n akash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAkashTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n akash {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAkashFees {\n akash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAkashStatus {\n akash {\n status {\n lastBlock\n }\n }\n}\n\nquery CronosBalance($address: String!) {\n cronos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCronosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cronos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCronosFees {\n cronos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCronosStatus {\n cronos {\n status {\n lastBlock\n }\n }\n}\n\nquery KujiraBalance($address: String!) {\n kujira {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKujiraTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kujira {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKujiraFees {\n kujira {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKujiraStatus {\n kujira {\n status {\n lastBlock\n }\n }\n}\n\nquery StrideBalance($address: String!) {\n stride {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStrideTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stride {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStrideFees {\n stride {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStrideStatus {\n stride {\n status {\n lastBlock\n }\n }\n}\n\nquery MarsBalance($address: String!) {\n mars {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetMarsTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n mars {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetMarsFees {\n mars {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetMarsStatus {\n mars {\n status {\n lastBlock\n }\n }\n}\n\nquery JunoBalance($address: String!) {\n juno {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetJunoTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n juno {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetJunoFees {\n juno {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetJunoStatus {\n juno {\n status {\n lastBlock\n }\n }\n}\n\nquery StargazeBalance($address: String!) {\n stargaze {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStargazeTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stargaze {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStargazeFees {\n stargaze {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStargazeStatus {\n stargaze {\n status {\n lastBlock\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): (typeof documents)['query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; +): typeof documents['query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query EthereumBalance($address: String!) {\n ethereum {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}' -): (typeof documents)['query EthereumBalance($address: String!) {\n ethereum {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}']; +): typeof documents['query EthereumBalance($address: String!) {\n ethereum {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}' -): (typeof documents)['query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}']; +): typeof documents['query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): (typeof documents)['query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; +): typeof documents['query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query GetSolanaBalance($address: String!) {\n solana {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n name\n image\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetSolanaTransactions($address: String!, $first: Int!, $after: String) {\n solana {\n transactions(address: $address, first: $first, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n fee {\n amount {\n value\n }\n payer\n }\n hash\n slot\n status\n timestamp\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n fromAddress\n toAddress\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetSolanaStatus {\n solana {\n status {\n lastBlock\n }\n }\n}\n\nquery GetSolanaFee {\n solana {\n fee {\n high\n low\n medium\n }\n }\n}' -): (typeof documents)['query GetSolanaBalance($address: String!) {\n solana {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n name\n image\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetSolanaTransactions($address: String!, $first: Int!, $after: String) {\n solana {\n transactions(address: $address, first: $first, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n fee {\n amount {\n value\n }\n payer\n }\n hash\n slot\n status\n timestamp\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n fromAddress\n toAddress\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetSolanaStatus {\n solana {\n status {\n lastBlock\n }\n }\n}\n\nquery GetSolanaFee {\n solana {\n fee {\n high\n low\n medium\n }\n }\n}']; +): typeof documents['query GetSolanaBalance($address: String!) {\n solana {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n name\n image\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetSolanaTransactions($address: String!, $first: Int!, $after: String) {\n solana {\n transactions(address: $address, first: $first, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n fee {\n amount {\n value\n }\n payer\n }\n hash\n slot\n status\n timestamp\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n fromAddress\n toAddress\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetSolanaStatus {\n solana {\n status {\n lastBlock\n }\n }\n}\n\nquery GetSolanaFee {\n solana {\n fee {\n high\n low\n medium\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( source: 'query GetTronBalance($address: String!) {\n tron {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n amount {\n value\n scalingFactor\n }\n }\n }\n}\n\nquery GetTronTransactions($address: String!, $first: Int) {\n tron {\n transactions(address: $address, first: $first) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n hash\n blockIndex\n blockNumber\n status\n value\n timestamp\n fromAddress\n toAddress\n transfers {\n amount {\n value\n }\n asset {\n ... on CryptoAsset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n fromAddress\n toAddress\n }\n }\n }\n }\n }\n}' -): (typeof documents)['query GetTronBalance($address: String!) {\n tron {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n amount {\n value\n scalingFactor\n }\n }\n }\n}\n\nquery GetTronTransactions($address: String!, $first: Int) {\n tron {\n transactions(address: $address, first: $first) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n hash\n blockIndex\n blockNumber\n status\n value\n timestamp\n fromAddress\n toAddress\n transfers {\n amount {\n value\n }\n asset {\n ... on CryptoAsset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n fromAddress\n toAddress\n }\n }\n }\n }\n }\n}']; +): typeof documents['query GetTronBalance($address: String!) {\n tron {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n amount {\n value\n scalingFactor\n }\n }\n }\n}\n\nquery GetTronTransactions($address: String!, $first: Int) {\n tron {\n transactions(address: $address, first: $first) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n hash\n blockIndex\n blockNumber\n status\n value\n timestamp\n fromAddress\n toAddress\n transfers {\n amount {\n value\n }\n asset {\n ... on CryptoAsset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n fromAddress\n toAddress\n }\n }\n }\n }\n }\n}']; export function gql(source: string) { return (documents as any)[source] ?? {}; From b374fbd7d297aa92da19309c9b1a9d2f29da070a Mon Sep 17 00:00:00 2001 From: "tyler.nguyen4" Date: Mon, 15 Apr 2024 18:16:58 +0700 Subject: [PATCH 044/132] fix: syntax code --- .changeset/healthy-brooms-destroy.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/healthy-brooms-destroy.md diff --git a/.changeset/healthy-brooms-destroy.md b/.changeset/healthy-brooms-destroy.md new file mode 100644 index 00000000..6495dfec --- /dev/null +++ b/.changeset/healthy-brooms-destroy.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-evm': patch +--- + +Fix: Syntax From f8ab79a0a0e92769775360c2bd99339feee00e63 Mon Sep 17 00:00:00 2001 From: cicd Date: Mon, 15 Apr 2024 11:39:29 +0000 Subject: [PATCH 045/132] Version packages --- .changeset/healthy-brooms-destroy.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/healthy-brooms-destroy.md diff --git a/.changeset/healthy-brooms-destroy.md b/.changeset/healthy-brooms-destroy.md deleted file mode 100644 index 6495dfec..00000000 --- a/.changeset/healthy-brooms-destroy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-evm': patch ---- - -Fix: Syntax From 018f95a813f418f54d0e5ae5100aafce43f375d5 Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Mon, 15 Apr 2024 15:35:50 +0300 Subject: [PATCH 046/132] fix: getBalance arguments for EVM chains --- .changeset/hot-roses-run.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/hot-roses-run.md diff --git a/.changeset/hot-roses-run.md b/.changeset/hot-roses-run.md new file mode 100644 index 00000000..cc090c45 --- /dev/null +++ b/.changeset/hot-roses-run.md @@ -0,0 +1,6 @@ +--- +'@xdefi-tech/chains-core': patch +'@xdefi-tech/chains-evm': patch +--- + +Fix: getBalance method with empty tokenAddresses From a4dc2db30c9aa2714ba15dc3d8d04f3a27acea4d Mon Sep 17 00:00:00 2001 From: cicd Date: Mon, 15 Apr 2024 12:48:36 +0000 Subject: [PATCH 047/132] Version packages --- .changeset/hot-roses-run.md | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .changeset/hot-roses-run.md diff --git a/.changeset/hot-roses-run.md b/.changeset/hot-roses-run.md deleted file mode 100644 index cc090c45..00000000 --- a/.changeset/hot-roses-run.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@xdefi-tech/chains-core': patch -'@xdefi-tech/chains-evm': patch ---- - -Fix: getBalance method with empty tokenAddresses From c22b53f5919131779b311339876a0c214d400af0 Mon Sep 17 00:00:00 2001 From: sotatek-tyler-nguyen4 <166351995+sotatek-tyler-nguyen4@users.noreply.github.com> Date: Wed, 17 Apr 2024 17:09:17 +0700 Subject: [PATCH 048/132] feat(XDEFI-6917): add addresss generation tests (#175) * feat: add test generation test * feat: add test generation test * feat: add cosmos address generation uint test * feat: add cosmos address generation uint test * fix: litecoin derivation path --------- Co-authored-by: sotatek-tyler-nguyen4 --- .changeset/strong-scissors-sleep.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .changeset/strong-scissors-sleep.md diff --git a/.changeset/strong-scissors-sleep.md b/.changeset/strong-scissors-sleep.md new file mode 100644 index 00000000..3603d65e --- /dev/null +++ b/.changeset/strong-scissors-sleep.md @@ -0,0 +1,14 @@ +--- +'@xdefi-tech/chains-bitcoincash': patch +'@xdefi-tech/chains-dogecoin': patch +'@xdefi-tech/chains-litecoin': patch +'@xdefi-tech/chains-binance': patch +'@xdefi-tech/chains-bitcoin': patch +'@xdefi-tech/chains-cosmos': patch +'@xdefi-tech/chains-solana': patch +'@xdefi-tech/chains-thor': patch +'@xdefi-tech/chains-tron': patch +'@xdefi-tech/chains-evm': patch +--- + +Feat: Add address generation unit test From c922a941b21020d493440a322d1e010b21dfa8b8 Mon Sep 17 00:00:00 2001 From: cicd Date: Wed, 17 Apr 2024 10:12:03 +0000 Subject: [PATCH 049/132] Version packages --- .changeset/strong-scissors-sleep.md | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 .changeset/strong-scissors-sleep.md diff --git a/.changeset/strong-scissors-sleep.md b/.changeset/strong-scissors-sleep.md deleted file mode 100644 index 3603d65e..00000000 --- a/.changeset/strong-scissors-sleep.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@xdefi-tech/chains-bitcoincash': patch -'@xdefi-tech/chains-dogecoin': patch -'@xdefi-tech/chains-litecoin': patch -'@xdefi-tech/chains-binance': patch -'@xdefi-tech/chains-bitcoin': patch -'@xdefi-tech/chains-cosmos': patch -'@xdefi-tech/chains-solana': patch -'@xdefi-tech/chains-thor': patch -'@xdefi-tech/chains-tron': patch -'@xdefi-tech/chains-evm': patch ---- - -Feat: Add address generation unit test From 4b777a03cb4ec8a0d7ac73f9006414e268d17ec8 Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Tue, 16 Apr 2024 00:42:37 +0300 Subject: [PATCH 050/132] feat: XDEFI-7290 use @psf/bitcoincashjs-lib instead of @scure/btc-signer for bitcoin cash --- .changeset/fast-insects-shave.md | 5 +++ .../src/signers/private-key.signer.ts | 1 - yarn.lock | 33 +++---------------- 3 files changed, 9 insertions(+), 30 deletions(-) create mode 100644 .changeset/fast-insects-shave.md diff --git a/.changeset/fast-insects-shave.md b/.changeset/fast-insects-shave.md new file mode 100644 index 00000000..09281f51 --- /dev/null +++ b/.changeset/fast-insects-shave.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-bitcoincash': patch +--- + +feat: use @psf/bitcoincashjs-lib instead of @scure/btc-signer diff --git a/packages/bitcoincash/src/signers/private-key.signer.ts b/packages/bitcoincash/src/signers/private-key.signer.ts index 863175b7..01f3cd62 100644 --- a/packages/bitcoincash/src/signers/private-key.signer.ts +++ b/packages/bitcoincash/src/signers/private-key.signer.ts @@ -72,7 +72,6 @@ export class PrivateKeySigner extends Signer.Provider { utxo.witnessUtxo.value ); }); - message.sign(builder.build().toHex()); } diff --git a/yarn.lock b/yarn.lock index fd31f47e..8630a794 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11169,7 +11169,7 @@ form-data@^3.0.0, form-data@^3.0.1: blakejs "^1.1.0" bn.js "^4.11.8" buffer "^5.2.1" - crypto-js "4.2.0" + crypto-js "^3.1.9-1" elliptic "^6.4.1" hmac-drbg "^1.0.1" lodash "^4.17.21" @@ -17111,7 +17111,7 @@ string-length@^5.0.1: char-regex "^2.0.0" strip-ansi "^7.0.1" -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -17129,15 +17129,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -17208,7 +17199,7 @@ stringify-object@~0.1.7: resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-0.1.8.tgz#463348f38fdcd4fec1c011084c24a59ac653c1ee" integrity sha512-wud/ZQEJjTrbwG3x8aD4OnPoo1Tb/AYXazI4CMEerAjLhWCou3OYhyBzoqRXbDVGC6/XDuAZxIWjVOv7nzjq+g== -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -17229,13 +17220,6 @@ strip-ansi@^5.0.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -18834,7 +18818,7 @@ wonka@^6.3.2: resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.4.tgz#76eb9316e3d67d7febf4945202b5bdb2db534594" integrity sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -18852,15 +18836,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From 632c09fee38686efca3a492f48dc3a145f14a361 Mon Sep 17 00:00:00 2001 From: Sam Sheffres Date: Thu, 21 Mar 2024 16:10:35 +0700 Subject: [PATCH 051/132] feat: utxo chains raw tx signers --- packages/bitcoincash/src/signers/private-key.signer.ts | 1 + packages/bitcoincash/src/signers/seed-phrase.signer.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/bitcoincash/src/signers/private-key.signer.ts b/packages/bitcoincash/src/signers/private-key.signer.ts index 01f3cd62..863175b7 100644 --- a/packages/bitcoincash/src/signers/private-key.signer.ts +++ b/packages/bitcoincash/src/signers/private-key.signer.ts @@ -72,6 +72,7 @@ export class PrivateKeySigner extends Signer.Provider { utxo.witnessUtxo.value ); }); + message.sign(builder.build().toHex()); } diff --git a/packages/bitcoincash/src/signers/seed-phrase.signer.ts b/packages/bitcoincash/src/signers/seed-phrase.signer.ts index 1631b505..4b5dd565 100644 --- a/packages/bitcoincash/src/signers/seed-phrase.signer.ts +++ b/packages/bitcoincash/src/signers/seed-phrase.signer.ts @@ -5,6 +5,7 @@ import * as bip32 from 'bip32'; import * as bip39 from 'bip39'; /*eslint import/namespace: [2, { allowComputed: true }]*/ import * as BitcoinCash from '@psf/bitcoincashjs-lib'; +import * as Bitcoin from 'bitcoinjs-lib'; import coininfo from 'coininfo'; import * as bchaddr from 'bchaddrjs'; From 4a9379f4ac1c18907b342cb42b0d480a036de543 Mon Sep 17 00:00:00 2001 From: sotatek-tyler-nguyen4 Date: Fri, 19 Apr 2024 15:34:15 +0700 Subject: [PATCH 052/132] fix: import lib & fix call function --- packages/bitcoin/src/signers/private-key.signer.ts | 1 + packages/bitcoin/src/signers/seed-phrase.signer.ts | 1 + packages/bitcoincash/src/signers/private-key.signer.ts | 5 +++-- packages/bitcoincash/src/signers/seed-phrase.signer.ts | 5 +++-- packages/dogecoin/src/signers/private-key.signer.ts | 4 ++-- packages/dogecoin/src/signers/seed-phrase.signer.ts | 10 +++++++++- packages/litecoin/src/signers/private-key.signer.ts | 3 ++- packages/litecoin/src/signers/seed-phrase.signer.ts | 3 ++- 8 files changed, 23 insertions(+), 9 deletions(-) diff --git a/packages/bitcoin/src/signers/private-key.signer.ts b/packages/bitcoin/src/signers/private-key.signer.ts index 2cf48acb..f89b1182 100644 --- a/packages/bitcoin/src/signers/private-key.signer.ts +++ b/packages/bitcoin/src/signers/private-key.signer.ts @@ -2,6 +2,7 @@ import { Signer, SignerDecorator } from '@xdefi-tech/chains-core'; import { secp256k1 } from '@noble/curves/secp256k1'; import * as btc from '@scure/btc-signer'; +import * as Bitcoin from 'bitcoinjs-lib'; import { ChainMsg } from '../msg'; diff --git a/packages/bitcoin/src/signers/seed-phrase.signer.ts b/packages/bitcoin/src/signers/seed-phrase.signer.ts index 0b070eac..a0d91034 100644 --- a/packages/bitcoin/src/signers/seed-phrase.signer.ts +++ b/packages/bitcoin/src/signers/seed-phrase.signer.ts @@ -4,6 +4,7 @@ import * as bip39 from 'bip39'; import * as bip32 from 'bip32'; import { secp256k1 } from '@noble/curves/secp256k1'; import * as btc from '@scure/btc-signer'; +import * as Bitcoin from 'bitcoinjs-lib'; import { ChainMsg } from '../msg'; diff --git a/packages/bitcoincash/src/signers/private-key.signer.ts b/packages/bitcoincash/src/signers/private-key.signer.ts index 863175b7..12397af2 100644 --- a/packages/bitcoincash/src/signers/private-key.signer.ts +++ b/packages/bitcoincash/src/signers/private-key.signer.ts @@ -5,6 +5,7 @@ import * as BitcoinCash from '@psf/bitcoincashjs-lib'; import * as Bitcoin from 'bitcoinjs-lib'; import coininfo from 'coininfo'; import * as bchaddr from 'bchaddrjs'; +import * as BitcoinCashLib from 'bitcoinjs-lib'; import { ChainMsg } from '../msg'; @@ -81,11 +82,11 @@ export class PrivateKeySigner extends Signer.Provider { derivation?: string ): Promise { const network = coininfo.bitcoincash.main.toBitcoinJS(); - const pk = Bitcoin.ECPair.fromWIF( + const pk = BitcoinCashLib.ECPair.fromWIF( await this.getPrivateKey(derivation ?? ''), network ); - const psbt = Bitcoin.Psbt.fromHex(txHex, network); + const psbt = BitcoinCashLib.Psbt.fromHex(txHex, { network }); psbt.signAllInputs(pk); psbt.finalizeAllInputs(); diff --git a/packages/bitcoincash/src/signers/seed-phrase.signer.ts b/packages/bitcoincash/src/signers/seed-phrase.signer.ts index 4b5dd565..60a505ba 100644 --- a/packages/bitcoincash/src/signers/seed-phrase.signer.ts +++ b/packages/bitcoincash/src/signers/seed-phrase.signer.ts @@ -8,6 +8,7 @@ import * as BitcoinCash from '@psf/bitcoincashjs-lib'; import * as Bitcoin from 'bitcoinjs-lib'; import coininfo from 'coininfo'; import * as bchaddr from 'bchaddrjs'; +import * as BitcoinCashLib from 'bitcoinjs-lib'; import { ChainMsg } from '../msg'; @@ -91,11 +92,11 @@ export class SeedPhraseSigner extends Signer.Provider { async signRawTransaction(txHex: string, derivation: string): Promise { const network = coininfo.bitcoincash.main.toBitcoinJS(); - const pk = BitcoinCash.ECPair.fromWIF( + const pk = BitcoinCashLib.ECPair.fromWIF( await this.getPrivateKey(derivation), network ); - const psbt = BitcoinCash.Psbt.fromHex(txHex, network); + const psbt = BitcoinCashLib.Psbt.fromHex(txHex, { network }); psbt.signAllInputs(pk); psbt.finalizeAllInputs(); diff --git a/packages/dogecoin/src/signers/private-key.signer.ts b/packages/dogecoin/src/signers/private-key.signer.ts index 3ea83c57..e2a265de 100644 --- a/packages/dogecoin/src/signers/private-key.signer.ts +++ b/packages/dogecoin/src/signers/private-key.signer.ts @@ -3,6 +3,7 @@ import { Signer, SignerDecorator } from '@xdefi-tech/chains-core'; import coininfo from 'coininfo'; import { secp256k1 } from '@noble/curves/secp256k1'; import * as btc from '@scure/btc-signer'; +import * as Dogecoin from 'bitcoinjs-lib'; import { ChainMsg } from '../msg'; @@ -73,8 +74,7 @@ export class PrivateKeySigner extends Signer.Provider { await this.getPrivateKey(derivation ?? ''), network ); - const psbt = Dogecoin.Psbt.fromHex(txHex, network); - + const psbt = Dogecoin.Psbt.fromHex(txHex, { network }); psbt.signAllInputs(pk); psbt.finalizeAllInputs(); return psbt.extractTransaction(true).toHex(); diff --git a/packages/dogecoin/src/signers/seed-phrase.signer.ts b/packages/dogecoin/src/signers/seed-phrase.signer.ts index 57315e91..a4991246 100644 --- a/packages/dogecoin/src/signers/seed-phrase.signer.ts +++ b/packages/dogecoin/src/signers/seed-phrase.signer.ts @@ -5,6 +5,7 @@ import { secp256k1 } from '@noble/curves/secp256k1'; import * as btc from '@scure/btc-signer'; import * as bip32 from 'bip32'; import * as bip39 from 'bip39'; +import * as Dogecoin from 'bitcoinjs-lib'; import { ChainMsg } from '../msg'; @@ -77,11 +78,18 @@ export class SeedPhraseSigner extends Signer.Provider { await this.getPrivateKey(derivation), network ); - const psbt = Dogecoin.Psbt.fromHex(txHex, network); + const psbt = Dogecoin.Psbt.fromHex(txHex, { network }); psbt.signAllInputs(pk); psbt.finalizeAllInputs(); return psbt.extractTransaction(true).toHex(); + // const tx = Dogecoin.Transaction.fromHex(txHex); + // const txb = Dogecoin.TransactionBuilder.fromTransaction(tx, network); + // for (let i = 0; i < tx.ins.length; i++) { + // txb.sign(i, pk); + // } + + // return txb.build().toHex(); } } diff --git a/packages/litecoin/src/signers/private-key.signer.ts b/packages/litecoin/src/signers/private-key.signer.ts index d7e95804..445f27ac 100644 --- a/packages/litecoin/src/signers/private-key.signer.ts +++ b/packages/litecoin/src/signers/private-key.signer.ts @@ -3,6 +3,7 @@ import { Signer, SignerDecorator } from '@xdefi-tech/chains-core'; import coininfo from 'coininfo'; import { secp256k1 } from '@noble/curves/secp256k1'; import * as btc from '@scure/btc-signer'; +import * as Litecoin from 'bitcoinjs-lib'; import { ChainMsg } from '../msg'; @@ -73,7 +74,7 @@ export class PrivateKeySigner extends Signer.Provider { await this.getPrivateKey(derivation ?? ''), network ); - const psbt = Litecoin.Psbt.fromHex(txHex, network); + const psbt = Litecoin.Psbt.fromHex(txHex, { network }); psbt.signAllInputs(pk); psbt.finalizeAllInputs(); diff --git a/packages/litecoin/src/signers/seed-phrase.signer.ts b/packages/litecoin/src/signers/seed-phrase.signer.ts index 09567c56..f8ff8a5e 100644 --- a/packages/litecoin/src/signers/seed-phrase.signer.ts +++ b/packages/litecoin/src/signers/seed-phrase.signer.ts @@ -5,6 +5,7 @@ import { secp256k1 } from '@noble/curves/secp256k1'; import * as btc from '@scure/btc-signer'; import * as bip32 from 'bip32'; import * as bip39 from 'bip39'; +import * as Litecoin from 'bitcoinjs-lib'; import { ChainMsg } from '../msg'; @@ -77,7 +78,7 @@ export class SeedPhraseSigner extends Signer.Provider { await this.getPrivateKey(derivation), network ); - const psbt = Litecoin.Psbt.fromHex(txHex, network); + const psbt = Litecoin.Psbt.fromHex(txHex, { network }); psbt.signAllInputs(pk); psbt.finalizeAllInputs(); From 30bd170916c9228dd1e02a5059e01aacd16f8c8d Mon Sep 17 00:00:00 2001 From: sotatek-tyler-nguyen4 Date: Fri, 19 Apr 2024 17:29:38 +0700 Subject: [PATCH 053/132] fix: bch build cicd --- packages/bitcoincash/src/signers/ledger.signer.ts | 4 ++-- packages/bitcoincash/src/signers/seed-phrase.signer.ts | 5 ++--- packages/bitcoincash/src/signers/trezor.signer.ts | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/bitcoincash/src/signers/ledger.signer.ts b/packages/bitcoincash/src/signers/ledger.signer.ts index ded92d68..ae9b4ea2 100644 --- a/packages/bitcoincash/src/signers/ledger.signer.ts +++ b/packages/bitcoincash/src/signers/ledger.signer.ts @@ -84,7 +84,7 @@ export class LedgerSigner extends Signer.Provider { hash: utxo.hash, index: utxo.index, witnessUtxo: utxo.witnessUtxo, - }); + } as any); }); outputs.forEach((output: any) => { @@ -105,7 +105,7 @@ export class LedgerSigner extends Signer.Provider { outputWriter.writeVarInt(psbt.txOutputs.length); - psbt.txOutputs.forEach((output) => { + psbt.txOutputs.forEach((output: any) => { outputWriter.writeUInt64(output.value); outputWriter.writeVarSlice(output.script); }); diff --git a/packages/bitcoincash/src/signers/seed-phrase.signer.ts b/packages/bitcoincash/src/signers/seed-phrase.signer.ts index 60a505ba..eac6ec81 100644 --- a/packages/bitcoincash/src/signers/seed-phrase.signer.ts +++ b/packages/bitcoincash/src/signers/seed-phrase.signer.ts @@ -8,7 +8,6 @@ import * as BitcoinCash from '@psf/bitcoincashjs-lib'; import * as Bitcoin from 'bitcoinjs-lib'; import coininfo from 'coininfo'; import * as bchaddr from 'bchaddrjs'; -import * as BitcoinCashLib from 'bitcoinjs-lib'; import { ChainMsg } from '../msg'; @@ -92,11 +91,11 @@ export class SeedPhraseSigner extends Signer.Provider { async signRawTransaction(txHex: string, derivation: string): Promise { const network = coininfo.bitcoincash.main.toBitcoinJS(); - const pk = BitcoinCashLib.ECPair.fromWIF( + const pk = Bitcoin.ECPair.fromWIF( await this.getPrivateKey(derivation), network ); - const psbt = BitcoinCashLib.Psbt.fromHex(txHex, { network }); + const psbt = Bitcoin.Psbt.fromHex(txHex, { network }); psbt.signAllInputs(pk); psbt.finalizeAllInputs(); diff --git a/packages/bitcoincash/src/signers/trezor.signer.ts b/packages/bitcoincash/src/signers/trezor.signer.ts index 143f917c..7658227d 100644 --- a/packages/bitcoincash/src/signers/trezor.signer.ts +++ b/packages/bitcoincash/src/signers/trezor.signer.ts @@ -85,7 +85,7 @@ export class TrezorSigner extends Signer.TrezorProvider { }; }); - const outputs = txData.outputs.map((output: BitcoinCash.PsbtTxOutput) => { + const outputs = txData.outputs.map((output: any) => { const to = output.address ? output.address : txData.from; return { address: to, From 5015217eb8b221a4eaa24d6b8d21b63dad1aee14 Mon Sep 17 00:00:00 2001 From: sotatek-tyler-nguyen4 Date: Fri, 19 Apr 2024 17:30:50 +0700 Subject: [PATCH 054/132] fix: bch build cicd --- packages/bitcoincash/src/signers/private-key.signer.ts | 5 ++--- packages/bitcoincash/src/signers/trezor.signer.ts | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/bitcoincash/src/signers/private-key.signer.ts b/packages/bitcoincash/src/signers/private-key.signer.ts index 12397af2..3fa455c1 100644 --- a/packages/bitcoincash/src/signers/private-key.signer.ts +++ b/packages/bitcoincash/src/signers/private-key.signer.ts @@ -5,7 +5,6 @@ import * as BitcoinCash from '@psf/bitcoincashjs-lib'; import * as Bitcoin from 'bitcoinjs-lib'; import coininfo from 'coininfo'; import * as bchaddr from 'bchaddrjs'; -import * as BitcoinCashLib from 'bitcoinjs-lib'; import { ChainMsg } from '../msg'; @@ -82,11 +81,11 @@ export class PrivateKeySigner extends Signer.Provider { derivation?: string ): Promise { const network = coininfo.bitcoincash.main.toBitcoinJS(); - const pk = BitcoinCashLib.ECPair.fromWIF( + const pk = Bitcoin.ECPair.fromWIF( await this.getPrivateKey(derivation ?? ''), network ); - const psbt = BitcoinCashLib.Psbt.fromHex(txHex, { network }); + const psbt = Bitcoin.Psbt.fromHex(txHex, { network }); psbt.signAllInputs(pk); psbt.finalizeAllInputs(); diff --git a/packages/bitcoincash/src/signers/trezor.signer.ts b/packages/bitcoincash/src/signers/trezor.signer.ts index 7658227d..4121ed85 100644 --- a/packages/bitcoincash/src/signers/trezor.signer.ts +++ b/packages/bitcoincash/src/signers/trezor.signer.ts @@ -1,4 +1,3 @@ -import * as BitcoinCash from 'bitcoinjs-lib'; import { isValidAddress } from 'bchaddrjs'; import { Signer, From 8ed8e6c6631ce839713925957f6409311fcbdcf9 Mon Sep 17 00:00:00 2001 From: sotatek-tyler-nguyen4 Date: Fri, 19 Apr 2024 17:35:57 +0700 Subject: [PATCH 055/132] fix: bch build cicd --- packages/evm/src/manifests.ts | 34 +--------------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/packages/evm/src/manifests.ts b/packages/evm/src/manifests.ts index 1664f063..43db934e 100644 --- a/packages/evm/src/manifests.ts +++ b/packages/evm/src/manifests.ts @@ -190,37 +190,5 @@ export const EVM_MANIFESTS: { [key in EVMChains]: Chain.Manifest } = { low: 1, }, multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', - }, - [EVMChains.klaytn]: { - name: 'Klaytn', - description: '', - rpcURL: 'https://rpc-proxy.xdefi.services/klaytn', - chainSymbol: 'KLAY', - blockExplorerURL: 'https://klaytnscope.com', - chainId: '8217', - chain: 'klaytn', - decimals: 18, - feeGasStep: { - high: 1.5, - medium: 1.25, - low: 1, - }, - multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', - }, - [EVMChains.cronos]: { - name: 'Cronos', - description: '', - rpcURL: 'https://cronoscan-rpc.xdefiservices.com', - chainSymbol: 'CRO', - blockExplorerURL: 'https://cronoscan.com/', - chainId: '25', - chain: 'cronos', - decimals: 18, - feeGasStep: { - high: 1.5, - medium: 1.25, - low: 1, - }, - multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', - }, + } }; From f68eab2f92ced549b62ca8b7618a2bd0a64c7236 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Fri, 19 Apr 2024 21:43:40 +0700 Subject: [PATCH 056/132] fix: verifyAddress with bech32 --- packages/thor/package.json | 2 +- packages/thor/src/signers/ledger.signer.ts | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/thor/package.json b/packages/thor/package.json index 104ee5dc..8607e0b9 100644 --- a/packages/thor/package.json +++ b/packages/thor/package.json @@ -29,7 +29,7 @@ "@xdefi-tech/chains-core": "*", "@xdefi-tech/chains-graphql": "*", "axios": "1.4.0", - "bech32": "2.0.0", + "bech32": "^2.0.0", "bech32-buffer": "0.2.1", "bignumber.js": "9.1.2", "bip32": "2.0.4", diff --git a/packages/thor/src/signers/ledger.signer.ts b/packages/thor/src/signers/ledger.signer.ts index b66702bf..5e7c7ec8 100644 --- a/packages/thor/src/signers/ledger.signer.ts +++ b/packages/thor/src/signers/ledger.signer.ts @@ -1,6 +1,7 @@ import THORChainApp from '@thorchain/ledger-thorchain'; import Transport from '@ledgerhq/hw-transport'; import { Signer, SignerDecorator } from '@xdefi-tech/chains-core'; +import { bech32 } from 'bech32'; import { ChainMsg } from '../msg'; @@ -14,8 +15,11 @@ export class LedgerSigner extends Signer.Provider { } verifyAddress(address: string): boolean { - const addressRegex = /^(thor|maya)1[a-z0-9]{26,38}$/i; - return addressRegex.test(address); + const prefix = bech32.decode(address).prefix; + if (prefix === 'thor' || prefix === 'maya') { + return true; + } + return false; } async getPrivateKey(_derivation: string) { From cd09bef2143e1494aa7fa8cc82429d95fa34e0f7 Mon Sep 17 00:00:00 2001 From: sotatek-tyler-nguyen4 Date: Mon, 22 Apr 2024 08:00:36 +0700 Subject: [PATCH 057/132] fix: bch & dogecoin unit test --- packages/bitcoincash/src/signers/private-key.signer.spec.ts | 4 ++-- packages/bitcoincash/src/signers/seed-phrase.signer.spec.ts | 4 ++-- packages/dogecoin/src/signers/private-key.signer.spec.ts | 4 ++-- packages/dogecoin/src/signers/seed-phrase.signer.spec.ts | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/bitcoincash/src/signers/private-key.signer.spec.ts b/packages/bitcoincash/src/signers/private-key.signer.spec.ts index f3c3fc52..92078ef4 100644 --- a/packages/bitcoincash/src/signers/private-key.signer.spec.ts +++ b/packages/bitcoincash/src/signers/private-key.signer.spec.ts @@ -51,11 +51,11 @@ describe('private-key.signer', () => { it('should sign a raw transaction using a private key', async () => { const txHex = - '020000000186339733afada6e9c280ed345dba8c67388066e3a0cd887edbc4c4eff3a436950000000000ffffffff0264000000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688acca250000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688ac00000000'; + '70736274ff01007e020000000286339733afada6e9c280ed345dba8c67388066e3a0cd887edbc4c4eff3a436950000000000ffffffff2edfa5e79ee84fb3ee8e4e3ecb6e0b48e1fcb2efbe4eb316b6df615a8ef4921f0000000000ffffffff0101000000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688ac00000000000100e20100000001a0f1ebe12602a226d5fd7407b5aceece2ad220c9121222cb0e800e97eec27c2a000000006b483045022100fb8e3eee81f80107de496f21635c35e86063947363f735ba30fc28b153f7629102204d899df15b0410c6dbab3149c58c7eceb7a1aec05a6e2b215ebf6a4697a9867541210340b6f9fa321f12bab6dcf264f44e2a644fd1d3cc7512a57ca3d2c99ee3bfa7d4ffffffff0210270000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688accc5d0100000000001976a914e26ef4edfcff06b0ad42ed42efa8af1ee5684b7b88ac00000000000100e20100000001c07daebf83cf9164494c63f26e399d25202c7f2407fd62a5050812feaf8ae461010000006b4830450221009d07e0e1b465d494d73e4deecda2fe3552d75bd28975f0f2c548c1d0e6616f0202205fd9afcb792a78470873fe224e642c86855a1e0d305590cdd5310fb8bd0e7cfb412103712c13f60c49c5211ebec518a17f4648112b4c0b2628a4fd787649002cdbe8b0000000000210270000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688acea910d00000000001976a914f2b1d800f92299c107a366ff4ac62eb70ea597e488ac000000000000'; const signedTx = await signer.signRawTransaction(txHex); expect(signedTx).toEqual( - '02000000000101a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5302483045022100883119b3ba1fccb4ca79d6df974018bba0c838ffc1fbb4abb959e8685a03931002204e40ee30fdb35513f194e55878b79eaa81fde381cc93a0c97f35788ac8f48857012103e389368c5d8bd73599616a574d9b74bf77cb5aee13692e5a3855a7fd2b945f9200000000' + '020000000286339733afada6e9c280ed345dba8c67388066e3a0cd887edbc4c4eff3a43695000000006b483045022100ba78402d80d3c5304ea933812e13b4ebf576032fc6bd6332d82a14020904708202203d6356a15222440b65390ec298a6b716188c33d2df23af89755ab652338b2f4901210398c7d1ac211564fa1243fa250debac08f822a0e98490ac365d528918b019da1bffffffff2edfa5e79ee84fb3ee8e4e3ecb6e0b48e1fcb2efbe4eb316b6df615a8ef4921f000000006b483045022100aa0aeb88fb072938e59855c247a9ec8a13fde940f767de605e26a5e3e508598302200730b3a722e448765f2a97da5e49772cd40d7cd1b39c511bf403c19b7e84413201210398c7d1ac211564fa1243fa250debac08f822a0e98490ac365d528918b019da1bffffffff0101000000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688ac00000000' ); }); diff --git a/packages/bitcoincash/src/signers/seed-phrase.signer.spec.ts b/packages/bitcoincash/src/signers/seed-phrase.signer.spec.ts index b478cfa4..b5ac9ce5 100644 --- a/packages/bitcoincash/src/signers/seed-phrase.signer.spec.ts +++ b/packages/bitcoincash/src/signers/seed-phrase.signer.spec.ts @@ -55,11 +55,11 @@ describe('seed-phrase.signer', () => { it('should sign a raw transaction using a seed phrase', async () => { const txHex = - '020000000186339733afada6e9c280ed345dba8c67388066e3a0cd887edbc4c4eff3a436950000000000ffffffff0264000000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688acca250000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688ac00000000'; + '70736274ff01007e020000000286339733afada6e9c280ed345dba8c67388066e3a0cd887edbc4c4eff3a436950000000000ffffffff2edfa5e79ee84fb3ee8e4e3ecb6e0b48e1fcb2efbe4eb316b6df615a8ef4921f0000000000ffffffff0101000000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688ac00000000000100e20100000001a0f1ebe12602a226d5fd7407b5aceece2ad220c9121222cb0e800e97eec27c2a000000006b483045022100fb8e3eee81f80107de496f21635c35e86063947363f735ba30fc28b153f7629102204d899df15b0410c6dbab3149c58c7eceb7a1aec05a6e2b215ebf6a4697a9867541210340b6f9fa321f12bab6dcf264f44e2a644fd1d3cc7512a57ca3d2c99ee3bfa7d4ffffffff0210270000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688accc5d0100000000001976a914e26ef4edfcff06b0ad42ed42efa8af1ee5684b7b88ac00000000000100e20100000001c07daebf83cf9164494c63f26e399d25202c7f2407fd62a5050812feaf8ae461010000006b4830450221009d07e0e1b465d494d73e4deecda2fe3552d75bd28975f0f2c548c1d0e6616f0202205fd9afcb792a78470873fe224e642c86855a1e0d305590cdd5310fb8bd0e7cfb412103712c13f60c49c5211ebec518a17f4648112b4c0b2628a4fd787649002cdbe8b0000000000210270000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688acea910d00000000001976a914f2b1d800f92299c107a366ff4ac62eb70ea597e488ac000000000000'; const signedTx = await signer.signRawTransaction(txHex, derivation); expect(signedTx).toEqual( - '02000000000101a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5302483045022100883119b3ba1fccb4ca79d6df974018bba0c838ffc1fbb4abb959e8685a03931002204e40ee30fdb35513f194e55878b79eaa81fde381cc93a0c97f35788ac8f48857012103e389368c5d8bd73599616a574d9b74bf77cb5aee13692e5a3855a7fd2b945f9200000000' + '020000000286339733afada6e9c280ed345dba8c67388066e3a0cd887edbc4c4eff3a43695000000006b483045022100ba78402d80d3c5304ea933812e13b4ebf576032fc6bd6332d82a14020904708202203d6356a15222440b65390ec298a6b716188c33d2df23af89755ab652338b2f4901210398c7d1ac211564fa1243fa250debac08f822a0e98490ac365d528918b019da1bffffffff2edfa5e79ee84fb3ee8e4e3ecb6e0b48e1fcb2efbe4eb316b6df615a8ef4921f000000006b483045022100aa0aeb88fb072938e59855c247a9ec8a13fde940f767de605e26a5e3e508598302200730b3a722e448765f2a97da5e49772cd40d7cd1b39c511bf403c19b7e84413201210398c7d1ac211564fa1243fa250debac08f822a0e98490ac365d528918b019da1bffffffff0101000000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688ac00000000' ); }); diff --git a/packages/dogecoin/src/signers/private-key.signer.spec.ts b/packages/dogecoin/src/signers/private-key.signer.spec.ts index eff35dfd..3e95fcf9 100644 --- a/packages/dogecoin/src/signers/private-key.signer.spec.ts +++ b/packages/dogecoin/src/signers/private-key.signer.spec.ts @@ -77,11 +77,11 @@ describe('private-key.signer', () => { it('should sign a raw transaction using a private key', async () => { const txHex = - '70736274ff0100800200000001a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000000100de01000000000101426c66ff1f3b908caa99e2added93d818408c6df40448262b3fdb3b1ea934a9c0100000000ffffffff0210270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a53017a1400000000001600148f8c74cae629eb02883b3d70ac030617fd2e1a6602473044022045b7469de22230b35493fab0f2c5ca4ae3ac84c9c14c9530ea40ada7fa9e1f9c02203efa57d574ffd1a816e58f69cd7b05e7ce42c66167378f0eaed90cee8552ebc20121025182c020a60cdf306deb7a9b3eb4ed26656864e7a3969b6e372323b29d0666a30000000001011f10270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000'; + '70736274ff0100550200000001ad2c88f940cd48f724d667e58323efd048bdea62e32f426cf04b8fdf870712160000000000ffffffff0101000000000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac00000000000100e2010000000102a95e8c5a5ebefa6431867f1e1691e5dd9cad10b2d1e8efce9b15c48c86f68d000000006b483045022100f21d3cac7d1332fdea2b33b8dd9859743b923dfa42431b49512d8dbb81acce5702204d2a009e45657147acf1b23204bc01a0d338e86c8cad458a394d933e2b3f24f20121031db6a1e76aad4f63aaea779d05a15a5619749a808c8d5b6856ae449b503e1d58ffffffff0280969800000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac700c4c05000000001976a91447542a50d8d84ed278690657e36bdda110f0181688ac000000000000'; const signedTx = await signer.signRawTransaction(txHex); expect(signedTx).toEqual( - '02000000000101a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5302483045022100883119b3ba1fccb4ca79d6df974018bba0c838ffc1fbb4abb959e8685a03931002204e40ee30fdb35513f194e55878b79eaa81fde381cc93a0c97f35788ac8f48857012103e389368c5d8bd73599616a574d9b74bf77cb5aee13692e5a3855a7fd2b945f9200000000' + '0200000001ad2c88f940cd48f724d667e58323efd048bdea62e32f426cf04b8fdf87071216000000006b483045022100e25a44edc01cc1b9b90ad1cb62553b4dd56f8e6e0d3eb227c21fdb7fa8d8e03402204c4e2c366831d8f7403822dbf6e69d8713671e456b4181afd427b68a8947eeaf0121037e6c9ff86d24858e73a75d08d1c4270cf3aa56d421e362eacdd063e264e5b12cffffffff0101000000000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac00000000' ); }); diff --git a/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts b/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts index dffedaff..fe5849bd 100644 --- a/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts +++ b/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts @@ -79,11 +79,11 @@ describe('seed-phrase.signer', () => { it('should sign a raw transaction using a seed phrase', async () => { const txHex = - '70736274ff0100800200000001a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000000100de01000000000101426c66ff1f3b908caa99e2added93d818408c6df40448262b3fdb3b1ea934a9c0100000000ffffffff0210270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a53017a1400000000001600148f8c74cae629eb02883b3d70ac030617fd2e1a6602473044022045b7469de22230b35493fab0f2c5ca4ae3ac84c9c14c9530ea40ada7fa9e1f9c02203efa57d574ffd1a816e58f69cd7b05e7ce42c66167378f0eaed90cee8552ebc20121025182c020a60cdf306deb7a9b3eb4ed26656864e7a3969b6e372323b29d0666a30000000001011f10270000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5300000000'; + '70736274ff0100550200000001ad2c88f940cd48f724d667e58323efd048bdea62e32f426cf04b8fdf870712160000000000ffffffff0101000000000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac00000000000100e2010000000102a95e8c5a5ebefa6431867f1e1691e5dd9cad10b2d1e8efce9b15c48c86f68d000000006b483045022100f21d3cac7d1332fdea2b33b8dd9859743b923dfa42431b49512d8dbb81acce5702204d2a009e45657147acf1b23204bc01a0d338e86c8cad458a394d933e2b3f24f20121031db6a1e76aad4f63aaea779d05a15a5619749a808c8d5b6856ae449b503e1d58ffffffff0280969800000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac700c4c05000000001976a91447542a50d8d84ed278690657e36bdda110f0181688ac000000000000'; const signedTx = await signer.signRawTransaction(txHex, derivation); expect(signedTx).toEqual( - '02000000000101a841c88e7ac355b1f4af08ec8b26ca6c9e1cee86b7f1f2d355d75597461a73a80000000000ffffffff0364000000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a530000000000000000066a0474657374ac260000000000001600144e209aaf99f4b08cb5b583f4e87b546b00ea5a5302483045022100883119b3ba1fccb4ca79d6df974018bba0c838ffc1fbb4abb959e8685a03931002204e40ee30fdb35513f194e55878b79eaa81fde381cc93a0c97f35788ac8f48857012103e389368c5d8bd73599616a574d9b74bf77cb5aee13692e5a3855a7fd2b945f9200000000' + '0200000001ad2c88f940cd48f724d667e58323efd048bdea62e32f426cf04b8fdf87071216000000006b483045022100e25a44edc01cc1b9b90ad1cb62553b4dd56f8e6e0d3eb227c21fdb7fa8d8e03402204c4e2c366831d8f7403822dbf6e69d8713671e456b4181afd427b68a8947eeaf0121037e6c9ff86d24858e73a75d08d1c4270cf3aa56d421e362eacdd063e264e5b12cffffffff0101000000000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac00000000' ); }); From eb98e00dc1d98c80e0b3eeda6a093cdf3db9a7ae Mon Sep 17 00:00:00 2001 From: sotatek-tyler-nguyen4 Date: Mon, 22 Apr 2024 08:02:59 +0700 Subject: [PATCH 058/132] fix: syntax error --- packages/evm/src/manifests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/evm/src/manifests.ts b/packages/evm/src/manifests.ts index 43db934e..4f557f2a 100644 --- a/packages/evm/src/manifests.ts +++ b/packages/evm/src/manifests.ts @@ -190,5 +190,5 @@ export const EVM_MANIFESTS: { [key in EVMChains]: Chain.Manifest } = { low: 1, }, multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', - } + }, }; From 656e97d5568f9c6b721349512d4208243f67c912 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Mon, 22 Apr 2024 10:52:31 +0700 Subject: [PATCH 059/132] chore: add new case --- packages/thor/src/signers/ledger.signer.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/thor/src/signers/ledger.signer.ts b/packages/thor/src/signers/ledger.signer.ts index 5e7c7ec8..a71d8ac7 100644 --- a/packages/thor/src/signers/ledger.signer.ts +++ b/packages/thor/src/signers/ledger.signer.ts @@ -15,6 +15,9 @@ export class LedgerSigner extends Signer.Provider { } verifyAddress(address: string): boolean { + if (address.startsWith('0x')) { + return false; + } const prefix = bech32.decode(address).prefix; if (prefix === 'thor' || prefix === 'maya') { return true; From 752541a7b14415d45a230b262bc76df498503ff1 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Mon, 22 Apr 2024 15:27:30 +0700 Subject: [PATCH 060/132] chore: update --- packages/thor/src/signers/ledger.signer.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/thor/src/signers/ledger.signer.ts b/packages/thor/src/signers/ledger.signer.ts index a71d8ac7..2a49fae8 100644 --- a/packages/thor/src/signers/ledger.signer.ts +++ b/packages/thor/src/signers/ledger.signer.ts @@ -17,12 +17,11 @@ export class LedgerSigner extends Signer.Provider { verifyAddress(address: string): boolean { if (address.startsWith('0x')) { return false; + } else { + const prefix = bech32.decode(address).prefix; + if (prefix === 'thor' || prefix === 'maya') return true; + return false; } - const prefix = bech32.decode(address).prefix; - if (prefix === 'thor' || prefix === 'maya') { - return true; - } - return false; } async getPrivateKey(_derivation: string) { From b0de29f40bcbfae0ec4c23ef639f77f14867d163 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Mon, 22 Apr 2024 15:56:16 +0700 Subject: [PATCH 061/132] chore: chore: pin deps bech32 --- packages/thor/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/thor/package.json b/packages/thor/package.json index 8607e0b9..104ee5dc 100644 --- a/packages/thor/package.json +++ b/packages/thor/package.json @@ -29,7 +29,7 @@ "@xdefi-tech/chains-core": "*", "@xdefi-tech/chains-graphql": "*", "axios": "1.4.0", - "bech32": "^2.0.0", + "bech32": "2.0.0", "bech32-buffer": "0.2.1", "bignumber.js": "9.1.2", "bip32": "2.0.4", From 955a4015f0a371244ed65f58ad7d82b6da6d074e Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Tue, 23 Apr 2024 10:47:25 +0700 Subject: [PATCH 062/132] feat: implement ADR-036 --- packages/cosmos/package.json | 1 + .../cosmos/src/signers/private-key.signer.ts | 20 ++++- .../cosmos/src/signers/seed-phrase.signer.ts | 19 ++++ yarn.lock | 89 ++++++++++++++++++- 4 files changed, 124 insertions(+), 5 deletions(-) diff --git a/packages/cosmos/package.json b/packages/cosmos/package.json index 27a430d6..ba569124 100644 --- a/packages/cosmos/package.json +++ b/packages/cosmos/package.json @@ -29,6 +29,7 @@ "@cosmjs/stargate": "0.32.2", "@cosmjs/tendermint-rpc": "0.32.2", "@cosmos-client/core": "0.47.1", + "@keplr-wallet/cosmos": "0.12.82", "@ledgerhq/hw-transport": "6.30.3", "@ledgerhq/hw-transport-webhid": "6.28.3", "@terra-money/feather.js": "2.1.0-beta.3", diff --git a/packages/cosmos/src/signers/private-key.signer.ts b/packages/cosmos/src/signers/private-key.signer.ts index 4a96aa0a..8b109894 100644 --- a/packages/cosmos/src/signers/private-key.signer.ts +++ b/packages/cosmos/src/signers/private-key.signer.ts @@ -1,7 +1,7 @@ import { Signer, SignerDecorator } from '@xdefi-tech/chains-core'; import { DirectSecp256k1Wallet } from '@cosmjs/proto-signing'; import { SigningStargateClient } from '@cosmjs/stargate'; -import { fromHex } from '@cosmjs/encoding'; +import { fromBase64, fromHex } from '@cosmjs/encoding'; import { TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; import { bech32 } from 'bech32'; import { @@ -11,6 +11,8 @@ import { import { utils, Wallet } from 'ethers'; import { AccAddress, RawKey, LCDClient } from '@terra-money/feather.js'; import { encode } from 'bech32-buffer'; +import { verifyADR36Amino } from '@keplr-wallet/cosmos'; +import { StdSignature } from '@cosmjs/amino'; import { ChainMsg, CosmosChainType } from '../msg'; import { STARGATE_CLIENT_OPTIONS } from '../utils'; @@ -131,6 +133,22 @@ export class PrivateKeySigner extends Signer.Provider { msg.sign(Buffer.from(tx.toBytes()).toString('base64')); } } + + async verifyMessage( + address: string, + data: Uint8Array, + signed: StdSignature + ): Promise { + const isValid = verifyADR36Amino( + bech32.decode(address).prefix, // bech32 prefix + bech32.encode('cosmos', bech32.decode(address).words), // signer + data, // data sign message + fromBase64(signed.pub_key.value), // pubKeyBuffer + fromBase64(signed.signature) // signatureBuffer + ); + + return isValid; + } } export default PrivateKeySigner; diff --git a/packages/cosmos/src/signers/seed-phrase.signer.ts b/packages/cosmos/src/signers/seed-phrase.signer.ts index 5c0566e8..a3ce4c6b 100644 --- a/packages/cosmos/src/signers/seed-phrase.signer.ts +++ b/packages/cosmos/src/signers/seed-phrase.signer.ts @@ -10,6 +10,9 @@ import { import { utils, Wallet } from 'ethers'; import { MnemonicKey, AccAddress, LCDClient } from '@terra-money/feather.js'; import { encode } from 'bech32-buffer'; +import { verifyADR36Amino } from '@keplr-wallet/cosmos'; +import { StdSignature } from '@cosmjs/amino'; +import { fromBase64 } from '@cosmjs/encoding'; import { ChainMsg, CosmosChainType } from '../msg'; import { STARGATE_CLIENT_OPTIONS } from '../utils'; @@ -139,6 +142,22 @@ export class SeedPhraseSigner extends Signer.Provider { msg.sign(Buffer.from(tx.toBytes()).toString('base64')); } } + + async verifyMessage( + address: string, + data: Uint8Array, + signed: StdSignature + ): Promise { + const isValid = verifyADR36Amino( + bech32.decode(address).prefix, // bech32 prefix + bech32.encode('cosmos', bech32.decode(address).words), // signer + data, // data sign message + fromBase64(signed.pub_key.value), // pubKeyBuffer + fromBase64(signed.signature) // signatureBuffer + ); + + return isValid; + } } export default SeedPhraseSigner; diff --git a/yarn.lock b/yarn.lock index 9b94167c..9eaa6740 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2729,7 +2729,7 @@ "@ethersproject/bytes" "^5.6.0" js-sha3 "0.8.0" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.6.0", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.5.0", "@ethersproject/keccak256@^5.6.0", "@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -4391,6 +4391,77 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@keplr-wallet/common@0.12.82": + version "0.12.82" + resolved "https://registry.yarnpkg.com/@keplr-wallet/common/-/common-0.12.82.tgz#25bff69def216533f31702ec96da1c01f50b12bf" + integrity sha512-nwde8TehEfU+MfOxvybnxeXKN4GIsh4utKTvYT2XL08Y/d1/maZX+dnn4AzeYL5hglhzgcxGbanKXPRUA8sOJg== + dependencies: + "@keplr-wallet/crypto" "0.12.82" + "@keplr-wallet/types" "0.12.82" + buffer "^6.0.3" + delay "^4.4.0" + mobx "^6.1.7" + +"@keplr-wallet/cosmos@0.12.82": + version "0.12.82" + resolved "https://registry.yarnpkg.com/@keplr-wallet/cosmos/-/cosmos-0.12.82.tgz#65779c913b2d123048507a21f5592ecdc383c7a7" + integrity sha512-ckFJsNdibKj096AOjoAOafML/TL78Q+vVcdycfdInN2Hh0iiTADhaR5v7xw95mcqKq3KKN/TyDyv4vfr6GgvqQ== + dependencies: + "@ethersproject/address" "^5.6.0" + "@keplr-wallet/common" "0.12.82" + "@keplr-wallet/crypto" "0.12.82" + "@keplr-wallet/proto-types" "0.12.82" + "@keplr-wallet/simple-fetch" "0.12.82" + "@keplr-wallet/types" "0.12.82" + "@keplr-wallet/unit" "0.12.82" + bech32 "^1.1.4" + buffer "^6.0.3" + long "^4.0.0" + protobufjs "^6.11.2" + +"@keplr-wallet/crypto@0.12.82": + version "0.12.82" + resolved "https://registry.yarnpkg.com/@keplr-wallet/crypto/-/crypto-0.12.82.tgz#2dfb506c437e6385bc211d5dc29b79f6e0048ac5" + integrity sha512-sNjv01RLG6elQUfsmZeYg0I8l7/HF0RUfZ60lphW4fBodGQMgdUhix6scO9lWzU1yNcs3GY2F/46oofNdY80BQ== + dependencies: + "@ethersproject/keccak256" "^5.5.0" + bip32 "^2.0.6" + bip39 "^3.0.3" + bs58check "^2.1.2" + buffer "^6.0.3" + crypto-js "^4.0.0" + elliptic "^6.5.3" + sha.js "^2.4.11" + +"@keplr-wallet/proto-types@0.12.82": + version "0.12.82" + resolved "https://registry.yarnpkg.com/@keplr-wallet/proto-types/-/proto-types-0.12.82.tgz#7a91d1ce555d0b13262e87c86acbfea6adb5a143" + integrity sha512-mWcPgkQyblXww4CfOPek4gwi0jo7T754fTOW7oTx1NkNXcTzRTWFBmSAt+Tn0fWAkAY2krQ6P0NaHAb4BXr0xw== + dependencies: + long "^4.0.0" + protobufjs "^6.11.2" + +"@keplr-wallet/simple-fetch@0.12.82": + version "0.12.82" + resolved "https://registry.yarnpkg.com/@keplr-wallet/simple-fetch/-/simple-fetch-0.12.82.tgz#53474cbfa815343464b5725ea7464d61ed4a69f5" + integrity sha512-jRuKpv07NIxO9XrZQybUxSJn1kz7bd4QEy4vhmkyYFuFEwow9tL5O9lXTrob1AOe3ZouiSeOdr6V7wHctIEvZw== + +"@keplr-wallet/types@0.12.82": + version "0.12.82" + resolved "https://registry.yarnpkg.com/@keplr-wallet/types/-/types-0.12.82.tgz#182e542a6463d70933f8b3125bf771cfeef3cc09" + integrity sha512-cNjkSvIHpWQEaM0cS9eQRJWTdwL55J9LQtRyCfOaB8bSEsFwBOvwcb2vpwMjLCJ3t0zkQ6VirOjvZWPutydpMQ== + dependencies: + long "^4.0.0" + +"@keplr-wallet/unit@0.12.82": + version "0.12.82" + resolved "https://registry.yarnpkg.com/@keplr-wallet/unit/-/unit-0.12.82.tgz#8443fb788d7652e351769171a1adcbe5b75f07c9" + integrity sha512-J3+ac0dp0jyaaZvypD08Vtfk2+nPmekDBTXshoYijksMG0sBXkqziR1KIGRSGcXklFEBbVX7U25riWnIMf6a2A== + dependencies: + "@keplr-wallet/types" "0.12.82" + big-integer "^1.6.48" + utility-types "^3.10.0" + "@ledgerhq/cryptoassets@9.1.0": version "9.1.0" resolved "https://registry.yarnpkg.com/@ledgerhq/cryptoassets/-/cryptoassets-9.1.0.tgz#d1b77a2ad4ba12ce8bcdc74e6230312692e719cf" @@ -9272,7 +9343,7 @@ crypto-browserify@3.12.0, crypto-browserify@^3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-js@4.2.0, crypto-js@^4.1.1, crypto-js@^4.2.0: +crypto-js@4.2.0, crypto-js@^4.0.0, crypto-js@^4.1.1, crypto-js@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== @@ -9502,6 +9573,11 @@ del@^6.0.0: rimraf "^3.0.2" slash "^3.0.0" +delay@^4.4.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/delay/-/delay-4.4.1.tgz#6e02d02946a1b6ab98b39262ced965acba2ac4d1" + integrity sha512-aL3AhqtfhOlT/3ai6sWXeqwnw63ATNpnUiN4HL7x9q+My5QtHlO3OIkasmug9LKzpheLdmUKGRKnYXYAS7FQkQ== + delay@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" @@ -11181,7 +11257,7 @@ form-data@^3.0.0, form-data@^3.0.1: blakejs "^1.1.0" bn.js "^4.11.8" buffer "^5.2.1" - crypto-js "^3.1.9-1" + crypto-js "4.2.0" elliptic "^6.4.1" hmac-drbg "^1.0.1" lodash "^4.17.21" @@ -14504,6 +14580,11 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mobx@^6.1.7: + version "6.12.3" + resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.12.3.tgz#b6a0fde4268116be602d50bffb32f1b90a8fb077" + integrity sha512-c8NKkO4R2lShkSXZ2Ongj1ycjugjzFFo/UswHBnS62y07DMcTc9Rvo03/3nRyszIvwPNljlkd4S828zIBv/piw== + mrmime@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" @@ -15596,7 +15677,7 @@ protobufjs@7.2.4: "@types/node" ">=13.7.0" long "^5.0.0" -protobufjs@^6.11.3, protobufjs@^6.8.8, protobufjs@~6.11.2, protobufjs@~6.11.3: +protobufjs@^6.11.2, protobufjs@^6.11.3, protobufjs@^6.8.8, protobufjs@~6.11.2, protobufjs@~6.11.3: version "6.11.4" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== From 82d9fc7ebf505f2179f86f7eca286f067a03bbac Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Tue, 23 Apr 2024 15:21:05 +0700 Subject: [PATCH 063/132] base: update x add unit test --- .../src/signers/private-key.signer.spec.ts | 43 ++++++++++++++++ .../cosmos/src/signers/private-key.signer.ts | 27 ++++++---- .../src/signers/seed-phrase.signer.spec.ts | 51 +++++++++++++++++++ .../cosmos/src/signers/seed-phrase.signer.ts | 27 ++++++---- 4 files changed, 126 insertions(+), 22 deletions(-) diff --git a/packages/cosmos/src/signers/private-key.signer.spec.ts b/packages/cosmos/src/signers/private-key.signer.spec.ts index 608bb52a..6194c3ca 100644 --- a/packages/cosmos/src/signers/private-key.signer.spec.ts +++ b/packages/cosmos/src/signers/private-key.signer.spec.ts @@ -1,4 +1,7 @@ import { Msg, MsgEncoding } from '@xdefi-tech/chains-core'; +import { Hash, PrivKeySecp256k1 } from '@keplr-wallet/crypto'; +import { bech32 } from 'bech32'; +import { makeADR36AminoSignDoc, serializeSignDoc } from '@keplr-wallet/cosmos'; import { CosmosProvider } from '../chain.provider'; import { IndexerDataSource } from '../datasource'; @@ -163,4 +166,44 @@ describe('private-key.signer', () => { await cosmosSigner.sign(msg as ChainMsg); expect(msg.signedTransaction).toBeTruthy(); }); + + it('should return status of verify message', async () => { + // Define test data + const privKey = PrivKeySecp256k1.generateRandomKey(); + const pubKey = privKey.getPubKey(); + + const signer = bech32.encode('cosmos', bech32.toWords(pubKey.toBytes())); + + const signDoc = makeADR36AminoSignDoc(signer, 'test'); + const msg = serializeSignDoc(signDoc); + const signature = privKey.signDigest32(Hash.sha256(msg)); + + const result = await cosmosSigner.verifyMessage( + signer, + 'test', + pubKey.toBytes(), + new Uint8Array([...signature.r, ...signature.s]) + ); + expect(result); + }); + + it('should return false when unmatched/invalid signer', async () => { + // Define test data + const privKey = PrivKeySecp256k1.generateRandomKey(); + const pubKey = privKey.getPubKey(); + + const signer = 'osmo1ymk637a7wljvt4w7q9lnrw95mg9sr37yatxd9h'; // unmatched signer + + const signDoc = makeADR36AminoSignDoc(signer, 'test'); + const msg = serializeSignDoc(signDoc); + const signature = privKey.signDigest32(Hash.sha256(msg)); + + const result = await cosmosSigner.verifyMessage( + signer, + 'test', + pubKey.toBytes(), + new Uint8Array([...signature.r, ...signature.s]) + ); + expect(result).toBe(false); + }); }); diff --git a/packages/cosmos/src/signers/private-key.signer.ts b/packages/cosmos/src/signers/private-key.signer.ts index 8b109894..fc83b747 100644 --- a/packages/cosmos/src/signers/private-key.signer.ts +++ b/packages/cosmos/src/signers/private-key.signer.ts @@ -135,19 +135,24 @@ export class PrivateKeySigner extends Signer.Provider { } async verifyMessage( - address: string, - data: Uint8Array, - signed: StdSignature + signer: string, + data: Uint8Array | string, + pubKey: Uint8Array, + signature: Uint8Array ): Promise { - const isValid = verifyADR36Amino( - bech32.decode(address).prefix, // bech32 prefix - bech32.encode('cosmos', bech32.decode(address).words), // signer - data, // data sign message - fromBase64(signed.pub_key.value), // pubKeyBuffer - fromBase64(signed.signature) // signatureBuffer - ); + try { + const isValid = verifyADR36Amino( + bech32.decode(signer).prefix, // prefix + signer, // signer + data, // data sign message + pubKey, // pubKeyBuffer + signature // signature + ); - return isValid; + return isValid; + } catch (err) { + return false; + } } } diff --git a/packages/cosmos/src/signers/seed-phrase.signer.spec.ts b/packages/cosmos/src/signers/seed-phrase.signer.spec.ts index f9335d7e..db9e8349 100644 --- a/packages/cosmos/src/signers/seed-phrase.signer.spec.ts +++ b/packages/cosmos/src/signers/seed-phrase.signer.spec.ts @@ -1,4 +1,7 @@ import { Msg } from '@xdefi-tech/chains-core'; +import { Hash, PrivKeySecp256k1 } from '@keplr-wallet/crypto'; +import { bech32 } from 'bech32'; +import { makeADR36AminoSignDoc, serializeSignDoc } from '@keplr-wallet/cosmos'; import { CosmosProvider } from '../chain.provider'; import { IndexerDataSource } from '../datasource'; @@ -345,4 +348,52 @@ describe('seed-phase.addressGeneration', () => { ); } }); + + it('should return status of verify message', async () => { + // Define test data + const privKey = PrivKeySecp256k1.generateRandomKey(); + const pubKey = privKey.getPubKey(); + + const signer = bech32.encode('cosmos', bech32.toWords(pubKey.toBytes())); + + const signDoc = makeADR36AminoSignDoc(signer, 'test'); + const msg = serializeSignDoc(signDoc); + const signature = privKey.signDigest32(Hash.sha256(msg)); + + for (let i = 0; i < signers.length; i++) { + const signerSeed = signers[i]; + expect( + await signerSeed.verifyMessage( + signer, + 'test', + pubKey.toBytes(), + new Uint8Array([...signature.r, ...signature.s]) + ) + ).toBe(false); + } + }); + + it('should return false when unmatched/invalid signer', async () => { + // Define test data + const privKey = PrivKeySecp256k1.generateRandomKey(); + const pubKey = privKey.getPubKey(); + + const signer = 'osmo1ymk637a7wljvt4w7q9lnrw95mg9sr37yatxd9h'; // unmatched signer + + const signDoc = makeADR36AminoSignDoc(signer, 'test'); + const msg = serializeSignDoc(signDoc); + const signature = privKey.signDigest32(Hash.sha256(msg)); + + for (let i = 0; i < signers.length; i++) { + const signerSeed = signers[i]; + expect( + await signerSeed.verifyMessage( + signer, + 'test', + pubKey.toBytes(), + new Uint8Array([...signature.r, ...signature.s]) + ) + ).toBe(false); + } + }); }); diff --git a/packages/cosmos/src/signers/seed-phrase.signer.ts b/packages/cosmos/src/signers/seed-phrase.signer.ts index a3ce4c6b..2aad0201 100644 --- a/packages/cosmos/src/signers/seed-phrase.signer.ts +++ b/packages/cosmos/src/signers/seed-phrase.signer.ts @@ -144,19 +144,24 @@ export class SeedPhraseSigner extends Signer.Provider { } async verifyMessage( - address: string, - data: Uint8Array, - signed: StdSignature + signer: string, + data: Uint8Array | string, + pubKey: Uint8Array, + signature: Uint8Array ): Promise { - const isValid = verifyADR36Amino( - bech32.decode(address).prefix, // bech32 prefix - bech32.encode('cosmos', bech32.decode(address).words), // signer - data, // data sign message - fromBase64(signed.pub_key.value), // pubKeyBuffer - fromBase64(signed.signature) // signatureBuffer - ); + try { + const isValid = verifyADR36Amino( + bech32.decode(signer).prefix, // prefix + signer, // signer + data, // data sign message + pubKey, // pubKeyBuffer + signature // signature + ); - return isValid; + return isValid; + } catch (err) { + return false; + } } } From 6690b32f840cbe480e5b602a778e5a469be64026 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Tue, 23 Apr 2024 17:17:46 +0700 Subject: [PATCH 064/132] chore: update --- packages/cosmos/src/signers/private-key.signer.ts | 5 ++--- packages/cosmos/src/signers/seed-phrase.signer.spec.ts | 4 ++-- packages/cosmos/src/signers/seed-phrase.signer.ts | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/cosmos/src/signers/private-key.signer.ts b/packages/cosmos/src/signers/private-key.signer.ts index fc83b747..118d3db9 100644 --- a/packages/cosmos/src/signers/private-key.signer.ts +++ b/packages/cosmos/src/signers/private-key.signer.ts @@ -12,7 +12,6 @@ import { utils, Wallet } from 'ethers'; import { AccAddress, RawKey, LCDClient } from '@terra-money/feather.js'; import { encode } from 'bech32-buffer'; import { verifyADR36Amino } from '@keplr-wallet/cosmos'; -import { StdSignature } from '@cosmjs/amino'; import { ChainMsg, CosmosChainType } from '../msg'; import { STARGATE_CLIENT_OPTIONS } from '../utils'; @@ -141,7 +140,7 @@ export class PrivateKeySigner extends Signer.Provider { signature: Uint8Array ): Promise { try { - const isValid = verifyADR36Amino( + const isVerified = verifyADR36Amino( bech32.decode(signer).prefix, // prefix signer, // signer data, // data sign message @@ -149,7 +148,7 @@ export class PrivateKeySigner extends Signer.Provider { signature // signature ); - return isValid; + return isVerified; } catch (err) { return false; } diff --git a/packages/cosmos/src/signers/seed-phrase.signer.spec.ts b/packages/cosmos/src/signers/seed-phrase.signer.spec.ts index db9e8349..302ea2e5 100644 --- a/packages/cosmos/src/signers/seed-phrase.signer.spec.ts +++ b/packages/cosmos/src/signers/seed-phrase.signer.spec.ts @@ -354,7 +354,7 @@ describe('seed-phase.addressGeneration', () => { const privKey = PrivKeySecp256k1.generateRandomKey(); const pubKey = privKey.getPubKey(); - const signer = bech32.encode('cosmos', bech32.toWords(pubKey.toBytes())); + const signer = bech32.encode('cosmos', bech32.toWords(privKey.toBytes())); const signDoc = makeADR36AminoSignDoc(signer, 'test'); const msg = serializeSignDoc(signDoc); @@ -369,7 +369,7 @@ describe('seed-phase.addressGeneration', () => { pubKey.toBytes(), new Uint8Array([...signature.r, ...signature.s]) ) - ).toBe(false); + ); } }); diff --git a/packages/cosmos/src/signers/seed-phrase.signer.ts b/packages/cosmos/src/signers/seed-phrase.signer.ts index 2aad0201..a45c8caf 100644 --- a/packages/cosmos/src/signers/seed-phrase.signer.ts +++ b/packages/cosmos/src/signers/seed-phrase.signer.ts @@ -150,7 +150,7 @@ export class SeedPhraseSigner extends Signer.Provider { signature: Uint8Array ): Promise { try { - const isValid = verifyADR36Amino( + const isVerified = verifyADR36Amino( bech32.decode(signer).prefix, // prefix signer, // signer data, // data sign message @@ -158,7 +158,7 @@ export class SeedPhraseSigner extends Signer.Provider { signature // signature ); - return isValid; + return isVerified; } catch (err) { return false; } From 06b5bebee72bb70ae6df49e3d98a685cc8e76477 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Tue, 23 Apr 2024 17:22:41 +0700 Subject: [PATCH 065/132] chore --- packages/cosmos/src/signers/seed-phrase.signer.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cosmos/src/signers/seed-phrase.signer.spec.ts b/packages/cosmos/src/signers/seed-phrase.signer.spec.ts index 302ea2e5..802b67a1 100644 --- a/packages/cosmos/src/signers/seed-phrase.signer.spec.ts +++ b/packages/cosmos/src/signers/seed-phrase.signer.spec.ts @@ -354,7 +354,7 @@ describe('seed-phase.addressGeneration', () => { const privKey = PrivKeySecp256k1.generateRandomKey(); const pubKey = privKey.getPubKey(); - const signer = bech32.encode('cosmos', bech32.toWords(privKey.toBytes())); + const signer = bech32.encode('cosmos', bech32.toWords(pubKey.toBytes())); const signDoc = makeADR36AminoSignDoc(signer, 'test'); const msg = serializeSignDoc(signDoc); From d1ce86171e6b4781746678f5556c80c062d98eb7 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Wed, 24 Apr 2024 20:38:29 +0700 Subject: [PATCH 066/132] chore: update --- packages/thor/src/signers/ledger.signer.spec.ts | 4 ---- packages/thor/src/signers/ledger.signer.ts | 10 +++------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/packages/thor/src/signers/ledger.signer.spec.ts b/packages/thor/src/signers/ledger.signer.spec.ts index c3b7a563..ee7bf64b 100644 --- a/packages/thor/src/signers/ledger.signer.spec.ts +++ b/packages/thor/src/signers/ledger.signer.spec.ts @@ -70,10 +70,6 @@ describe('ledger.signer', () => { expect(message.signedTransaction).toBeTruthy(); }); - it('should return false when verifing an invalid address', async () => { - expect(signer.verifyAddress('0xDEADBEEF')).toBe(false); - }); - it('should validate an address', async () => { expect(signer.verifyAddress(txInput.from)).toBe(true); }); diff --git a/packages/thor/src/signers/ledger.signer.ts b/packages/thor/src/signers/ledger.signer.ts index 2a49fae8..3f736fa4 100644 --- a/packages/thor/src/signers/ledger.signer.ts +++ b/packages/thor/src/signers/ledger.signer.ts @@ -15,13 +15,9 @@ export class LedgerSigner extends Signer.Provider { } verifyAddress(address: string): boolean { - if (address.startsWith('0x')) { - return false; - } else { - const prefix = bech32.decode(address).prefix; - if (prefix === 'thor' || prefix === 'maya') return true; - return false; - } + const prefix = bech32.decode(address).prefix; + if (prefix === 'thor' || prefix === 'maya') return true; + return false; } async getPrivateKey(_derivation: string) { From f1e36fea963746c98984ba68d32cc98dbb02c5f4 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Wed, 24 Apr 2024 20:44:08 +0700 Subject: [PATCH 067/132] chore: update testcase --- packages/thor/src/signers/ledger.signer.spec.ts | 6 ++++++ packages/thor/src/signers/ledger.signer.ts | 10 +++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/thor/src/signers/ledger.signer.spec.ts b/packages/thor/src/signers/ledger.signer.spec.ts index ee7bf64b..ee7e2776 100644 --- a/packages/thor/src/signers/ledger.signer.spec.ts +++ b/packages/thor/src/signers/ledger.signer.spec.ts @@ -70,6 +70,12 @@ describe('ledger.signer', () => { expect(message.signedTransaction).toBeTruthy(); }); + it('should return false when verifing an invalid address', async () => { + expect( + signer.verifyAddress('invalid1hccrcavupf7wnl2klud40lan00zp0q3u807g94') + ).toBe(false); + }); + it('should validate an address', async () => { expect(signer.verifyAddress(txInput.from)).toBe(true); }); diff --git a/packages/thor/src/signers/ledger.signer.ts b/packages/thor/src/signers/ledger.signer.ts index 3f736fa4..1f5db8e4 100644 --- a/packages/thor/src/signers/ledger.signer.ts +++ b/packages/thor/src/signers/ledger.signer.ts @@ -15,9 +15,13 @@ export class LedgerSigner extends Signer.Provider { } verifyAddress(address: string): boolean { - const prefix = bech32.decode(address).prefix; - if (prefix === 'thor' || prefix === 'maya') return true; - return false; + try { + const prefix = bech32.decode(address).prefix; + if (prefix === 'thor' || prefix === 'maya') return true; + return false; + } catch (error) { + return false; + } } async getPrivateKey(_derivation: string) { From b3e81bdc7f85390e328c2ec2666c1d14840d94c7 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Wed, 24 Apr 2024 20:52:59 +0700 Subject: [PATCH 068/132] chore: update testcase --- packages/thor/src/signers/ledger.signer.spec.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/thor/src/signers/ledger.signer.spec.ts b/packages/thor/src/signers/ledger.signer.spec.ts index ee7e2776..24b7ff91 100644 --- a/packages/thor/src/signers/ledger.signer.spec.ts +++ b/packages/thor/src/signers/ledger.signer.spec.ts @@ -71,8 +71,12 @@ describe('ledger.signer', () => { }); it('should return false when verifing an invalid address', async () => { + expect(signer.verifyAddress('0xDEADBEEF')).toBe(false); + }); + + it('should return false when verifing an address without prefix(thor, maya)', async () => { expect( - signer.verifyAddress('invalid1hccrcavupf7wnl2klud40lan00zp0q3u807g94') + signer.verifyAddress('test1hccrcavupf7wnl2klud40lan00zp0q3u807g94') ).toBe(false); }); From f41bfb4349ba49e8b371650e409c8a82d4a0758a Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Wed, 24 Apr 2024 21:24:51 +0700 Subject: [PATCH 069/132] chore: add changeset --- .changeset/friendly-cougars-peel.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/friendly-cougars-peel.md diff --git a/.changeset/friendly-cougars-peel.md b/.changeset/friendly-cougars-peel.md new file mode 100644 index 00000000..a349847d --- /dev/null +++ b/.changeset/friendly-cougars-peel.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-thor': patch +--- + +- feat: Implement methods for maya on thor chain From faa6dba7800bf554a88ca429a2aca26e675cec01 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Wed, 24 Apr 2024 21:35:16 +0700 Subject: [PATCH 070/132] chore: add changeset --- .changeset/proud-dancers-obey.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/proud-dancers-obey.md diff --git a/.changeset/proud-dancers-obey.md b/.changeset/proud-dancers-obey.md new file mode 100644 index 00000000..561f54e0 --- /dev/null +++ b/.changeset/proud-dancers-obey.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-cosmos': patch +--- + +- feat: Implement ADR 036 - Arbitrary Signature for Cosmos Chain From a04a730f944003a9d2c05cba709964719785f13c Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Thu, 25 Apr 2024 12:50:01 +0300 Subject: [PATCH 071/132] feat: add Uint8Array support for memo field UTXO chains --- .changeset/sour-hornets-judge.md | 9 ++++++ packages/bitcoin/jest-setup-file.ts | 4 +-- packages/bitcoin/src/chain.provider.spec.ts | 30 +++++++++++++++++++ packages/bitcoin/src/msg.ts | 16 ++++++---- packages/bitcoincash/jest-setup-file.ts | 2 ++ .../bitcoincash/src/chain.provider.spec.ts | 30 +++++++++++++++++++ packages/bitcoincash/src/msg.ts | 16 ++++++---- packages/dogecoin/jest-setup-file.ts | 2 ++ packages/dogecoin/src/chain.provider.spec.ts | 30 +++++++++++++++++++ packages/dogecoin/src/msg.ts | 16 ++++++---- packages/litecoin/jest-setup-file.ts | 2 ++ packages/litecoin/src/chain.provider.spec.ts | 30 +++++++++++++++++++ packages/litecoin/src/msg.ts | 16 ++++++---- packages/utxo/src/msg.ts | 16 ++++++---- 14 files changed, 187 insertions(+), 32 deletions(-) create mode 100644 .changeset/sour-hornets-judge.md diff --git a/.changeset/sour-hornets-judge.md b/.changeset/sour-hornets-judge.md new file mode 100644 index 00000000..6c24115c --- /dev/null +++ b/.changeset/sour-hornets-judge.md @@ -0,0 +1,9 @@ +--- +'@xdefi-tech/chains-bitcoincash': patch +'@xdefi-tech/chains-dogecoin': patch +'@xdefi-tech/chains-litecoin': patch +'@xdefi-tech/chains-bitcoin': patch +'@xdefi-tech/chains-utxo': patch +--- + +Feat: add Uint8Array support for memo field diff --git a/packages/bitcoin/jest-setup-file.ts b/packages/bitcoin/jest-setup-file.ts index 03a7a63b..07990058 100644 --- a/packages/bitcoin/jest-setup-file.ts +++ b/packages/bitcoin/jest-setup-file.ts @@ -1,3 +1,3 @@ import 'reflect-metadata'; -import { TextEncoder } from 'util'; -global.TextEncoder = TextEncoder; +import { TextEncoder, TextDecoder } from 'util'; +Object.assign(global, { TextDecoder, TextEncoder }); diff --git a/packages/bitcoin/src/chain.provider.spec.ts b/packages/bitcoin/src/chain.provider.spec.ts index f94a1d0f..b3d41356 100644 --- a/packages/bitcoin/src/chain.provider.spec.ts +++ b/packages/bitcoin/src/chain.provider.spec.ts @@ -69,4 +69,34 @@ describe('chain.provider', () => { ) ).rejects.toThrow(); }); + + it('should create message with memo as string', async () => { + const memo = 'Test string memo'; + const msg = provider.createMsg({ + to: 'bc1qqqszrzvw3l5437qw66df0779ycuumwhnnf5yqz', + from: 'bc1qqqszrzvw3l5437qw66df0779ycuumwhnnf5yqz', + amount: 0.000001, + memo: memo, + }); + + expect(msg).toBeInstanceOf(ChainMsg); + expect(msg.toData().memo).toEqual(memo); + }); + + it('should create message with memo as Uint8Array', async () => { + const memo = 'Test string memo'; + const encodedMemo = new TextEncoder().encode(memo); + const msg = provider.createMsg({ + to: 'bc1qqqszrzvw3l5437qw66df0779ycuumwhnnf5yqz', + from: 'bc1qqqszrzvw3l5437qw66df0779ycuumwhnnf5yqz', + amount: 0.000001, + memo: encodedMemo, + }); + + expect(msg).toBeInstanceOf(ChainMsg); + expect(msg.toData().memo).toEqual(encodedMemo); + expect(new TextDecoder().decode(msg.toData().memo as Uint8Array)).toEqual( + memo + ); + }); }); diff --git a/packages/bitcoin/src/msg.ts b/packages/bitcoin/src/msg.ts index ebd952a9..add74a8c 100644 --- a/packages/bitcoin/src/msg.ts +++ b/packages/bitcoin/src/msg.ts @@ -15,7 +15,7 @@ import type { BitcoinProvider } from './chain.provider'; export interface MsgBody { amount: NumberIsh; to: string; - memo?: string; + memo?: string | Uint8Array; from: string; gasLimit?: NumberIsh; // ByteFee decimals?: number; @@ -124,11 +124,15 @@ export class ChainMsg extends BaseMsg { }; } - public compileMemo(memo: string) { - return UTXOLib.script.compile([ - UTXOLib.opcodes.OP_RETURN, - Buffer.from(memo, 'utf8'), - ]); + public compileMemo(memo: string | Uint8Array) { + let formattedMemo: Buffer; + if (typeof memo === 'string') { + formattedMemo = Buffer.from(memo, 'utf8'); + } else { + formattedMemo = Buffer.from(memo); + } + + return UTXOLib.script.compile([UTXOLib.opcodes.OP_RETURN, formattedMemo]); } async getFee(speed?: GasFeeSpeed): Promise { diff --git a/packages/bitcoincash/jest-setup-file.ts b/packages/bitcoincash/jest-setup-file.ts index d2c9bc6e..07990058 100644 --- a/packages/bitcoincash/jest-setup-file.ts +++ b/packages/bitcoincash/jest-setup-file.ts @@ -1 +1,3 @@ import 'reflect-metadata'; +import { TextEncoder, TextDecoder } from 'util'; +Object.assign(global, { TextDecoder, TextEncoder }); diff --git a/packages/bitcoincash/src/chain.provider.spec.ts b/packages/bitcoincash/src/chain.provider.spec.ts index 294664d9..b0f7fc7d 100644 --- a/packages/bitcoincash/src/chain.provider.spec.ts +++ b/packages/bitcoincash/src/chain.provider.spec.ts @@ -71,4 +71,34 @@ describe('chain.provider', () => { ) ).rejects.toThrow(); }); + + it('should create message with memo as string', async () => { + const memo = 'Test string memo'; + const msg = provider.createMsg({ + to: 'bitcoincash:qpauz5p7js7efhxtcy780lwra7qhvswqwvstca7ffu', + from: 'bitcoincash:qpauz5p7js7efhxtcy780lwra7qhvswqwvstca7ffu', + amount: 0.000001, + memo: memo, + }); + + expect(msg).toBeInstanceOf(ChainMsg); + expect(msg.toData().memo).toEqual(memo); + }); + + it('should create message with memo as Uint8Array', async () => { + const memo = 'Test string memo'; + const encodedMemo = new TextEncoder().encode(memo); + const msg = provider.createMsg({ + to: 'bitcoincash:qpauz5p7js7efhxtcy780lwra7qhvswqwvstca7ffu', + from: 'bitcoincash:qpauz5p7js7efhxtcy780lwra7qhvswqwvstca7ffu', + amount: 0.000001, + memo: encodedMemo, + }); + + expect(msg).toBeInstanceOf(ChainMsg); + expect(msg.toData().memo).toEqual(encodedMemo); + expect(new TextDecoder().decode(msg.toData().memo as Uint8Array)).toEqual( + memo + ); + }); }); diff --git a/packages/bitcoincash/src/msg.ts b/packages/bitcoincash/src/msg.ts index 31ab8c53..56f2d78d 100644 --- a/packages/bitcoincash/src/msg.ts +++ b/packages/bitcoincash/src/msg.ts @@ -14,7 +14,7 @@ import type { BitcoinCashProvider } from './chain.provider'; export interface MsgBody { amount: NumberIsh; to: string; - memo?: string; + memo?: string | Uint8Array; from: string; gasLimit?: NumberIsh; // ByteFee decimals?: number; @@ -79,11 +79,15 @@ export class ChainMsg extends BaseMsg { }; } - public compileMemo(memo: string) { - return UTXOLib.script.compile([ - UTXOLib.opcodes.OP_RETURN, - Buffer.from(memo, 'utf8'), - ]); + public compileMemo(memo: string | Uint8Array) { + let formattedMemo: Buffer; + if (typeof memo === 'string') { + formattedMemo = Buffer.from(memo, 'utf8'); + } else { + formattedMemo = Buffer.from(memo); + } + + return UTXOLib.script.compile([UTXOLib.opcodes.OP_RETURN, formattedMemo]); } async getFee(speed?: GasFeeSpeed): Promise { diff --git a/packages/dogecoin/jest-setup-file.ts b/packages/dogecoin/jest-setup-file.ts index d2c9bc6e..07990058 100644 --- a/packages/dogecoin/jest-setup-file.ts +++ b/packages/dogecoin/jest-setup-file.ts @@ -1 +1,3 @@ import 'reflect-metadata'; +import { TextEncoder, TextDecoder } from 'util'; +Object.assign(global, { TextDecoder, TextEncoder }); diff --git a/packages/dogecoin/src/chain.provider.spec.ts b/packages/dogecoin/src/chain.provider.spec.ts index 4902e451..3f27e102 100644 --- a/packages/dogecoin/src/chain.provider.spec.ts +++ b/packages/dogecoin/src/chain.provider.spec.ts @@ -68,4 +68,34 @@ describe('chain.provider', () => { ) ).rejects.toThrow(); }); + + it('should create message with memo as string', async () => { + const memo = 'Test string memo'; + const msg = provider.createMsg({ + to: 'DPbphsB3Hgb4Q2Sz32e2NoLbmofMNrp1wn', + from: 'DPbphsB3Hgb4Q2Sz32e2NoLbmofMNrp1wn', + amount: 0.000001, + memo: memo, + }); + + expect(msg).toBeInstanceOf(ChainMsg); + expect(msg.toData().memo).toEqual(memo); + }); + + it('should create message with memo as Uint8Array', async () => { + const memo = 'Test string memo'; + const encodedMemo = new TextEncoder().encode(memo); + const msg = provider.createMsg({ + to: 'DPbphsB3Hgb4Q2Sz32e2NoLbmofMNrp1wn', + from: 'DPbphsB3Hgb4Q2Sz32e2NoLbmofMNrp1wn', + amount: 0.000001, + memo: encodedMemo, + }); + + expect(msg).toBeInstanceOf(ChainMsg); + expect(msg.toData().memo).toEqual(encodedMemo); + expect(new TextDecoder().decode(msg.toData().memo as Uint8Array)).toEqual( + memo + ); + }); }); diff --git a/packages/dogecoin/src/msg.ts b/packages/dogecoin/src/msg.ts index 8b03b928..960a47c4 100644 --- a/packages/dogecoin/src/msg.ts +++ b/packages/dogecoin/src/msg.ts @@ -14,7 +14,7 @@ import type { DogecoinProvider } from './chain.provider'; export interface MsgBody { amount: NumberIsh; to: string; - memo?: string; + memo?: string | Uint8Array; from: string; gasLimit?: NumberIsh; // ByteFee decimals?: number; @@ -84,11 +84,15 @@ export class ChainMsg extends BaseMsg { }; } - public compileMemo(memo: string) { - return UTXOLib.script.compile([ - UTXOLib.opcodes.OP_RETURN, - Buffer.from(memo, 'utf8'), - ]); + public compileMemo(memo: string | Uint8Array) { + let formattedMemo: Buffer; + if (typeof memo === 'string') { + formattedMemo = Buffer.from(memo, 'utf8'); + } else { + formattedMemo = Buffer.from(memo); + } + + return UTXOLib.script.compile([UTXOLib.opcodes.OP_RETURN, formattedMemo]); } async getFee(speed?: GasFeeSpeed): Promise { diff --git a/packages/litecoin/jest-setup-file.ts b/packages/litecoin/jest-setup-file.ts index d2c9bc6e..07990058 100644 --- a/packages/litecoin/jest-setup-file.ts +++ b/packages/litecoin/jest-setup-file.ts @@ -1 +1,3 @@ import 'reflect-metadata'; +import { TextEncoder, TextDecoder } from 'util'; +Object.assign(global, { TextDecoder, TextEncoder }); diff --git a/packages/litecoin/src/chain.provider.spec.ts b/packages/litecoin/src/chain.provider.spec.ts index 7c45d576..26526fcf 100644 --- a/packages/litecoin/src/chain.provider.spec.ts +++ b/packages/litecoin/src/chain.provider.spec.ts @@ -67,4 +67,34 @@ describe('chain.provider', () => { ) ).rejects.toThrow(); }); + + it('should create message with memo as string', async () => { + const memo = 'Test string memo'; + const msg = provider.createMsg({ + to: 'Lh5Xtrt8u2rSykk9gG8heb4xBYvKPhT3WY', + from: 'Lh5Xtrt8u2rSykk9gG8heb4xBYvKPhT3WY', + amount: 0.000001, + memo: memo, + }); + + expect(msg).toBeInstanceOf(ChainMsg); + expect(msg.toData().memo).toEqual(memo); + }); + + it('should create message with memo as Uint8Array', async () => { + const memo = 'Test string memo'; + const encodedMemo = new TextEncoder().encode(memo); + const msg = provider.createMsg({ + to: 'Lh5Xtrt8u2rSykk9gG8heb4xBYvKPhT3WY', + from: 'Lh5Xtrt8u2rSykk9gG8heb4xBYvKPhT3WY', + amount: 0.000001, + memo: encodedMemo, + }); + + expect(msg).toBeInstanceOf(ChainMsg); + expect(msg.toData().memo).toEqual(encodedMemo); + expect(new TextDecoder().decode(msg.toData().memo as Uint8Array)).toEqual( + memo + ); + }); }); diff --git a/packages/litecoin/src/msg.ts b/packages/litecoin/src/msg.ts index d94dbc62..139b7569 100644 --- a/packages/litecoin/src/msg.ts +++ b/packages/litecoin/src/msg.ts @@ -14,7 +14,7 @@ import type { LitecoinProvider } from './chain.provider'; export interface MsgBody { amount: NumberIsh; to: string; - memo?: string; + memo?: string | Uint8Array; from: string; gasLimit?: NumberIsh; // ByteFee decimals?: number; @@ -79,11 +79,15 @@ export class ChainMsg extends BaseMsg { }; } - public compileMemo(memo: string) { - return UTXOLib.script.compile([ - UTXOLib.opcodes.OP_RETURN, - Buffer.from(memo, 'utf8'), - ]); + public compileMemo(memo: string | Uint8Array) { + let formattedMemo: Buffer; + if (typeof memo === 'string') { + formattedMemo = Buffer.from(memo, 'utf8'); + } else { + formattedMemo = Buffer.from(memo); + } + + return UTXOLib.script.compile([UTXOLib.opcodes.OP_RETURN, formattedMemo]); } async getFee(speed?: GasFeeSpeed): Promise { diff --git a/packages/utxo/src/msg.ts b/packages/utxo/src/msg.ts index 9c4a8904..c9476782 100644 --- a/packages/utxo/src/msg.ts +++ b/packages/utxo/src/msg.ts @@ -14,7 +14,7 @@ import type { UtxoProvider } from './chain.provider'; export interface MsgBody { amount: NumberIsh; to: string; - memo?: string; + memo?: string | Uint8Array; from: string; gasLimit?: NumberIsh; // ByteFee decimals?: number; @@ -80,11 +80,15 @@ export class ChainMsg extends BaseMsg { }; } - public compileMemo(memo: string) { - return UTXOLib.script.compile([ - UTXOLib.opcodes.OP_RETURN, - Buffer.from(memo, 'utf8'), - ]); + public compileMemo(memo: string | Uint8Array) { + let formattedMemo: Buffer; + if (typeof memo === 'string') { + formattedMemo = Buffer.from(memo, 'utf8'); + } else { + formattedMemo = Buffer.from(memo); + } + + return UTXOLib.script.compile([UTXOLib.opcodes.OP_RETURN, formattedMemo]); } async getFee(speed?: GasFeeSpeed): Promise { From 40ae40ce2c079c09ebef82aef61e5d1ad907a8a9 Mon Sep 17 00:00:00 2001 From: cicd Date: Thu, 25 Apr 2024 13:34:06 +0000 Subject: [PATCH 072/132] Version packages --- .changeset/fast-insects-shave.md | 5 ----- packages/bitcoincash/CHANGELOG.md | 6 ++++++ packages/bitcoincash/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/fast-insects-shave.md diff --git a/.changeset/fast-insects-shave.md b/.changeset/fast-insects-shave.md deleted file mode 100644 index 09281f51..00000000 --- a/.changeset/fast-insects-shave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-bitcoincash': patch ---- - -feat: use @psf/bitcoincashjs-lib instead of @scure/btc-signer diff --git a/packages/bitcoincash/CHANGELOG.md b/packages/bitcoincash/CHANGELOG.md index 85c7560a..a232d949 100644 --- a/packages/bitcoincash/CHANGELOG.md +++ b/packages/bitcoincash/CHANGELOG.md @@ -1,5 +1,11 @@ # @xdefi-tech/chains-bitcoincash +## 2.0.11 + +### Patch Changes + +- 4b777a0: feat: use @psf/bitcoincashjs-lib instead of @scure/btc-signer + ## 2.0.10 ### Patch Changes diff --git a/packages/bitcoincash/package.json b/packages/bitcoincash/package.json index 4147ed81..dab7d8b0 100644 --- a/packages/bitcoincash/package.json +++ b/packages/bitcoincash/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-bitcoincash", - "version": "2.0.10", + "version": "2.0.11", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", From a3479caa16edbef8a37d5673151dbea0e3393810 Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Mon, 29 Apr 2024 13:02:10 +0300 Subject: [PATCH 073/132] fix: return tx hash string instead of object for bitcoin --- .changeset/famous-jobs-eat.md | 5 +++++ packages/bitcoin/src/chain.provider.ts | 7 +++---- 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 .changeset/famous-jobs-eat.md diff --git a/.changeset/famous-jobs-eat.md b/.changeset/famous-jobs-eat.md new file mode 100644 index 00000000..45424235 --- /dev/null +++ b/.changeset/famous-jobs-eat.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-bitcoin': patch +--- + +Fix: return transaction hash string instead of object diff --git a/packages/bitcoin/src/chain.provider.ts b/packages/bitcoin/src/chain.provider.ts index 2dc0952f..9f134304 100644 --- a/packages/bitcoin/src/chain.provider.ts +++ b/packages/bitcoin/src/chain.provider.ts @@ -37,10 +37,9 @@ export class BitcoinProvider extends UtxoProvider { throw new Error(`Message ${JSON.stringify(message)} is not signed`); } - const { data: txid } = await this.rest.post( - '/transactions', - signedTransaction - ); + const { + data: { txid }, + } = await this.rest.post('/transactions', signedTransaction); result.push(Transaction.fromData({ hash: txid })); } From acff7ade4865688c899d63b66371696ad02cdc2c Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Mon, 29 Apr 2024 13:42:14 +0300 Subject: [PATCH 074/132] feat: add description to compileMemo method --- packages/bitcoin/src/msg.ts | 6 ++++++ packages/bitcoincash/src/msg.ts | 6 ++++++ packages/dogecoin/src/msg.ts | 6 ++++++ packages/litecoin/src/msg.ts | 6 ++++++ packages/utxo/src/msg.ts | 6 ++++++ 5 files changed, 30 insertions(+) diff --git a/packages/bitcoin/src/msg.ts b/packages/bitcoin/src/msg.ts index add74a8c..54ac97e6 100644 --- a/packages/bitcoin/src/msg.ts +++ b/packages/bitcoin/src/msg.ts @@ -124,6 +124,12 @@ export class ChainMsg extends BaseMsg { }; } + /** + * Current method in used to compile a bitcoinjs-lib script. Bitcoin scripts are used to define the conditions + * under which funds can be spent in a Bitcoin transaction. Mark a transaction output as unspendable + * @param {string | Uint8Array} memo + * @returns {Buffer} OP_RETURN compiled script + */ public compileMemo(memo: string | Uint8Array) { let formattedMemo: Buffer; if (typeof memo === 'string') { diff --git a/packages/bitcoincash/src/msg.ts b/packages/bitcoincash/src/msg.ts index 56f2d78d..c038fb22 100644 --- a/packages/bitcoincash/src/msg.ts +++ b/packages/bitcoincash/src/msg.ts @@ -79,6 +79,12 @@ export class ChainMsg extends BaseMsg { }; } + /** + * Current method in used to compile a bitcoinjs-lib script. Bitcoin scripts are used to define the conditions + * under which funds can be spent in a Bitcoin transaction. Mark a transaction output as unspendable + * @param {string | Uint8Array} memo + * @returns {Buffer} OP_RETURN compiled script + */ public compileMemo(memo: string | Uint8Array) { let formattedMemo: Buffer; if (typeof memo === 'string') { diff --git a/packages/dogecoin/src/msg.ts b/packages/dogecoin/src/msg.ts index 960a47c4..d6665a84 100644 --- a/packages/dogecoin/src/msg.ts +++ b/packages/dogecoin/src/msg.ts @@ -84,6 +84,12 @@ export class ChainMsg extends BaseMsg { }; } + /** + * Current method in used to compile a bitcoinjs-lib script. Bitcoin scripts are used to define the conditions + * under which funds can be spent in a Bitcoin transaction. Mark a transaction output as unspendable + * @param {string | Uint8Array} memo + * @returns {Buffer} OP_RETURN compiled script + */ public compileMemo(memo: string | Uint8Array) { let formattedMemo: Buffer; if (typeof memo === 'string') { diff --git a/packages/litecoin/src/msg.ts b/packages/litecoin/src/msg.ts index 139b7569..021dccbd 100644 --- a/packages/litecoin/src/msg.ts +++ b/packages/litecoin/src/msg.ts @@ -79,6 +79,12 @@ export class ChainMsg extends BaseMsg { }; } + /** + * Current method in used to compile a bitcoinjs-lib script. Bitcoin scripts are used to define the conditions + * under which funds can be spent in a Bitcoin transaction. Mark a transaction output as unspendable + * @param {string | Uint8Array} memo + * @returns {Buffer} OP_RETURN compiled script + */ public compileMemo(memo: string | Uint8Array) { let formattedMemo: Buffer; if (typeof memo === 'string') { diff --git a/packages/utxo/src/msg.ts b/packages/utxo/src/msg.ts index c9476782..ca90b355 100644 --- a/packages/utxo/src/msg.ts +++ b/packages/utxo/src/msg.ts @@ -80,6 +80,12 @@ export class ChainMsg extends BaseMsg { }; } + /** + * Current method in used to compile a bitcoinjs-lib script. Bitcoin scripts are used to define the conditions + * under which funds can be spent in a Bitcoin transaction. Mark a transaction output as unspendable + * @param {string | Uint8Array} memo + * @returns {Buffer} OP_RETURN compiled script + */ public compileMemo(memo: string | Uint8Array) { let formattedMemo: Buffer; if (typeof memo === 'string') { From 7050d5c4108f4c1e3e05e6be2b9e71330c30e0a7 Mon Sep 17 00:00:00 2001 From: cicd Date: Mon, 29 Apr 2024 10:44:00 +0000 Subject: [PATCH 075/132] Version packages --- .changeset/famous-jobs-eat.md | 5 ----- packages/bitcoin/CHANGELOG.md | 6 ++++++ packages/bitcoin/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/famous-jobs-eat.md diff --git a/.changeset/famous-jobs-eat.md b/.changeset/famous-jobs-eat.md deleted file mode 100644 index 45424235..00000000 --- a/.changeset/famous-jobs-eat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-bitcoin': patch ---- - -Fix: return transaction hash string instead of object diff --git a/packages/bitcoin/CHANGELOG.md b/packages/bitcoin/CHANGELOG.md index e7a337a9..d38cb238 100644 --- a/packages/bitcoin/CHANGELOG.md +++ b/packages/bitcoin/CHANGELOG.md @@ -1,5 +1,11 @@ # @xdefi-tech/chains-bitcoin +## 2.0.9 + +### Patch Changes + +- a3479ca: Fix: return transaction hash string instead of object + ## 2.0.8 ### Patch Changes diff --git a/packages/bitcoin/package.json b/packages/bitcoin/package.json index 060db092..28672c1a 100644 --- a/packages/bitcoin/package.json +++ b/packages/bitcoin/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-bitcoin", - "version": "2.0.8", + "version": "2.0.9", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", From 829d3865a14e6515e21349ab2a7c7dab9f21ab12 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 30 Apr 2024 00:46:21 +0300 Subject: [PATCH 076/132] chore: IndexerDataSource for bitcoin implements scanUTXOs and broadcast (wip) --- packages/bitcoin/src/chain.provider.ts | 28 ++++---- .../datasource/indexer/indexer.data-source.ts | 53 +++++++++++++- .../src/datasource/indexer/queries/index.ts | 69 +++++++++++++++++++ .../data-provider/utxo/utxo.data-provider.ts | 5 ++ 4 files changed, 138 insertions(+), 17 deletions(-) diff --git a/packages/bitcoin/src/chain.provider.ts b/packages/bitcoin/src/chain.provider.ts index 9f134304..93d6fa0e 100644 --- a/packages/bitcoin/src/chain.provider.ts +++ b/packages/bitcoin/src/chain.provider.ts @@ -28,22 +28,22 @@ export class BitcoinProvider extends UtxoProvider { return new ChainMsg(data, this, encoding); } - async broadcast(messages: ChainMsg[]): Promise { - const result: Transaction[] = []; - for await (const message of messages) { - const { signedTransaction } = message; + // async broadcast(messages: ChainMsg[]): Promise { + // const result: Transaction[] = []; + // for await (const message of messages) { + // const { signedTransaction } = message; - if (!message.hasSignature) { - throw new Error(`Message ${JSON.stringify(message)} is not signed`); - } + // if (!message.hasSignature) { + // throw new Error(`Message ${JSON.stringify(message)} is not signed`); + // } - const { - data: { txid }, - } = await this.rest.post('/transactions', signedTransaction); + // const { + // data: { txid }, + // } = await this.rest.post('/transactions', signedTransaction); - result.push(Transaction.fromData({ hash: txid })); - } + // result.push(Transaction.fromData({ hash: txid })); + // } - return result; - } + // return result; + // } } diff --git a/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts b/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts index 4dca4c5c..adc06768 100644 --- a/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts +++ b/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts @@ -11,19 +11,66 @@ import { FeeData, DefaultFeeOptions, } from '@xdefi-tech/chains-core'; -import { UTXOManifest } from '@xdefi-tech/chains-utxo'; +import Bitcoin from 'bitcoinjs-lib'; +import { + UTXO, + UTXODataProvider, + UTXOManifest, + UTXOTransaction, +} from '@xdefi-tech/chains-utxo'; import { utils } from 'ethers'; import { Observable } from 'rxjs'; import { ChainMsg } from '../../msg'; -import { getBalance, getTransactions, getFees, getNFTBalance } from './queries'; +import { + getBalance, + getTransactions, + getFees, + getNFTBalance, + broadcast, + scanUTXOs, +} from './queries'; @Injectable() -export class IndexerDataSource extends DataSource { +export class IndexerDataSource extends DataSource implements UTXODataProvider { constructor(manifest: UTXOManifest) { super(manifest); } + async broadcast(messages: ChainMsg[]): Promise { + const result: Transaction[] = []; + for await (const message of messages) { + const { signedTransaction } = message; + + if (!message.hasSignature || !signedTransaction) { + throw new Error(`Message ${JSON.stringify(message)} is not signed`); + } + + const txHash = await broadcast(signedTransaction); + + result.push(Transaction.fromData({ hash: txHash })); + } + + return result; + } + async scanUTXOs(address: string): Promise { + const utxos = await scanUTXOs(address); + return utxos.map((utxo) => { + const tx = Bitcoin.Transaction.fromHex(utxo.oTxHex); + const utxoMapped: UTXO = { + hash: utxo.oTxHash, + index: utxo.oIndex, + value: utxo.value.value, + txHex: utxo.oTxHex, + witnessUtxo: tx.outs[utxo.oIndex], + }; + return utxoMapped; + }); + } + + getTransaction(txid: string): Promise { + throw new Error('Method not implemented.'); + } async getNFTBalance(address: string) { return getNFTBalance(address); diff --git a/packages/bitcoin/src/datasource/indexer/queries/index.ts b/packages/bitcoin/src/datasource/indexer/queries/index.ts index f6fb6cb2..c642e36c 100644 --- a/packages/bitcoin/src/datasource/indexer/queries/index.ts +++ b/packages/bitcoin/src/datasource/indexer/queries/index.ts @@ -1,4 +1,73 @@ +import { gql } from 'graphql-tag'; +import { gqlClient } from '@xdefi-tech/chains-core'; export * from './transactions.query'; export * from './balances.query'; export * from './fees.query'; export * from './nfts.query'; + +export const scanUTXOs = async ( + address: string, + page = 0 +): Promise< + Array<{ + oTxHash: string; + oIndex: number; + value: { + value: number; + }; + oTxHex: string; + }> +> => { + const response = await gqlClient.query({ + query: gql` + query scanUTXOs($address: String!, $page: Int!) { + bitcoin { + unspentTxOutputsV5(address: $address, page: $page) { + oTxHash + oIndex + value { + value + } + oTxHex + } + } + } + `, + variables: { + address, + page, + }, + }); + + return response.data.bitcoin.unspentTxOutputsV5 as Array<{ + oTxHash: string; + oIndex: number; + value: { + value: number; + }; + oTxHex: string; + }>; +}; + +export const getTransaction = async (txid: string): Promise => { + throw new Error('Method not implemented.'); +}; + +export const broadcastQuery = gql` + query broadcast($rawHex: String!) { + bitcoin { + broadcastTransaction(rawHex: $rawHex) + } + } +`; + +export const broadcast = async (rawHex: string): Promise => { + const response = await gqlClient.query({ + query: broadcastQuery, + variables: { + rawHex, + }, + }); + + return response.data.bitcoin.broadcastTransaction as string; +}; diff --git a/packages/utxo/src/data-provider/utxo/utxo.data-provider.ts b/packages/utxo/src/data-provider/utxo/utxo.data-provider.ts index 9de0444d..7ebc4a05 100644 --- a/packages/utxo/src/data-provider/utxo/utxo.data-provider.ts +++ b/packages/utxo/src/data-provider/utxo/utxo.data-provider.ts @@ -1,3 +1,6 @@ +import { Transaction } from '@xdefi-tech/chains-core'; +import { ChainMsg } from '@xdefi-tech/chains-utxo'; + export declare type Witness = { value: number; script: Buffer; @@ -47,4 +50,6 @@ export abstract class UTXODataProvider { abstract scanUTXOs(address: string): Promise; abstract getTransaction(txid: string): Promise; + + abstract broadcast(messages: ChainMsg[]): Promise; } From 4c4fc1c6686dc1e71733b9551b4401f3d56b7d0e Mon Sep 17 00:00:00 2001 From: David Date: Tue, 30 Apr 2024 01:00:24 +0300 Subject: [PATCH 077/132] chore: IndexerDataSource for bitcoin implements scanUTXOs and broadcast (wip2) --- .../blockchair/blockchair.data-provider.ts | 20 ++++++++++++------- .../haskoin/haskoin.data-provider.ts | 10 +++++++++- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/packages/utxo/src/data-provider/blockchair/blockchair.data-provider.ts b/packages/utxo/src/data-provider/blockchair/blockchair.data-provider.ts index 3f62abb1..56075534 100644 --- a/packages/utxo/src/data-provider/blockchair/blockchair.data-provider.ts +++ b/packages/utxo/src/data-provider/blockchair/blockchair.data-provider.ts @@ -1,4 +1,5 @@ -import { Injectable } from '@xdefi-tech/chains-core'; +import { Injectable, Transaction } from '@xdefi-tech/chains-core'; +import { ChainMsg } from '@xdefi-tech/chains-utxo'; import axios, { Axios } from 'axios'; import * as UTXOLib from 'bitcoinjs-lib'; @@ -198,12 +199,17 @@ export class BlockchairDataProvider implements UTXODataProvider { return response.data[txId].raw_transaction; } - async broadcast(rawTx: string) { - // https://api.blockchair.com/{:btc_chain}/push/transaction?data={:raw_transaction} - const { - data: { data }, - } = await this.api.post(`/push/transaction?data=${rawTx}`); - return data.transaction_hash; + async broadcast(messages: ChainMsg[]): Promise { + const results: Transaction[] = []; + for await (const message of messages) { + const rawTx = message.signedTransaction; + // https://api.blockchair.com/{:btc_chain}/push/transaction?data={:raw_transaction} + const { + data: { data }, + } = await this.api.post(`/push/transaction?data=${rawTx}`); + results.push(Transaction.fromData({ hash: data.transaction_hash })); + } + return results; } async scanUTXOs(address: string) { diff --git a/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts b/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts index 65c43daf..ff6d43f9 100644 --- a/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts +++ b/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts @@ -1,4 +1,9 @@ -import { Injectable } from '@xdefi-tech/chains-core'; +import { + Injectable, + Transaction, + TransactionData, +} from '@xdefi-tech/chains-core'; +import { ChainMsg } from '@xdefi-tech/chains-utxo'; import axios, { Axios } from 'axios'; import * as UTXOLib from 'bitcoinjs-lib'; @@ -70,6 +75,9 @@ export class HaskoinDataProvider implements UTXODataProvider { constructor(baseURL: string) { this.api = axios.create({ baseURL }); } + broadcast(messages: ChainMsg[]): Promise[]> { + throw new Error('Method not implemented.'); + } async getAccount(address: string): Promise { const { data: result } = await this.api.get(`/address/${address}/balance`); From 0819de6a3ab84c0894cfaa139a3ac19ab320aa86 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 30 Apr 2024 10:28:36 +0300 Subject: [PATCH 078/132] chore: IndexerDataSource for bitcoin implements scanUTXOs and broadcast (wip3) --- packages/bitcoin/src/chain.provider.ts | 2 +- packages/utxo/src/chain.provider.ts | 26 +------------------------- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/packages/bitcoin/src/chain.provider.ts b/packages/bitcoin/src/chain.provider.ts index 93d6fa0e..c83a1030 100644 --- a/packages/bitcoin/src/chain.provider.ts +++ b/packages/bitcoin/src/chain.provider.ts @@ -2,7 +2,7 @@ import { Chain, ChainDecorator, MsgEncoding, - Transaction, + // Transaction, } from '@xdefi-tech/chains-core'; import { UtxoProvider } from '@xdefi-tech/chains-utxo'; diff --git a/packages/utxo/src/chain.provider.ts b/packages/utxo/src/chain.provider.ts index 4d47eb8a..0009d4a3 100644 --- a/packages/utxo/src/chain.provider.ts +++ b/packages/utxo/src/chain.provider.ts @@ -99,31 +99,7 @@ export class UtxoProvider extends Chain.Provider { } async broadcast(messages: ChainMsg[]): Promise { - const result: Transaction[] = []; - for await (const message of messages) { - const { signedTransaction } = message; - - if (!message.hasSignature) { - throw new Error(`Message ${JSON.stringify(message)} is not signed`); - } - - if (this.manifest.dataProviderType === 'blockchair') { - const dataSource: BlockchairDataProvider = this - .utxoDataSource as BlockchairDataProvider; - const hash = await dataSource.broadcast(signedTransaction as string); - - result.push(Transaction.fromData({ hash: hash })); - } else { - const { data: txid } = await this.rest.post( - '/api/tx', - signedTransaction - ); - - result.push(Transaction.fromData({ hash: txid })); - } - } - - return result; + return this.utxoDataSource.broadcast(messages); } async getTransaction(txHash: string): Promise { From 16a18a7e6792d41d58d9fdbb71d9c1faebda661e Mon Sep 17 00:00:00 2001 From: David Date: Tue, 30 Apr 2024 10:47:46 +0300 Subject: [PATCH 079/132] chore: IndexerDataSource for bitcoin implements scanUTXOs and broadcast (wip4) --- packages/utxo/src/data-provider/utxo/utxo.data-provider.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/utxo/src/data-provider/utxo/utxo.data-provider.ts b/packages/utxo/src/data-provider/utxo/utxo.data-provider.ts index 7ebc4a05..525ce60e 100644 --- a/packages/utxo/src/data-provider/utxo/utxo.data-provider.ts +++ b/packages/utxo/src/data-provider/utxo/utxo.data-provider.ts @@ -1,5 +1,6 @@ import { Transaction } from '@xdefi-tech/chains-core'; -import { ChainMsg } from '@xdefi-tech/chains-utxo'; + +import { ChainMsg } from '../../msg'; export declare type Witness = { value: number; From b7d4f4eb82d44ec3fa5ef5c22aba8a1703ff158f Mon Sep 17 00:00:00 2001 From: David Date: Tue, 30 Apr 2024 10:57:36 +0300 Subject: [PATCH 080/132] chore: IndexerDataSource for bitcoin implements scanUTXOs and broadcast (wip5) --- .../src/data-provider/blockchair/blockchair.data-provider.ts | 2 +- .../utxo/src/data-provider/haskoin/haskoin.data-provider.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/utxo/src/data-provider/blockchair/blockchair.data-provider.ts b/packages/utxo/src/data-provider/blockchair/blockchair.data-provider.ts index 56075534..b58008c8 100644 --- a/packages/utxo/src/data-provider/blockchair/blockchair.data-provider.ts +++ b/packages/utxo/src/data-provider/blockchair/blockchair.data-provider.ts @@ -1,8 +1,8 @@ import { Injectable, Transaction } from '@xdefi-tech/chains-core'; -import { ChainMsg } from '@xdefi-tech/chains-utxo'; import axios, { Axios } from 'axios'; import * as UTXOLib from 'bitcoinjs-lib'; +import { ChainMsg } from '../../msg'; import { UTXODataProvider, UTXOTransaction, diff --git a/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts b/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts index ff6d43f9..328562e6 100644 --- a/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts +++ b/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts @@ -3,10 +3,10 @@ import { Transaction, TransactionData, } from '@xdefi-tech/chains-core'; -import { ChainMsg } from '@xdefi-tech/chains-utxo'; import axios, { Axios } from 'axios'; import * as UTXOLib from 'bitcoinjs-lib'; +import { ChainMsg } from '../../msg'; import { UTXODataProvider, UTXOTransaction, From 62105c4fb3b8c80fc1da7d143c54e2815048b3c7 Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Tue, 30 Apr 2024 13:50:09 +0300 Subject: [PATCH 081/132] feat: add description to compileMemo method --- .changeset/smart-windows-bake.md | 14 +++++ README.md | 97 +++++++++++++++++++++++++------- packages/binance/README.md | 29 ++++++++++ packages/bitcoin/README.md | 35 ++++++++++++ packages/bitcoincash/README.md | 35 ++++++++++++ packages/cosmos/README.md | 38 +++++++++++++ packages/dogecoin/README.md | 35 ++++++++++++ packages/evm/README.md | 70 +++++++++++++++++++++++ packages/litecoin/README.md | 35 ++++++++++++ packages/solana/README.md | 30 ++++++++++ packages/thor/README.md | 36 ++++++++++++ packages/tron/README.md | 35 ++++++++++++ 12 files changed, 469 insertions(+), 20 deletions(-) create mode 100644 .changeset/smart-windows-bake.md create mode 100644 packages/binance/README.md create mode 100644 packages/bitcoin/README.md create mode 100644 packages/bitcoincash/README.md create mode 100644 packages/cosmos/README.md create mode 100644 packages/dogecoin/README.md create mode 100644 packages/evm/README.md create mode 100644 packages/litecoin/README.md create mode 100644 packages/solana/README.md create mode 100644 packages/thor/README.md create mode 100644 packages/tron/README.md diff --git a/.changeset/smart-windows-bake.md b/.changeset/smart-windows-bake.md new file mode 100644 index 00000000..a096bd84 --- /dev/null +++ b/.changeset/smart-windows-bake.md @@ -0,0 +1,14 @@ +--- +'@xdefi-tech/chains-bitcoincash': patch +'@xdefi-tech/chains-dogecoin': patch +'@xdefi-tech/chains-litecoin': patch +'@xdefi-tech/chains-binance': patch +'@xdefi-tech/chains-bitcoin': patch +'@xdefi-tech/chains-cosmos': patch +'@xdefi-tech/chains-solana': patch +'@xdefi-tech/chains-thor': patch +'@xdefi-tech/chains-tron': patch +'@xdefi-tech/chains-evm': patch +--- + +Feat: update README.md diff --git a/README.md b/README.md index b37ce58e..d10a0d1b 100644 --- a/README.md +++ b/README.md @@ -15,26 +15,45 @@ Standardized RPC Interface: The library offers a consistent RPC interface for fe ## Supported Chains This library currently supports the following blockchain networks: - -- Bitcoin -- Bitcoin Cash -- Litecoin -- Dogecoin -- Ethereum -- BNB Smart Chain -- Avalanche -- Polygon -- Optimism -- Arbitrum -- Fantom -- Other EVM-compatible chains -- Cosmos -- Osmosis -- Juno -- Other IBC-Compatible Chains -- THORChain -- BNB Beacon Chain -- Solana +// example for fallback data source +// example with custom provider + + +| Chain | Provider | Datasources | Signers | Custom chain | +|-----------------| ------------------------------------------------------------------------------- | -------------- | -------------------------------------- | ------------ | +| Bitcoin | [Bitcoin](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-bitcoin) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | No | +| Ethereum | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| BNB Smart Chain | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Polygon | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Avalanche | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Fantom | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Arbitrum | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Aurora | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Canto EVM | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Optimism | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Klaytn | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Cronos | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Binance | [Binance](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-binance) | Indexer | SeedPhrase, PrivateKey, Ledger, Tresor | No | +| BitcoinCash | [BitcoinCash](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-bitcoincash) | Indexer | SeedPhrase, PrivateKey, Ledger, Tresor | No | +| Cosmos Hub | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Osmosis | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Axelar | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Juno | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Crescent | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Kava | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Stargaze | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Akash | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Cronos | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Kujira | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Stride | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Mars | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Terra | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | +| Dogecoin | [Dogecoin](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-dogecoin) | Indexer | SeedPhrase, PrivateKey, Ledger, Tresor | No | +| Litecoin | [Litecoin](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-litecoin) | Indexer | SeedPhrase, PrivateKey, Ledger, Tresor | No | +| Solana | [Solana](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-solana) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger | No | +| ThorChain | [ThorChain](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-thor) | Indexer, Chain | SeedPhrase, Ledger | No | +| MayaChain | [ThorChain](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-thor) | Indexer, Chain | SeedPhrase, Ledger | No | +| Tron | [Tron](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-tron) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger | No | ## Installation @@ -46,6 +65,20 @@ npm install @xdefi-tech/chains yarn add @xdefi-tech/chains ``` +## Manifest +Each provider may have different manifests, but they share common fields. For more details, please refer to the README of the respective provider. + +- `name`: The name of the blockchain network. Uses only for display name to user +- `description`: A brief description or additional information about the blockchain network. +- `rpcURL`: The URL endpoint for the Remote Procedure Call (RPC) interface of the blockchain network. +- `chainSymbol`: The symbol representing the blockchain network. +- `blockExplorerURL`: The URL of a block explorer service specific to the blockchain. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. +- `chainId`: The unique identifier of the blockchain network. +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `decimals`: The number of decimal places used by the native currency of the blockchain network. +- `feeGasStep`: An object containing gas step values for different fee levels (high, medium, low) used in transactions. + + ## Usage Here's a basic example of how to use this library in your TypeScript application: @@ -108,6 +141,30 @@ Now that the transaction is signed, you can broadcast it to the Bitcoin network await provider.broadcast([message]); ``` +## Fallback datasource +- If an error occurs while fetching data from the primary data source, the FallbackDataSource will automatically switch to one of the alternative data sources configured in the constructor. +- The number of retry attempts and the order in which the alternative data sources are used can be customized based on the requirements and preferences of the application. + +```typescript +import { FallbackDataSource } from '@xdefi-tech/chains-core'; +import { EvmProvider, EVM_MANIFESTS } from '@xdefi-tech/chains-evm'; + +const provider = new EvmProvider( + new FallbackDataSource( + EVM_MANIFEST.ethereum, + { + attempts: 5, + }, + new EvmProvider.dataSourceList.IndexerDataSource(EVM_MANIFEST.ethereum), + new EvmProvider.dataSourceList.ChainDataSource(EVM_MANIFEST.ethereum), + ) +); + +// The same as any other provider +const response = await provider.getBalance('0x1234567890123456789012345678901234567890'); +const data = await response.getData(); +``` + ## Retrieving a Transaction ### 1. Get Transaction Hash diff --git a/packages/binance/README.md b/packages/binance/README.md new file mode 100644 index 00000000..71c2f9aa --- /dev/null +++ b/packages/binance/README.md @@ -0,0 +1,29 @@ +## Manifest + +```typescript +const binanceManifest = { + name: 'Binance', + description: '', + rpcURL: 'https://bbc-dex.xdefiservices.com', + chainSymbol: 'BNB', + blockExplorerURL: 'https://explorer.bnbchain.org', + chainId: 'Binance-Chain-Tigris', + chain: 'binance', + decimals: 8, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, +}; +``` + +- `name`: The name of the blockchain network, in this case, Binance. Uses only for display name to user +- `description`: A brief description or additional information about the blockchain network. +- `rpcURL`: The URL of the RPC (Remote Procedure Call) endpoint used to interact with the Binance blockchain network. +- `chainSymbol`: The symbol or ticker representing the Binance blockchain network, which is "BNB" in this case. +- `blockExplorerURL`: The URL of the block explorer for the Binance blockchain network. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. +- `chainId`: The unique identifier for the Binance blockchain network, often referred to as the chain ID. In this example, it is "Binance-Chain-Tigris". +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `decimals`: The number of decimal places used for representing token amounts on the Binance blockchain. In this case, it is set to 8. +- `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Binance blockchain network. In this example, all fee levels are set to 1. diff --git a/packages/bitcoin/README.md b/packages/bitcoin/README.md new file mode 100644 index 00000000..f920cf96 --- /dev/null +++ b/packages/bitcoin/README.md @@ -0,0 +1,35 @@ +## Manifest + +```typescript +const bitcoinManifest = { + name: 'Bitcoin', + description: '', + rpcURL: 'https://btc-haskoin.xdefiservices.com', + chainSymbol: 'BTC', + blockExplorerURL: 'https://blockchair.com/bitcoin', + dataProviderType: 'haskoin', + dataProviderURL: 'https://api.haskoin.com/btc', + chainId: 'bitcoin', + chain: 'bitcoin', + decimals: 8, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, +}; +``` + +- `name`: The name of the blockchain network, in this case, Bitcoin. Uses only for display name to user +- `description`: A brief description or additional information about the blockchain network. +- `rpcURL`: The URL of the RPC (Remote Procedure Call) endpoint used to interact with the Bitcoin blockchain network. +- `chainSymbol`: The symbol or ticker representing the Bitcoin blockchain network, which is "BTC". +- `blockExplorerURL`: The URL of the block explorer for the Bitcoin blockchain network. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. +- `chainId`: The unique identifier for the Bitcoin blockchain network, often referred to as the chain ID. In this example, it is "bitcoin". +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `decimals`: The number of decimal places used for representing token amounts on the Bitcoin blockchain. In this case, it is set to 8. +- `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Bitcoin blockchain network. In this example, all fee levels are set to 1. + +UTXO Specifec fields: +- `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair +- `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/bitcoincash/README.md b/packages/bitcoincash/README.md new file mode 100644 index 00000000..fd918baa --- /dev/null +++ b/packages/bitcoincash/README.md @@ -0,0 +1,35 @@ +## Manifest + +```typescript +const bitcoincashManifest = { + name: 'Bitcoin Cash', + description: '', + rpcURL: 'https://bch-mainnet.xdefiservices.com', + chainSymbol: 'BCH', + blockExplorerURL: 'https://blockchair.com/bitcoin-cash', + dataProviderType: 'haskoin', + dataProviderURL: 'https://api.haskoin.com/bch', + chainId: 'bitcoincash', + chain: 'bitcoincash', + decimals: 8, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, +}; +``` + +- `name`: The name of the blockchain network, in this case, Bitcoin Cash. Uses only for display name to user +- `description`: A brief description or additional information about the blockchain network. +- `rpcURL`: The URL of the RPC (Remote Procedure Call) endpoint used to interact with the Bitcoin Cash blockchain network. +- `chainSymbol`: The symbol or ticker representing the Bitcoin Cash blockchain network, which is "BCH". +- `blockExplorerURL`: The URL of the block explorer for the Bitcoin Cash blockchain network. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. +- `chainId`: The unique identifier for the Bitcoin Cash blockchain network, often referred to as the chain ID. In this example, it is "bitcoincash". +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `decimals`: The number of decimal places used for representing token amounts on the Bitcoin Cash blockchain. In this case, it is set to 8. +- `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Bitcoin Cash blockchain network. In this example, all fee levels are set to 1. + +UTXO Specifec fields: +- `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair +- `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/cosmos/README.md b/packages/cosmos/README.md new file mode 100644 index 00000000..126f6364 --- /dev/null +++ b/packages/cosmos/README.md @@ -0,0 +1,38 @@ +## Manifest + +```typescript +const cosmosManifest = { + name: 'Cosmos Hub', + description: '', + rpcURL: 'https://rpc-proxy.xdefi.services/cosmos/rpc/mainnet', + lcdURL: 'https://rpc-proxy.xdefi.services/cosmos/lcd/mainnet', + chainSymbol: 'ATOM', + blockExplorerURL: 'https://www.mintscan.io/cosmos/account', + chainId: 'cosmoshub-4', + chain: 'cosmos', + denom: 'uatom', + decimals: 6, + prefix: 'cosmos', + feeGasStep: { + high: 0.003, + medium: 0.0025, + low: 0.001, + }, +}; +``` + +- `name`: The name of the blockchain network, in this case, Cosmos Hub. Uses only for display name to user +- `description`: A brief description or additional information about the blockchain network. +- `rpcURL`: The URL of the remote procedure call (RPC) server used to interact with the Cosmos blockchain. +- `chainSymbol`: The symbol or ticker representing the native cryptocurrency of the Cosmos Hub blockchain, which is "ATOM". +- `blockExplorerURL`: The URL of the block explorer for the Cosmos blockchain network. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. +- `chainId`: The unique identifier for the Cosmos Hub blockchain. In this example, it's set to "cosmoshub-4". +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `decimals`: The number of decimal places supported by the native currency of the Cosmos Hub blockchain. In this example, it's set to 6. +- `feeGasStep`: An object containing the gas fee steps for transactions on the Cosmos Hub blockchain. It includes three levels: high, medium, and low, each with a different gas fee value specified in "ATOM". + +Cosmos specific fields: +- `lcdURL`: The URL of the LCD (Light Client Daemon) server used to query information from the Cosmos Hub blockchain. +- `denom`: The denomination or name of the native currency of the Cosmos Hub blockchain, which is "uatom". +- `prefix`: A prefix used in some contexts or operations related to the Cosmos Hub blockchain, which is "cosmos". + diff --git a/packages/dogecoin/README.md b/packages/dogecoin/README.md new file mode 100644 index 00000000..0e83edc4 --- /dev/null +++ b/packages/dogecoin/README.md @@ -0,0 +1,35 @@ +## Manifest + +```typescript +const dogecoinManifest = { + name: 'Dogecoin', + description: '', + rpcURL: 'https://blockstream.info', + chainSymbol: 'DOGE', + blockExplorerURL: 'https://blockchair.com/dogecoin', + dataProviderType: 'blockchair', + dataProviderURL: 'https://rpc-proxy.xdefi.services/blockchair/dogecoin', + chainId: 'dogecoin', + chain: 'dogecoin', + decimals: 8, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, +}; +``` + +- `name`: The name of the blockchain network, in this case, Dogecoin. Uses only for display name to user +- `description`: A brief description or additional information about the blockchain network. +- `rpcURL`: The URL of the RPC (Remote Procedure Call) endpoint used to interact with the Dogecoin blockchain network. +- `chainSymbol`: The symbol or ticker representing the Dogecoin blockchain network, which is "DOGE". +- `blockExplorerURL`: The URL of the block explorer for the Dogecoin blockchain network. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. +- `chainId`: The unique identifier for the Dogecoin blockchain network, often referred to as the chain ID. In this example, it is "dogecoin". +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `decimals`: The number of decimal places used for representing token amounts on the Dogecoin blockchain. In this case, it is set to 8. +- `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Dogecoin blockchain network. In this example, all fee levels are set to 1. + +UTXO Specifec fields: +- `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair +- `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/evm/README.md b/packages/evm/README.md new file mode 100644 index 00000000..3b7b7cca --- /dev/null +++ b/packages/evm/README.md @@ -0,0 +1,70 @@ +## Manifest + +```typescript +const ethereumManifest = { + name: 'Ethereum', + description: '', + rpcURL: 'https://ethereum-mainnet.xdefiservices.com', + chainSymbol: 'ETH', + blockExplorerURL: 'https://etherscan.io', + chainId: '1', + chain: 'ethereum', + decimals: 18, + feeGasStep: { + high: 1.5, + medium: 1.25, + low: 1, + }, + multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', + }; +``` + +- `name`: The name of the blockchain network, in this case, Ethereum. Uses only for display name to user +- `description`: A brief description or additional information about the blockchain network. +- `rpcURL`: The URL of the JSON-RPC endpoint for interacting with the blockchain. It provides access to various blockchain-related functionalities such as querying information, sending transactions, and executing smart contracts. +- `chainSymbol`: The symbol used to represent the native cryptocurrency of the chain, which is Ether (ETH) in this case. +- `blockExplorerURL`: The URL of a block explorer service specific to the Ethereum blockchain. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. +- `chainId`: The unique identifier for the chain. It distinguishes Ethereum from other blockchains and is used in various contexts such as transaction signing and network communication. +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `decimals`: The number of decimal places used to represent the smallest unit of native token. e.g. Ether (ETH) on the Ethereum blockchain. Ethereum uses 18 decimals, meaning that 1 Ether is represented by 10^18 Wei. +- `feeGasStep`: An object containing gas fee steps for different transaction priority levels. Gas is the unit used to measure the computational work done by transactions on the network. The values provided represent multipliers applied to the base gas fee for each priority level (high, medium, low). + +EVM specific fields: +- `multicallContractAddress`: The address of a smart contract known as Multicall, which allows batching multiple Ethereum function calls into a single transaction. This can help reduce the number of individual transactions needed to fetch data from the Ethereum blockchain, improving efficiency and reducing costs. + +## Custom chain + +To implement a custom chain, you need to pass a custom manifest to ChainDatasource, and the data will be retrieved directly from the blockchain. ChainDatasource is mandatory because IndexerDatasource does not have custom chain-specific methods. + +#### Example with Goerli testnet chain: + +The main difference between supported chains and custom chains: +- Supported chains can use IndexerDataSource; +- You have to provide your own manifest for custom chains. + + +```typescript +import { EvmProvider } from '@xdefi-tech/chains-evm'; + +const provider = new EvmProvider( + new EvmProvider.dataSourceList.dataSourceList({ + name: 'Goerli', + description: '', + rpcURL: 'https://eth-goerli.public.blastapi.io', + chainSymbol: 'ETH', + blockExplorerURL: 'https://goerli.etherscan.io', + chainId: '5', + chain: 'goerli', + decimals: 18, + feeGasStep: { + high: 1.5, + medium: 1.25, + low: 1, + } + }) +); + +// The same as any other provider +const response = await provider.getBalance('0x1234567890123456789012345678901234567890'); +const data = await response.getData(); +``` \ No newline at end of file diff --git a/packages/litecoin/README.md b/packages/litecoin/README.md new file mode 100644 index 00000000..c904df5c --- /dev/null +++ b/packages/litecoin/README.md @@ -0,0 +1,35 @@ +## Manifest + +```typescript +const litecoinManifest = { + name: 'Litecoin', + description: '', + rpcURL: 'https://blockstream.info', + chainSymbol: 'LTC', + blockExplorerURL: 'https://blockchair.com/litecoin', + dataProviderType: 'blockchair', + dataProviderURL: 'https://rpc-proxy.xdefi.services/blockchair/litecoin', + chainId: 'litecoin', + chain: 'litecoin', + decimals: 8, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, +}; +``` + +- `name`: The name of the blockchain network, in this case, Litecoin. Uses only for display name to user +- `description`: A brief description or additional information about the blockchain network. +- `rpcURL`: The URL of the RPC (Remote Procedure Call) endpoint used to interact with the Litecoin blockchain network. +- `chainSymbol`: The symbol or ticker representing the Litecoin blockchain network, which is "LTC". +- `blockExplorerURL`: The URL of the block explorer for the Litecoin blockchain network. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. +- `chainId`: The unique identifier for the Litecoin blockchain network, often referred to as the chain ID. In this example, it is "litecoin". +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `decimals`: The number of decimal places used for representing token amounts on the Litecoin blockchain. In this case, it is set to 8. +- `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Litecoin blockchain network. In this example, all fee levels are set to 1. + +UTXO Specifec fields: +- `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair +- `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/solana/README.md b/packages/solana/README.md new file mode 100644 index 00000000..d5bc5b4b --- /dev/null +++ b/packages/solana/README.md @@ -0,0 +1,30 @@ +## Manifest + +```typescript +const solanaManifest = { + name: 'Solana', + description: '', + rpcURL: 'https://solanalb-rpc.xdefi.services', + chainSymbol: 'SOL', + blockExplorerURL: 'https://explorer.solana.com/', + chainId: 'mainnet-beta', + chain: 'solana', + decimals: 6, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, +}; +``` + +- `name`: The name of the blockchain network, in this case, Solana. Uses only for display name to user +- `description`: A brief description or additional information about the blockchain network. +- `rpcURL`: The URL of the remote procedure call (RPC) server used to interact with the Solana blockchain. +- `chainSymbol`: The symbol or ticker representing the Solana cryptocurrency, which is "SOL". +- `blockExplorerURL`: The URL of the block explorer for the Solana blockchain network. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. +- `chainId`: The unique identifier for the Solana blockchain network, often referred to as the chain ID. In this example, it is "mainnet-beta". +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `decimals`: The number of decimal places supported by the native currency of the Solana blockchain. In this example, it's set to 6. +- `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Solana blockchain network. In this example, all fee levels are set to 1. + diff --git a/packages/thor/README.md b/packages/thor/README.md new file mode 100644 index 00000000..f84a4a85 --- /dev/null +++ b/packages/thor/README.md @@ -0,0 +1,36 @@ +## Manifest + +```typescript +const thorManifest = { + name: 'Thor', + description: '', + rpcURL: 'https://rpc-proxy.xdefi.services/thornode', + chainSymbol: 'RUNE', + blockExplorerURL: 'https://viewblock.io/thorchain', + chainId: 'thorchain-mainnet-v1', + chain: 'thorchain', + denom: 'rune', + prefix: 'thor', + decimals: 8, + feeGasStep: { + high: 0, + medium: 0, + low: 0, + }, +}; +``` + +- `name`: The name of the blockchain network, in this case, Thor. Uses only for display name to user +- `description`: A brief description or additional information about the blockchain network. +- `rpcURL`: The URL of the remote procedure call (RPC) server used to interact with the Thor blockchain. +- `chainSymbol`: The symbol or ticker representing the Thor cryptocurrency, which is "RUNE". +- `blockExplorerURL`: The URL of the block explorer for the Thor blockchain network. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. +- `chainId`: The unique identifier for the Thor blockchain. In this example, it's set to 'thorchain-mainnet-v1'. +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `decimals`: The number of decimal places supported by the native currency of the Thor blockchain. In this example, it's set to 6. +- `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Thor blockchain network. In this example, all fee levels are set to 1. + +Thorchain specific fields: +- `denom`: The denomination of the native currency of the Thorchain blockchain network, which is "rune". +- `prefix`: The prefix used for addresses on the Thorchain blockchain network, which is "thor". + diff --git a/packages/tron/README.md b/packages/tron/README.md new file mode 100644 index 00000000..79400fa7 --- /dev/null +++ b/packages/tron/README.md @@ -0,0 +1,35 @@ +## Manifest + +```typescript +const tronManifest = { + name: 'Tron', + description: '', + rpcURL: 'https://api.trongrid.io', + chainSymbol: 'TRX', + blockExplorerURL: 'https://tronscan.org', + dataProviderType: 'trongrid', + dataProviderURL: 'https://api.trongrid.io', + chainId: '0x2b6653dc', + chain: 'tron', + decimals: 16, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, +}; +``` + +- `name`: The name of the blockchain network, in this case, Tron. Uses only for display name to user +- `description`: A brief description or additional information about the blockchain network. +- `rpcURL`: The URL of the remote procedure call (RPC) server used to interact with the Tron blockchain. +- `chainSymbol`: The symbol or ticker representing the Tron cryptocurrency, which is "TRX". +- `blockExplorerURL`: The URL of the block explorer for the Tron blockchain network. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. +- `chainId`: The unique identifier for the Tron blockchain network, often referred to as the chain ID. In this example, it is "0x2b6653dc". +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `decimals`: The number of decimal places supported by the native currency of the Tron blockchain, which is 16. +- `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Tron blockchain network. In this example, all fee levels are set to 1. + +Tron specific fields: +- `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: trongrid +- `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: getTransaction, getAccount, getBlock From 835fac9f9b123b218ec7b921c85e9f8926ffd344 Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Tue, 30 Apr 2024 13:54:21 +0300 Subject: [PATCH 082/132] fix: lint --- README.md | 12 ++++++---- packages/binance/README.md | 26 ++++++++++---------- packages/bitcoin/README.md | 31 ++++++++++++------------ packages/bitcoincash/README.md | 31 ++++++++++++------------ packages/cosmos/README.md | 34 +++++++++++++-------------- packages/dogecoin/README.md | 31 ++++++++++++------------ packages/evm/README.md | 43 ++++++++++++++++++---------------- packages/litecoin/README.md | 31 ++++++++++++------------ packages/solana/README.md | 27 ++++++++++----------- packages/thor/README.md | 32 ++++++++++++------------- packages/tron/README.md | 31 ++++++++++++------------ 11 files changed, 169 insertions(+), 160 deletions(-) diff --git a/README.md b/README.md index d10a0d1b..2ca4cb51 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,8 @@ This library currently supports the following blockchain networks: // example for fallback data source // example with custom provider - | Chain | Provider | Datasources | Signers | Custom chain | -|-----------------| ------------------------------------------------------------------------------- | -------------- | -------------------------------------- | ------------ | +| --------------- | ------------------------------------------------------------------------------- | -------------- | -------------------------------------- | ------------ | | Bitcoin | [Bitcoin](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-bitcoin) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | No | | Ethereum | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | | BNB Smart Chain | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | @@ -66,6 +65,7 @@ yarn add @xdefi-tech/chains ``` ## Manifest + Each provider may have different manifests, but they share common fields. For more details, please refer to the README of the respective provider. - `name`: The name of the blockchain network. Uses only for display name to user @@ -77,7 +77,6 @@ Each provider may have different manifests, but they share common fields. For mo - `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). - `decimals`: The number of decimal places used by the native currency of the blockchain network. - `feeGasStep`: An object containing gas step values for different fee levels (high, medium, low) used in transactions. - ## Usage @@ -142,6 +141,7 @@ await provider.broadcast([message]); ``` ## Fallback datasource + - If an error occurs while fetching data from the primary data source, the FallbackDataSource will automatically switch to one of the alternative data sources configured in the constructor. - The number of retry attempts and the order in which the alternative data sources are used can be customized based on the requirements and preferences of the application. @@ -156,12 +156,14 @@ const provider = new EvmProvider( attempts: 5, }, new EvmProvider.dataSourceList.IndexerDataSource(EVM_MANIFEST.ethereum), - new EvmProvider.dataSourceList.ChainDataSource(EVM_MANIFEST.ethereum), + new EvmProvider.dataSourceList.ChainDataSource(EVM_MANIFEST.ethereum) ) ); // The same as any other provider -const response = await provider.getBalance('0x1234567890123456789012345678901234567890'); +const response = await provider.getBalance( + '0x1234567890123456789012345678901234567890' +); const data = await response.getData(); ``` diff --git a/packages/binance/README.md b/packages/binance/README.md index 71c2f9aa..ed09b43c 100644 --- a/packages/binance/README.md +++ b/packages/binance/README.md @@ -2,19 +2,19 @@ ```typescript const binanceManifest = { - name: 'Binance', - description: '', - rpcURL: 'https://bbc-dex.xdefiservices.com', - chainSymbol: 'BNB', - blockExplorerURL: 'https://explorer.bnbchain.org', - chainId: 'Binance-Chain-Tigris', - chain: 'binance', - decimals: 8, - feeGasStep: { - high: 1, - medium: 1, - low: 1, - }, + name: 'Binance', + description: '', + rpcURL: 'https://bbc-dex.xdefiservices.com', + chainSymbol: 'BNB', + blockExplorerURL: 'https://explorer.bnbchain.org', + chainId: 'Binance-Chain-Tigris', + chain: 'binance', + decimals: 8, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, }; ``` diff --git a/packages/bitcoin/README.md b/packages/bitcoin/README.md index f920cf96..b7d0b3c4 100644 --- a/packages/bitcoin/README.md +++ b/packages/bitcoin/README.md @@ -2,21 +2,21 @@ ```typescript const bitcoinManifest = { - name: 'Bitcoin', - description: '', - rpcURL: 'https://btc-haskoin.xdefiservices.com', - chainSymbol: 'BTC', - blockExplorerURL: 'https://blockchair.com/bitcoin', - dataProviderType: 'haskoin', - dataProviderURL: 'https://api.haskoin.com/btc', - chainId: 'bitcoin', - chain: 'bitcoin', - decimals: 8, - feeGasStep: { - high: 1, - medium: 1, - low: 1, - }, + name: 'Bitcoin', + description: '', + rpcURL: 'https://btc-haskoin.xdefiservices.com', + chainSymbol: 'BTC', + blockExplorerURL: 'https://blockchair.com/bitcoin', + dataProviderType: 'haskoin', + dataProviderURL: 'https://api.haskoin.com/btc', + chainId: 'bitcoin', + chain: 'bitcoin', + decimals: 8, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, }; ``` @@ -31,5 +31,6 @@ const bitcoinManifest = { - `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Bitcoin blockchain network. In this example, all fee levels are set to 1. UTXO Specifec fields: + - `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair - `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/bitcoincash/README.md b/packages/bitcoincash/README.md index fd918baa..7cdb8eb6 100644 --- a/packages/bitcoincash/README.md +++ b/packages/bitcoincash/README.md @@ -2,21 +2,21 @@ ```typescript const bitcoincashManifest = { - name: 'Bitcoin Cash', - description: '', - rpcURL: 'https://bch-mainnet.xdefiservices.com', - chainSymbol: 'BCH', - blockExplorerURL: 'https://blockchair.com/bitcoin-cash', - dataProviderType: 'haskoin', - dataProviderURL: 'https://api.haskoin.com/bch', - chainId: 'bitcoincash', - chain: 'bitcoincash', - decimals: 8, - feeGasStep: { - high: 1, - medium: 1, - low: 1, - }, + name: 'Bitcoin Cash', + description: '', + rpcURL: 'https://bch-mainnet.xdefiservices.com', + chainSymbol: 'BCH', + blockExplorerURL: 'https://blockchair.com/bitcoin-cash', + dataProviderType: 'haskoin', + dataProviderURL: 'https://api.haskoin.com/bch', + chainId: 'bitcoincash', + chain: 'bitcoincash', + decimals: 8, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, }; ``` @@ -31,5 +31,6 @@ const bitcoincashManifest = { - `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Bitcoin Cash blockchain network. In this example, all fee levels are set to 1. UTXO Specifec fields: + - `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair - `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/cosmos/README.md b/packages/cosmos/README.md index 126f6364..9e5909ea 100644 --- a/packages/cosmos/README.md +++ b/packages/cosmos/README.md @@ -2,22 +2,22 @@ ```typescript const cosmosManifest = { - name: 'Cosmos Hub', - description: '', - rpcURL: 'https://rpc-proxy.xdefi.services/cosmos/rpc/mainnet', - lcdURL: 'https://rpc-proxy.xdefi.services/cosmos/lcd/mainnet', - chainSymbol: 'ATOM', - blockExplorerURL: 'https://www.mintscan.io/cosmos/account', - chainId: 'cosmoshub-4', - chain: 'cosmos', - denom: 'uatom', - decimals: 6, - prefix: 'cosmos', - feeGasStep: { - high: 0.003, - medium: 0.0025, - low: 0.001, - }, + name: 'Cosmos Hub', + description: '', + rpcURL: 'https://rpc-proxy.xdefi.services/cosmos/rpc/mainnet', + lcdURL: 'https://rpc-proxy.xdefi.services/cosmos/lcd/mainnet', + chainSymbol: 'ATOM', + blockExplorerURL: 'https://www.mintscan.io/cosmos/account', + chainId: 'cosmoshub-4', + chain: 'cosmos', + denom: 'uatom', + decimals: 6, + prefix: 'cosmos', + feeGasStep: { + high: 0.003, + medium: 0.0025, + low: 0.001, + }, }; ``` @@ -32,7 +32,7 @@ const cosmosManifest = { - `feeGasStep`: An object containing the gas fee steps for transactions on the Cosmos Hub blockchain. It includes three levels: high, medium, and low, each with a different gas fee value specified in "ATOM". Cosmos specific fields: + - `lcdURL`: The URL of the LCD (Light Client Daemon) server used to query information from the Cosmos Hub blockchain. - `denom`: The denomination or name of the native currency of the Cosmos Hub blockchain, which is "uatom". - `prefix`: A prefix used in some contexts or operations related to the Cosmos Hub blockchain, which is "cosmos". - diff --git a/packages/dogecoin/README.md b/packages/dogecoin/README.md index 0e83edc4..7d3e3d02 100644 --- a/packages/dogecoin/README.md +++ b/packages/dogecoin/README.md @@ -2,21 +2,21 @@ ```typescript const dogecoinManifest = { - name: 'Dogecoin', - description: '', - rpcURL: 'https://blockstream.info', - chainSymbol: 'DOGE', - blockExplorerURL: 'https://blockchair.com/dogecoin', - dataProviderType: 'blockchair', - dataProviderURL: 'https://rpc-proxy.xdefi.services/blockchair/dogecoin', - chainId: 'dogecoin', - chain: 'dogecoin', - decimals: 8, - feeGasStep: { - high: 1, - medium: 1, - low: 1, - }, + name: 'Dogecoin', + description: '', + rpcURL: 'https://blockstream.info', + chainSymbol: 'DOGE', + blockExplorerURL: 'https://blockchair.com/dogecoin', + dataProviderType: 'blockchair', + dataProviderURL: 'https://rpc-proxy.xdefi.services/blockchair/dogecoin', + chainId: 'dogecoin', + chain: 'dogecoin', + decimals: 8, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, }; ``` @@ -31,5 +31,6 @@ const dogecoinManifest = { - `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Dogecoin blockchain network. In this example, all fee levels are set to 1. UTXO Specifec fields: + - `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair - `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/evm/README.md b/packages/evm/README.md index 3b7b7cca..acf2056c 100644 --- a/packages/evm/README.md +++ b/packages/evm/README.md @@ -2,21 +2,21 @@ ```typescript const ethereumManifest = { - name: 'Ethereum', - description: '', - rpcURL: 'https://ethereum-mainnet.xdefiservices.com', - chainSymbol: 'ETH', - blockExplorerURL: 'https://etherscan.io', - chainId: '1', - chain: 'ethereum', - decimals: 18, - feeGasStep: { - high: 1.5, - medium: 1.25, - low: 1, - }, - multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', - }; + name: 'Ethereum', + description: '', + rpcURL: 'https://ethereum-mainnet.xdefiservices.com', + chainSymbol: 'ETH', + blockExplorerURL: 'https://etherscan.io', + chainId: '1', + chain: 'ethereum', + decimals: 18, + feeGasStep: { + high: 1.5, + medium: 1.25, + low: 1, + }, + multicallContractAddress: '0xcA11bde05977b3631167028862bE2a173976CA11', +}; ``` - `name`: The name of the blockchain network, in this case, Ethereum. Uses only for display name to user @@ -25,11 +25,12 @@ const ethereumManifest = { - `chainSymbol`: The symbol used to represent the native cryptocurrency of the chain, which is Ether (ETH) in this case. - `blockExplorerURL`: The URL of a block explorer service specific to the Ethereum blockchain. Block explorers allow users to view details about blocks, transactions, addresses, and other blockchain-related data. - `chainId`: The unique identifier for the chain. It distinguishes Ethereum from other blockchains and is used in various contexts such as transaction signing and network communication. -- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). +- `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). - `decimals`: The number of decimal places used to represent the smallest unit of native token. e.g. Ether (ETH) on the Ethereum blockchain. Ethereum uses 18 decimals, meaning that 1 Ether is represented by 10^18 Wei. - `feeGasStep`: An object containing gas fee steps for different transaction priority levels. Gas is the unit used to measure the computational work done by transactions on the network. The values provided represent multipliers applied to the base gas fee for each priority level (high, medium, low). EVM specific fields: + - `multicallContractAddress`: The address of a smart contract known as Multicall, which allows batching multiple Ethereum function calls into a single transaction. This can help reduce the number of individual transactions needed to fetch data from the Ethereum blockchain, improving efficiency and reducing costs. ## Custom chain @@ -39,10 +40,10 @@ To implement a custom chain, you need to pass a custom manifest to ChainDatasour #### Example with Goerli testnet chain: The main difference between supported chains and custom chains: + - Supported chains can use IndexerDataSource; - You have to provide your own manifest for custom chains. - ```typescript import { EvmProvider } from '@xdefi-tech/chains-evm'; @@ -60,11 +61,13 @@ const provider = new EvmProvider( high: 1.5, medium: 1.25, low: 1, - } + }, }) ); // The same as any other provider -const response = await provider.getBalance('0x1234567890123456789012345678901234567890'); +const response = await provider.getBalance( + '0x1234567890123456789012345678901234567890' +); const data = await response.getData(); -``` \ No newline at end of file +``` diff --git a/packages/litecoin/README.md b/packages/litecoin/README.md index c904df5c..89f7eb84 100644 --- a/packages/litecoin/README.md +++ b/packages/litecoin/README.md @@ -2,21 +2,21 @@ ```typescript const litecoinManifest = { - name: 'Litecoin', - description: '', - rpcURL: 'https://blockstream.info', - chainSymbol: 'LTC', - blockExplorerURL: 'https://blockchair.com/litecoin', - dataProviderType: 'blockchair', - dataProviderURL: 'https://rpc-proxy.xdefi.services/blockchair/litecoin', - chainId: 'litecoin', - chain: 'litecoin', - decimals: 8, - feeGasStep: { - high: 1, - medium: 1, - low: 1, - }, + name: 'Litecoin', + description: '', + rpcURL: 'https://blockstream.info', + chainSymbol: 'LTC', + blockExplorerURL: 'https://blockchair.com/litecoin', + dataProviderType: 'blockchair', + dataProviderURL: 'https://rpc-proxy.xdefi.services/blockchair/litecoin', + chainId: 'litecoin', + chain: 'litecoin', + decimals: 8, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, }; ``` @@ -31,5 +31,6 @@ const litecoinManifest = { - `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Litecoin blockchain network. In this example, all fee levels are set to 1. UTXO Specifec fields: + - `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair - `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/solana/README.md b/packages/solana/README.md index d5bc5b4b..e67325cf 100644 --- a/packages/solana/README.md +++ b/packages/solana/README.md @@ -2,19 +2,19 @@ ```typescript const solanaManifest = { - name: 'Solana', - description: '', - rpcURL: 'https://solanalb-rpc.xdefi.services', - chainSymbol: 'SOL', - blockExplorerURL: 'https://explorer.solana.com/', - chainId: 'mainnet-beta', - chain: 'solana', - decimals: 6, - feeGasStep: { - high: 1, - medium: 1, - low: 1, - }, + name: 'Solana', + description: '', + rpcURL: 'https://solanalb-rpc.xdefi.services', + chainSymbol: 'SOL', + blockExplorerURL: 'https://explorer.solana.com/', + chainId: 'mainnet-beta', + chain: 'solana', + decimals: 6, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, }; ``` @@ -27,4 +27,3 @@ const solanaManifest = { - `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). - `decimals`: The number of decimal places supported by the native currency of the Solana blockchain. In this example, it's set to 6. - `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Solana blockchain network. In this example, all fee levels are set to 1. - diff --git a/packages/thor/README.md b/packages/thor/README.md index f84a4a85..5cc3951e 100644 --- a/packages/thor/README.md +++ b/packages/thor/README.md @@ -2,21 +2,21 @@ ```typescript const thorManifest = { - name: 'Thor', - description: '', - rpcURL: 'https://rpc-proxy.xdefi.services/thornode', - chainSymbol: 'RUNE', - blockExplorerURL: 'https://viewblock.io/thorchain', - chainId: 'thorchain-mainnet-v1', - chain: 'thorchain', - denom: 'rune', - prefix: 'thor', - decimals: 8, - feeGasStep: { - high: 0, - medium: 0, - low: 0, - }, + name: 'Thor', + description: '', + rpcURL: 'https://rpc-proxy.xdefi.services/thornode', + chainSymbol: 'RUNE', + blockExplorerURL: 'https://viewblock.io/thorchain', + chainId: 'thorchain-mainnet-v1', + chain: 'thorchain', + denom: 'rune', + prefix: 'thor', + decimals: 8, + feeGasStep: { + high: 0, + medium: 0, + low: 0, + }, }; ``` @@ -31,6 +31,6 @@ const thorManifest = { - `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Thor blockchain network. In this example, all fee levels are set to 1. Thorchain specific fields: + - `denom`: The denomination of the native currency of the Thorchain blockchain network, which is "rune". - `prefix`: The prefix used for addresses on the Thorchain blockchain network, which is "thor". - diff --git a/packages/tron/README.md b/packages/tron/README.md index 79400fa7..04f9c42f 100644 --- a/packages/tron/README.md +++ b/packages/tron/README.md @@ -2,21 +2,21 @@ ```typescript const tronManifest = { - name: 'Tron', - description: '', - rpcURL: 'https://api.trongrid.io', - chainSymbol: 'TRX', - blockExplorerURL: 'https://tronscan.org', - dataProviderType: 'trongrid', - dataProviderURL: 'https://api.trongrid.io', - chainId: '0x2b6653dc', - chain: 'tron', - decimals: 16, - feeGasStep: { - high: 1, - medium: 1, - low: 1, - }, + name: 'Tron', + description: '', + rpcURL: 'https://api.trongrid.io', + chainSymbol: 'TRX', + blockExplorerURL: 'https://tronscan.org', + dataProviderType: 'trongrid', + dataProviderURL: 'https://api.trongrid.io', + chainId: '0x2b6653dc', + chain: 'tron', + decimals: 16, + feeGasStep: { + high: 1, + medium: 1, + low: 1, + }, }; ``` @@ -31,5 +31,6 @@ const tronManifest = { - `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Tron blockchain network. In this example, all fee levels are set to 1. Tron specific fields: + - `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: trongrid - `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: getTransaction, getAccount, getBlock From c0afd52fa83b3157005b271df3fbe6493a66f0f4 Mon Sep 17 00:00:00 2001 From: cicd Date: Tue, 30 Apr 2024 13:43:02 +0000 Subject: [PATCH 083/132] Version packages --- .changeset/smart-windows-bake.md | 14 -------------- .changeset/sour-hornets-judge.md | 9 --------- packages/binance/CHANGELOG.md | 6 ++++++ packages/binance/package.json | 2 +- packages/bitcoin/CHANGELOG.md | 9 +++++++++ packages/bitcoin/package.json | 2 +- packages/bitcoincash/CHANGELOG.md | 9 +++++++++ packages/bitcoincash/package.json | 2 +- packages/cosmos/CHANGELOG.md | 6 ++++++ packages/cosmos/package.json | 2 +- packages/dogecoin/CHANGELOG.md | 9 +++++++++ packages/dogecoin/package.json | 2 +- packages/evm/CHANGELOG.md | 6 ++++++ packages/evm/package.json | 2 +- packages/litecoin/CHANGELOG.md | 9 +++++++++ packages/litecoin/package.json | 2 +- packages/solana/CHANGELOG.md | 6 ++++++ packages/solana/package.json | 2 +- packages/thor/CHANGELOG.md | 6 ++++++ packages/thor/package.json | 2 +- packages/tron/CHANGELOG.md | 6 ++++++ packages/tron/package.json | 2 +- packages/utxo/CHANGELOG.md | 6 ++++++ packages/utxo/package.json | 2 +- 24 files changed, 89 insertions(+), 34 deletions(-) delete mode 100644 .changeset/smart-windows-bake.md delete mode 100644 .changeset/sour-hornets-judge.md diff --git a/.changeset/smart-windows-bake.md b/.changeset/smart-windows-bake.md deleted file mode 100644 index a096bd84..00000000 --- a/.changeset/smart-windows-bake.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@xdefi-tech/chains-bitcoincash': patch -'@xdefi-tech/chains-dogecoin': patch -'@xdefi-tech/chains-litecoin': patch -'@xdefi-tech/chains-binance': patch -'@xdefi-tech/chains-bitcoin': patch -'@xdefi-tech/chains-cosmos': patch -'@xdefi-tech/chains-solana': patch -'@xdefi-tech/chains-thor': patch -'@xdefi-tech/chains-tron': patch -'@xdefi-tech/chains-evm': patch ---- - -Feat: update README.md diff --git a/.changeset/sour-hornets-judge.md b/.changeset/sour-hornets-judge.md deleted file mode 100644 index 6c24115c..00000000 --- a/.changeset/sour-hornets-judge.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@xdefi-tech/chains-bitcoincash': patch -'@xdefi-tech/chains-dogecoin': patch -'@xdefi-tech/chains-litecoin': patch -'@xdefi-tech/chains-bitcoin': patch -'@xdefi-tech/chains-utxo': patch ---- - -Feat: add Uint8Array support for memo field diff --git a/packages/binance/CHANGELOG.md b/packages/binance/CHANGELOG.md index 3382fc11..9eb2f0da 100644 --- a/packages/binance/CHANGELOG.md +++ b/packages/binance/CHANGELOG.md @@ -1,5 +1,11 @@ # @xdefi-tech/chains-binance +## 2.0.8 + +### Patch Changes + +- 62105c4: Feat: update README.md + ## 2.0.7 ### Patch Changes diff --git a/packages/binance/package.json b/packages/binance/package.json index 186436fc..dfcc21c4 100644 --- a/packages/binance/package.json +++ b/packages/binance/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-binance", - "version": "2.0.7", + "version": "2.0.8", "main": "./dist/index.js", "types": "./dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/bitcoin/CHANGELOG.md b/packages/bitcoin/CHANGELOG.md index d38cb238..6b476eb6 100644 --- a/packages/bitcoin/CHANGELOG.md +++ b/packages/bitcoin/CHANGELOG.md @@ -1,5 +1,14 @@ # @xdefi-tech/chains-bitcoin +## 2.0.10 + +### Patch Changes + +- 62105c4: Feat: update README.md +- a04a730: Feat: add Uint8Array support for memo field +- Updated dependencies [a04a730] + - @xdefi-tech/chains-utxo@2.0.6 + ## 2.0.9 ### Patch Changes diff --git a/packages/bitcoin/package.json b/packages/bitcoin/package.json index 28672c1a..e485ea90 100644 --- a/packages/bitcoin/package.json +++ b/packages/bitcoin/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-bitcoin", - "version": "2.0.9", + "version": "2.0.10", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/bitcoincash/CHANGELOG.md b/packages/bitcoincash/CHANGELOG.md index a232d949..590f7313 100644 --- a/packages/bitcoincash/CHANGELOG.md +++ b/packages/bitcoincash/CHANGELOG.md @@ -1,5 +1,14 @@ # @xdefi-tech/chains-bitcoincash +## 2.0.12 + +### Patch Changes + +- 62105c4: Feat: update README.md +- a04a730: Feat: add Uint8Array support for memo field +- Updated dependencies [a04a730] + - @xdefi-tech/chains-utxo@2.0.6 + ## 2.0.11 ### Patch Changes diff --git a/packages/bitcoincash/package.json b/packages/bitcoincash/package.json index dab7d8b0..1f3edb8e 100644 --- a/packages/bitcoincash/package.json +++ b/packages/bitcoincash/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-bitcoincash", - "version": "2.0.11", + "version": "2.0.12", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/cosmos/CHANGELOG.md b/packages/cosmos/CHANGELOG.md index 5f28aa46..649095a8 100644 --- a/packages/cosmos/CHANGELOG.md +++ b/packages/cosmos/CHANGELOG.md @@ -1,5 +1,11 @@ # @xdefi-tech/chains-cosmos +## 2.0.9 + +### Patch Changes + +- 62105c4: Feat: update README.md + ## 2.0.8 ### Patch Changes diff --git a/packages/cosmos/package.json b/packages/cosmos/package.json index a549fd30..e6918d70 100644 --- a/packages/cosmos/package.json +++ b/packages/cosmos/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-cosmos", - "version": "2.0.8", + "version": "2.0.9", "main": "./dist/index.js", "types": "./dist/index.d.ts", "license": "MIT", diff --git a/packages/dogecoin/CHANGELOG.md b/packages/dogecoin/CHANGELOG.md index 5d5a2c2c..19aa7161 100644 --- a/packages/dogecoin/CHANGELOG.md +++ b/packages/dogecoin/CHANGELOG.md @@ -1,5 +1,14 @@ # @xdefi-tech/chains-dogecoin +## 2.0.11 + +### Patch Changes + +- 62105c4: Feat: update README.md +- a04a730: Feat: add Uint8Array support for memo field +- Updated dependencies [a04a730] + - @xdefi-tech/chains-utxo@2.0.6 + ## 2.0.10 ### Patch Changes diff --git a/packages/dogecoin/package.json b/packages/dogecoin/package.json index 45fe764e..17485290 100644 --- a/packages/dogecoin/package.json +++ b/packages/dogecoin/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-dogecoin", - "version": "2.0.10", + "version": "2.0.11", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/evm/CHANGELOG.md b/packages/evm/CHANGELOG.md index f2df3d9b..617e36d0 100644 --- a/packages/evm/CHANGELOG.md +++ b/packages/evm/CHANGELOG.md @@ -1,5 +1,11 @@ # @xdefi-tech/chains-evm +## 2.0.14 + +### Patch Changes + +- 62105c4: Feat: update README.md + ## 2.0.13 ### Patch Changes diff --git a/packages/evm/package.json b/packages/evm/package.json index 8e7186c0..ba51202b 100644 --- a/packages/evm/package.json +++ b/packages/evm/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-evm", - "version": "2.0.13", + "version": "2.0.14", "main": "./dist/index.js", "types": "./dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/litecoin/CHANGELOG.md b/packages/litecoin/CHANGELOG.md index cc42f604..71c13704 100644 --- a/packages/litecoin/CHANGELOG.md +++ b/packages/litecoin/CHANGELOG.md @@ -1,5 +1,14 @@ # @xdefi-tech/chains-litecoin +## 2.0.10 + +### Patch Changes + +- 62105c4: Feat: update README.md +- a04a730: Feat: add Uint8Array support for memo field +- Updated dependencies [a04a730] + - @xdefi-tech/chains-utxo@2.0.6 + ## 2.0.9 ### Patch Changes diff --git a/packages/litecoin/package.json b/packages/litecoin/package.json index 4c64e7be..062e8f85 100644 --- a/packages/litecoin/package.json +++ b/packages/litecoin/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-litecoin", - "version": "2.0.9", + "version": "2.0.10", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/solana/CHANGELOG.md b/packages/solana/CHANGELOG.md index aae9104d..43193c65 100644 --- a/packages/solana/CHANGELOG.md +++ b/packages/solana/CHANGELOG.md @@ -1,5 +1,11 @@ # @xdefi-tech/chains-solana +## 2.0.10 + +### Patch Changes + +- 62105c4: Feat: update README.md + ## 2.0.9 ### Patch Changes diff --git a/packages/solana/package.json b/packages/solana/package.json index 885ecf04..f30158ad 100644 --- a/packages/solana/package.json +++ b/packages/solana/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-solana", - "version": "2.0.9", + "version": "2.0.10", "main": "./dist/index.js", "types": "./dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/thor/CHANGELOG.md b/packages/thor/CHANGELOG.md index 9b17bac8..c3d7d829 100644 --- a/packages/thor/CHANGELOG.md +++ b/packages/thor/CHANGELOG.md @@ -1,5 +1,11 @@ # @xdefi-tech/chains-thor +## 2.0.11 + +### Patch Changes + +- 62105c4: Feat: update README.md + ## 2.0.10 ### Patch Changes diff --git a/packages/thor/package.json b/packages/thor/package.json index 91716c1d..d2ac6747 100644 --- a/packages/thor/package.json +++ b/packages/thor/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-thor", - "version": "2.0.10", + "version": "2.0.11", "main": "./dist/index.js", "types": "./dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/tron/CHANGELOG.md b/packages/tron/CHANGELOG.md index 21082ba9..f38d100c 100644 --- a/packages/tron/CHANGELOG.md +++ b/packages/tron/CHANGELOG.md @@ -1,5 +1,11 @@ # @xdefi-tech/chains-tron +## 2.0.14 + +### Patch Changes + +- 62105c4: Feat: update README.md + ## 2.0.13 ### Patch Changes diff --git a/packages/tron/package.json b/packages/tron/package.json index b1780c12..a0e74357 100644 --- a/packages/tron/package.json +++ b/packages/tron/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-tron", - "version": "2.0.13", + "version": "2.0.14", "main": "./dist/index.js", "types": "./dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/utxo/CHANGELOG.md b/packages/utxo/CHANGELOG.md index 1be32cb8..89a33a1e 100644 --- a/packages/utxo/CHANGELOG.md +++ b/packages/utxo/CHANGELOG.md @@ -1,5 +1,11 @@ # @xdefi-tech/chains-utxo +## 2.0.6 + +### Patch Changes + +- a04a730: Feat: add Uint8Array support for memo field + ## 2.0.5 ### Patch Changes diff --git a/packages/utxo/package.json b/packages/utxo/package.json index fff8428e..680c9a3c 100644 --- a/packages/utxo/package.json +++ b/packages/utxo/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-utxo", - "version": "2.0.5", + "version": "2.0.6", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", From 6c845835c9cb1916e98b01f1a200f1133b66b5a2 Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Tue, 30 Apr 2024 21:30:20 +0300 Subject: [PATCH 084/132] feat: use indexerDataSource for broadcast and scanUTXOs for UTXO chains --- README.md | 58 +- packages/bitcoin/src/chain.provider.ts | 23 +- .../datasource/indexer/indexer.data-source.ts | 10 +- .../src/datasource/indexer/operations.graphql | 22 + .../indexer/queries/broadcast.query.ts | 13 + .../src/datasource/indexer/queries/index.ts | 71 +- .../indexer/queries/scanUTXOs.query.ts | 19 + packages/bitcoin/src/msg.ts | 5 +- .../src/signers/private-key.signer.spec.ts | 18 +- packages/bitcoincash/src/chain.provider.ts | 24 +- .../datasource/indexer/indexer.data-source.ts | 43 +- .../src/datasource/indexer/operations.graphql | 22 + .../indexer/queries/broadcast.query.ts | 13 + .../src/datasource/indexer/queries/index.ts | 2 + .../indexer/queries/scanUTXOs.query.ts | 19 + packages/bitcoincash/src/msg.ts | 2 +- packages/core/src/common/client/gql.client.ts | 4 +- .../src/core/datasource/base.data-source.ts | 9 + packages/dogecoin/src/chain.provider.ts | 11 +- .../datasource/indexer/indexer.data-source.ts | 42 +- .../src/datasource/indexer/operations.graphql | 24 +- .../indexer/queries/broadcast.query.ts | 13 + .../src/datasource/indexer/queries/index.ts | 2 + .../indexer/queries/scanUTXOs.query.ts | 19 + packages/dogecoin/src/msg.ts | 2 +- .../evm/src/signers/private-key.signer.ts | 2 +- .../evm/src/signers/seed-phrase.signer.ts | 2 +- packages/litecoin/src/chain.provider.ts | 6 +- .../datasource/indexer/indexer.data-source.ts | 43 +- .../src/datasource/indexer/operations.graphql | 22 + .../indexer/queries/broadcast.query.ts | 13 + .../src/datasource/indexer/queries/index.ts | 2 + .../indexer/queries/scanUTXOs.query.ts | 19 + packages/litecoin/src/msg.ts | 2 +- packages/utxo/src/chain.provider.ts | 1 + .../haskoin/haskoin.data-provider.ts | 1 + utility-packages/graphql/codegen.yml | 6 +- utility-packages/graphql/src/gql/gql.ts | 40 +- utility-packages/graphql/src/gql/graphql.ts | 3326 +++++++++-------- 39 files changed, 2159 insertions(+), 1816 deletions(-) create mode 100644 packages/bitcoin/src/datasource/indexer/queries/broadcast.query.ts create mode 100644 packages/bitcoin/src/datasource/indexer/queries/scanUTXOs.query.ts create mode 100644 packages/bitcoincash/src/datasource/indexer/queries/broadcast.query.ts create mode 100644 packages/bitcoincash/src/datasource/indexer/queries/scanUTXOs.query.ts create mode 100644 packages/dogecoin/src/datasource/indexer/queries/broadcast.query.ts create mode 100644 packages/dogecoin/src/datasource/indexer/queries/scanUTXOs.query.ts create mode 100644 packages/litecoin/src/datasource/indexer/queries/broadcast.query.ts create mode 100644 packages/litecoin/src/datasource/indexer/queries/scanUTXOs.query.ts diff --git a/README.md b/README.md index 2ca4cb51..93494cfb 100644 --- a/README.md +++ b/README.md @@ -20,35 +20,35 @@ This library currently supports the following blockchain networks: | Chain | Provider | Datasources | Signers | Custom chain | | --------------- | ------------------------------------------------------------------------------- | -------------- | -------------------------------------- | ------------ | -| Bitcoin | [Bitcoin](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-bitcoin) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | No | -| Ethereum | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| BNB Smart Chain | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Polygon | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Avalanche | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Fantom | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Arbitrum | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Aurora | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Canto EVM | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Optimism | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Klaytn | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Cronos | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Binance | [Binance](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-binance) | Indexer | SeedPhrase, PrivateKey, Ledger, Tresor | No | -| BitcoinCash | [BitcoinCash](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-bitcoincash) | Indexer | SeedPhrase, PrivateKey, Ledger, Tresor | No | -| Cosmos Hub | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Osmosis | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Axelar | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Juno | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Crescent | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Kava | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Stargaze | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Akash | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Cronos | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Kujira | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Stride | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Mars | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Terra | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Tresor | Yes | -| Dogecoin | [Dogecoin](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-dogecoin) | Indexer | SeedPhrase, PrivateKey, Ledger, Tresor | No | -| Litecoin | [Litecoin](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-litecoin) | Indexer | SeedPhrase, PrivateKey, Ledger, Tresor | No | +| Bitcoin | [Bitcoin](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-bitcoin) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | No | +| Ethereum | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| BNB Smart Chain | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Polygon | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Avalanche | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Fantom | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Arbitrum | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Aurora | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Canto EVM | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Optimism | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Klaytn | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Cronos | [EVM](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-evm) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Binance | [Binance](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-binance) | Indexer | SeedPhrase, PrivateKey, Ledger, Trezor | No | +| BitcoinCash | [BitcoinCash](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-bitcoincash) | Indexer | SeedPhrase, PrivateKey, Ledger, Trezor | No | +| Cosmos Hub | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Osmosis | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Axelar | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Juno | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Crescent | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Kava | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Stargaze | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Akash | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Cronos | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Kujira | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Stride | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Mars | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Terra | [Cosmos](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-cosmos) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger, Trezor | Yes | +| Dogecoin | [Dogecoin](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-dogecoin) | Indexer | SeedPhrase, PrivateKey, Ledger, Trezor | No | +| Litecoin | [Litecoin](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-litecoin) | Indexer | SeedPhrase, PrivateKey, Ledger, Trezor | No | | Solana | [Solana](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-solana) | Indexer, Chain | SeedPhrase, PrivateKey, Ledger | No | | ThorChain | [ThorChain](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-thor) | Indexer, Chain | SeedPhrase, Ledger | No | | MayaChain | [ThorChain](https://github.com/XDeFi-tech/chains/pkgs/npm/chains-thor) | Indexer, Chain | SeedPhrase, Ledger | No | diff --git a/packages/bitcoin/src/chain.provider.ts b/packages/bitcoin/src/chain.provider.ts index c83a1030..2af9be8d 100644 --- a/packages/bitcoin/src/chain.provider.ts +++ b/packages/bitcoin/src/chain.provider.ts @@ -2,7 +2,7 @@ import { Chain, ChainDecorator, MsgEncoding, - // Transaction, + Transaction, } from '@xdefi-tech/chains-core'; import { UtxoProvider } from '@xdefi-tech/chains-utxo'; @@ -28,22 +28,7 @@ export class BitcoinProvider extends UtxoProvider { return new ChainMsg(data, this, encoding); } - // async broadcast(messages: ChainMsg[]): Promise { - // const result: Transaction[] = []; - // for await (const message of messages) { - // const { signedTransaction } = message; - - // if (!message.hasSignature) { - // throw new Error(`Message ${JSON.stringify(message)} is not signed`); - // } - - // const { - // data: { txid }, - // } = await this.rest.post('/transactions', signedTransaction); - - // result.push(Transaction.fromData({ hash: txid })); - // } - - // return result; - // } + async broadcast(messages: ChainMsg[]): Promise { + return this.dataSource.broadcast(messages); + } } diff --git a/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts b/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts index adc06768..5ad2aca8 100644 --- a/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts +++ b/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts @@ -37,6 +37,7 @@ export class IndexerDataSource extends DataSource implements UTXODataProvider { constructor(manifest: UTXOManifest) { super(manifest); } + async broadcast(messages: ChainMsg[]): Promise { const result: Transaction[] = []; for await (const message of messages) { @@ -53,22 +54,23 @@ export class IndexerDataSource extends DataSource implements UTXODataProvider { return result; } + async scanUTXOs(address: string): Promise { const utxos = await scanUTXOs(address); return utxos.map((utxo) => { - const tx = Bitcoin.Transaction.fromHex(utxo.oTxHex); + const tx = Bitcoin.Transaction.fromHex(utxo.oTxHex as string); const utxoMapped: UTXO = { hash: utxo.oTxHash, index: utxo.oIndex, - value: utxo.value.value, - txHex: utxo.oTxHex, + value: parseInt(utxo.value.value), + txHex: utxo.oTxHex as string, witnessUtxo: tx.outs[utxo.oIndex], }; return utxoMapped; }); } - getTransaction(txid: string): Promise { + getTransaction(_txid: string): Promise { throw new Error('Method not implemented.'); } diff --git a/packages/bitcoin/src/datasource/indexer/operations.graphql b/packages/bitcoin/src/datasource/indexer/operations.graphql index 7a87d491..af6f46db 100644 --- a/packages/bitcoin/src/datasource/indexer/operations.graphql +++ b/packages/bitcoin/src/datasource/indexer/operations.graphql @@ -59,3 +59,25 @@ query GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: In } } } + +query BitcoinBroadcastTransaction($rawHex: String!) { + bitcoin { + broadcastTransaction(rawHex: $rawHex) + } +} + +query BitcoinScanUTXOs($address: String!, $page: Int!) { + bitcoin { + unspentTxOutputsV5(address: $address, page: $page) { + oTxHash + oIndex + value { + value + } + oTxHex + address + isCoinbase + scriptHex + } + } +} diff --git a/packages/bitcoin/src/datasource/indexer/queries/broadcast.query.ts b/packages/bitcoin/src/datasource/indexer/queries/broadcast.query.ts new file mode 100644 index 00000000..2049fe7b --- /dev/null +++ b/packages/bitcoin/src/datasource/indexer/queries/broadcast.query.ts @@ -0,0 +1,13 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { DogecoinBroadcastTransactionDocument } from '@xdefi-tech/chains-graphql'; + +export const broadcast = async (rawHex: string): Promise => { + const response = await gqlClient.query({ + query: DogecoinBroadcastTransactionDocument, + variables: { + rawHex, + }, + }); + + return response.data.dogecoin.broadcastTransaction; +}; diff --git a/packages/bitcoin/src/datasource/indexer/queries/index.ts b/packages/bitcoin/src/datasource/indexer/queries/index.ts index c642e36c..e3a20064 100644 --- a/packages/bitcoin/src/datasource/indexer/queries/index.ts +++ b/packages/bitcoin/src/datasource/indexer/queries/index.ts @@ -1,73 +1,6 @@ -import { gql } from 'graphql-tag'; -import { gqlClient } from '@xdefi-tech/chains-core'; export * from './transactions.query'; export * from './balances.query'; export * from './fees.query'; export * from './nfts.query'; - -export const scanUTXOs = async ( - address: string, - page = 0 -): Promise< - Array<{ - oTxHash: string; - oIndex: number; - value: { - value: number; - }; - oTxHex: string; - }> -> => { - const response = await gqlClient.query({ - query: gql` - query scanUTXOs($address: String!, $page: Int!) { - bitcoin { - unspentTxOutputsV5(address: $address, page: $page) { - oTxHash - oIndex - value { - value - } - oTxHex - } - } - } - `, - variables: { - address, - page, - }, - }); - - return response.data.bitcoin.unspentTxOutputsV5 as Array<{ - oTxHash: string; - oIndex: number; - value: { - value: number; - }; - oTxHex: string; - }>; -}; - -export const getTransaction = async (txid: string): Promise => { - throw new Error('Method not implemented.'); -}; - -export const broadcastQuery = gql` - query broadcast($rawHex: String!) { - bitcoin { - broadcastTransaction(rawHex: $rawHex) - } - } -`; - -export const broadcast = async (rawHex: string): Promise => { - const response = await gqlClient.query({ - query: broadcastQuery, - variables: { - rawHex, - }, - }); - - return response.data.bitcoin.broadcastTransaction as string; -}; +export * from './broadcast.query'; +export * from './scanUTXOs.query'; diff --git a/packages/bitcoin/src/datasource/indexer/queries/scanUTXOs.query.ts b/packages/bitcoin/src/datasource/indexer/queries/scanUTXOs.query.ts new file mode 100644 index 00000000..ad3c5497 --- /dev/null +++ b/packages/bitcoin/src/datasource/indexer/queries/scanUTXOs.query.ts @@ -0,0 +1,19 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { + DogecoinScanUtxOsDocument, + UnspentTransactionOutputV5, +} from '@xdefi-tech/chains-graphql'; + +export const scanUTXOs = async ( + address: string +): Promise => { + const response = await gqlClient.query({ + query: DogecoinScanUtxOsDocument, + variables: { + address, + page: 0, + }, + }); + + return response.data.dogecoin.unspentTxOutputsV5; +}; diff --git a/packages/bitcoin/src/msg.ts b/packages/bitcoin/src/msg.ts index 54ac97e6..94bb9772 100644 --- a/packages/bitcoin/src/msg.ts +++ b/packages/bitcoin/src/msg.ts @@ -5,6 +5,7 @@ import { MsgEncoding, NumberIsh, } from '@xdefi-tech/chains-core'; +import { UTXO } from '@xdefi-tech/chains-utxo'; import BigNumber from 'bignumber.js'; import accumulative from 'coinselect/accumulative'; import * as UTXOLib from 'bitcoinjs-lib'; @@ -39,7 +40,9 @@ export class ChainMsg extends BaseMsg { async buildTx() { const msgData = this.toData(); - let utxos = await this.provider.utxoDataSource.scanUTXOs(this.data.from); + let utxos: UTXO[] = await this.provider.dataSource.scanUTXOs( + this.data.from + ); // check is the user has ordinals to erase them from utxos let ordinals: any[] = []; try { diff --git a/packages/bitcoin/src/signers/private-key.signer.spec.ts b/packages/bitcoin/src/signers/private-key.signer.spec.ts index 0fd5aa64..3de43a61 100644 --- a/packages/bitcoin/src/signers/private-key.signer.spec.ts +++ b/packages/bitcoin/src/signers/private-key.signer.spec.ts @@ -21,14 +21,16 @@ describe('private-key.signer', () => { let message: Msg; beforeEach(() => { - privateKey = 'KyaowqfYE7mJmTYEpxPJmAXwErQQY6KdDRynbg7SQPTAvC3bLNmF'; + privateKey = 'L1nvuM997ysJ7izhBwr8SCpnKKPtpZDGrr3fuC8E6dgXfUkE9Ub4'; signer = new PrivateKeySigner(privateKey); - provider = new BitcoinProvider(new IndexerDataSource(BITCOIN_MANIFEST)); + provider = new BitcoinProvider(new IndexerDataSource(BITCOIN_MANIFEST), { + apiKey: '', + }); txInput = { - from: 'bc1qfcsf4tue7jcgedd4s06ws765dvqw5kjn2zztvw', - to: 'bc1qfcsf4tue7jcgedd4s06ws765dvqw5kjn2zztvw', + from: 'bc1qlmywh0zkz0xlc9rkfjy5haqerjlzf4rrwpxd9m', + to: 'bc1qlmywh0zkz0xlc9rkfjy5haqerjlzf4rrwpxd9m', amount: 0.000001, }; @@ -66,4 +68,12 @@ describe('private-key.signer', () => { it('should get a private key', async () => { expect(await signer.getPrivateKey('')).toEqual(privateKey); }); + + it('should broadcast the thansaction to blockchain', async () => { + const msg = provider.createMsg(txInput); + await signer.sign(msg as ChainMsg); + + const tx = await provider.broadcast([msg]); + expect(tx).toBeTruthy(); + }); }); diff --git a/packages/bitcoincash/src/chain.provider.ts b/packages/bitcoincash/src/chain.provider.ts index e72b3a74..da9b1295 100644 --- a/packages/bitcoincash/src/chain.provider.ts +++ b/packages/bitcoincash/src/chain.provider.ts @@ -29,28 +29,6 @@ export class BitcoinCashProvider extends UtxoProvider { } async broadcast(messages: ChainMsg[]): Promise { - const result: Transaction[] = []; - for await (const message of messages) { - const { signedTransaction } = message; - - if (!message.hasSignature) { - throw new Error(`Message ${JSON.stringify(message)} is not signed`); - } - - const { data: response } = await this.rest.post('', { - jsonrpc: '2.0', - method: 'sendrawtransaction', - params: [signedTransaction], - id: '', - }); - - if (response.error) { - throw new Error(response.error); - } - - result.push(Transaction.fromData({ hash: response.result })); - } - - return result; + return this.dataSource.broadcast(messages); } } diff --git a/packages/bitcoincash/src/datasource/indexer/indexer.data-source.ts b/packages/bitcoincash/src/datasource/indexer/indexer.data-source.ts index 99b355e7..1fdb7522 100644 --- a/packages/bitcoincash/src/datasource/indexer/indexer.data-source.ts +++ b/packages/bitcoincash/src/datasource/indexer/indexer.data-source.ts @@ -11,13 +11,20 @@ import { FeeData, DefaultFeeOptions, } from '@xdefi-tech/chains-core'; -import { UTXOManifest } from '@xdefi-tech/chains-utxo'; +import { UTXO, UTXOManifest } from '@xdefi-tech/chains-utxo'; import { utils } from 'ethers'; import { Observable } from 'rxjs'; +import * as BitcoinCash from 'bitcoinjs-lib'; import { ChainMsg } from '../../msg'; -import { getBalance, getTransactions, getFees } from './queries'; +import { + getBalance, + getTransactions, + getFees, + broadcast, + scanUTXOs, +} from './queries'; @Injectable() export class IndexerDataSource extends DataSource { @@ -29,6 +36,38 @@ export class IndexerDataSource extends DataSource { throw new Error('Current chain do not support NFTs'); } + async broadcast(messages: ChainMsg[]): Promise { + const result: Transaction[] = []; + for await (const message of messages) { + const { signedTransaction } = message; + + if (!message.hasSignature || !signedTransaction) { + throw new Error(`Message ${JSON.stringify(message)} is not signed`); + } + + const txHash = await broadcast(signedTransaction); + + result.push(Transaction.fromData({ hash: txHash })); + } + + return result; + } + + async scanUTXOs(address: string): Promise { + const utxos = await scanUTXOs(address); + return utxos.map((utxo) => { + const tx = BitcoinCash.Transaction.fromHex(utxo.oTxHex as string); + const utxoMapped: UTXO = { + hash: utxo.oTxHash, + index: utxo.oIndex, + value: parseInt(utxo.value.value), + txHex: utxo.oTxHex as string, + witnessUtxo: tx.outs[utxo.oIndex], + }; + return utxoMapped; + }); + } + async getBalance(filter: BalanceFilter): Promise { const { address } = filter; const balances = await getBalance(address); diff --git a/packages/bitcoincash/src/datasource/indexer/operations.graphql b/packages/bitcoincash/src/datasource/indexer/operations.graphql index c76c1942..4275fa52 100644 --- a/packages/bitcoincash/src/datasource/indexer/operations.graphql +++ b/packages/bitcoincash/src/datasource/indexer/operations.graphql @@ -58,4 +58,26 @@ query GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber status } } +} + +query BitcoinCashBroadcastTransaction($rawHex: String!) { + bitcoincash { + broadcastTransaction(rawHex: $rawHex) + } +} + +query BitcoinCashScanUTXOs($address: String!, $page: Int!) { + bitcoincash { + unspentTxOutputsV5(address: $address, page: $page) { + oTxHash + oIndex + value { + value + } + oTxHex + address + isCoinbase + scriptHex + } + } } \ No newline at end of file diff --git a/packages/bitcoincash/src/datasource/indexer/queries/broadcast.query.ts b/packages/bitcoincash/src/datasource/indexer/queries/broadcast.query.ts new file mode 100644 index 00000000..f58bd4f3 --- /dev/null +++ b/packages/bitcoincash/src/datasource/indexer/queries/broadcast.query.ts @@ -0,0 +1,13 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { BitcoinCashBroadcastTransactionDocument } from '@xdefi-tech/chains-graphql'; + +export const broadcast = async (rawHex: string): Promise => { + const response = await gqlClient.query({ + query: BitcoinCashBroadcastTransactionDocument, + variables: { + rawHex, + }, + }); + + return response.data.bitcoincash.broadcastTransaction; +}; diff --git a/packages/bitcoincash/src/datasource/indexer/queries/index.ts b/packages/bitcoincash/src/datasource/indexer/queries/index.ts index 9cbb9018..f48bc8a8 100644 --- a/packages/bitcoincash/src/datasource/indexer/queries/index.ts +++ b/packages/bitcoincash/src/datasource/indexer/queries/index.ts @@ -1,3 +1,5 @@ export * from './transactions.query'; export * from './balances.query'; export * from './fees.query'; +export * from './broadcast.query'; +export * from './scanUTXOs.query'; diff --git a/packages/bitcoincash/src/datasource/indexer/queries/scanUTXOs.query.ts b/packages/bitcoincash/src/datasource/indexer/queries/scanUTXOs.query.ts new file mode 100644 index 00000000..d3f3a865 --- /dev/null +++ b/packages/bitcoincash/src/datasource/indexer/queries/scanUTXOs.query.ts @@ -0,0 +1,19 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { + BitcoinCashScanUtxOsDocument, + UnspentTransactionOutputV5, +} from '@xdefi-tech/chains-graphql'; + +export const scanUTXOs = async ( + address: string +): Promise => { + const response = await gqlClient.query({ + query: BitcoinCashScanUtxOsDocument, + variables: { + address, + page: 0, + }, + }); + + return response.data.bitcoincash.unspentTxOutputsV5; +}; diff --git a/packages/bitcoincash/src/msg.ts b/packages/bitcoincash/src/msg.ts index c038fb22..e3c8af03 100644 --- a/packages/bitcoincash/src/msg.ts +++ b/packages/bitcoincash/src/msg.ts @@ -37,7 +37,7 @@ export class ChainMsg extends BaseMsg { async buildTx() { const msgData = this.toData(); - const utxos = await this.provider.utxoDataSource.scanUTXOs(this.data.from); + const utxos = await this.provider.dataSource.scanUTXOs(this.data.from); const { fee } = await this.getFee(); if (!fee) throw new Error('Fee estimation is required for building transaction'); diff --git a/packages/core/src/common/client/gql.client.ts b/packages/core/src/common/client/gql.client.ts index ba438a10..fff82ddc 100644 --- a/packages/core/src/common/client/gql.client.ts +++ b/packages/core/src/common/client/gql.client.ts @@ -10,13 +10,13 @@ const wsLink = typeof window !== 'undefined' ? new GraphQLWsLink( createClient({ - url: 'wss://gateway-ws.xdefiservices.com/', + url: 'wss://gateway-ws.xdefi.services/', }) ) : null; const httpLink = new HttpLink({ - uri: 'https://gql-router.xdefiservices.com/graphql', + uri: 'https://gql-router.xdefi.services/graphql', fetch, }); diff --git a/packages/core/src/core/datasource/base.data-source.ts b/packages/core/src/core/datasource/base.data-source.ts index 4be1ccd8..112cd0e7 100644 --- a/packages/core/src/core/datasource/base.data-source.ts +++ b/packages/core/src/core/datasource/base.data-source.ts @@ -67,4 +67,13 @@ export abstract class DataSource { async getAccount(_address: string): Promise { return; } + + public async broadcast(_msgs: Msg[]): Promise { + throw new Error('Method not implemented.'); + } + + // Only for UTXO chains + public async scanUTXOs(_address: string): Promise { + throw new Error('Method not implemented.'); + } } diff --git a/packages/dogecoin/src/chain.provider.ts b/packages/dogecoin/src/chain.provider.ts index 4af30758..c3cf8313 100644 --- a/packages/dogecoin/src/chain.provider.ts +++ b/packages/dogecoin/src/chain.provider.ts @@ -1,4 +1,9 @@ -import { Chain, ChainDecorator, MsgEncoding } from '@xdefi-tech/chains-core'; +import { + Chain, + ChainDecorator, + MsgEncoding, + Transaction, +} from '@xdefi-tech/chains-core'; import { MsgBody, UtxoProvider } from '@xdefi-tech/chains-utxo'; import { IndexerDataSource } from './datasource'; @@ -22,4 +27,8 @@ export class DogecoinProvider extends UtxoProvider { IndexerDataSource: IndexerDataSource, }; } + + async broadcast(messages: ChainMsg[]): Promise { + return this.dataSource.broadcast(messages); + } } diff --git a/packages/dogecoin/src/datasource/indexer/indexer.data-source.ts b/packages/dogecoin/src/datasource/indexer/indexer.data-source.ts index d8ee60ba..ef05db25 100644 --- a/packages/dogecoin/src/datasource/indexer/indexer.data-source.ts +++ b/packages/dogecoin/src/datasource/indexer/indexer.data-source.ts @@ -11,13 +11,21 @@ import { FeeData, DefaultFeeOptions, } from '@xdefi-tech/chains-core'; +import { UTXO } from '@xdefi-tech/chains-utxo'; import type { UTXOManifest } from '@xdefi-tech/chains-utxo'; import { utils } from 'ethers'; import { Observable } from 'rxjs'; +import * as Dogecoin from 'bitcoinjs-lib'; import { ChainMsg } from '../../msg'; -import { getBalance, getTransactions, getFees } from './queries'; +import { + getBalance, + getTransactions, + getFees, + broadcast, + scanUTXOs, +} from './queries'; @Injectable() export class IndexerDataSource extends DataSource { @@ -29,6 +37,38 @@ export class IndexerDataSource extends DataSource { throw new Error('Current chain do not support NFTs'); } + async broadcast(messages: ChainMsg[]): Promise { + const result: Transaction[] = []; + for await (const message of messages) { + const { signedTransaction } = message; + + if (!message.hasSignature || !signedTransaction) { + throw new Error(`Message ${JSON.stringify(message)} is not signed`); + } + + const txHash = await broadcast(signedTransaction); + + result.push(Transaction.fromData({ hash: txHash })); + } + + return result; + } + + async scanUTXOs(address: string): Promise { + const utxos = await scanUTXOs(address); + return utxos.map((utxo) => { + const tx = Dogecoin.Transaction.fromHex(utxo.oTxHex as string); + const utxoMapped: UTXO = { + hash: utxo.oTxHash, + index: utxo.oIndex, + value: parseInt(utxo.value.value), + txHex: utxo.oTxHex as string, + witnessUtxo: tx.outs[utxo.oIndex], + }; + return utxoMapped; + }); + } + async getBalance(filter: BalanceFilter): Promise { const { address } = filter; const balances = await getBalance(address); diff --git a/packages/dogecoin/src/datasource/indexer/operations.graphql b/packages/dogecoin/src/datasource/indexer/operations.graphql index 807306ff..a80c6d15 100644 --- a/packages/dogecoin/src/datasource/indexer/operations.graphql +++ b/packages/dogecoin/src/datasource/indexer/operations.graphql @@ -59,4 +59,26 @@ query GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: I status } } -} \ No newline at end of file +} + +query DogecoinBroadcastTransaction($rawHex: String!) { + dogecoin { + broadcastTransaction(rawHex: $rawHex) + } +} + +query DogecoinScanUTXOs($address: String!, $page: Int!) { + dogecoin { + unspentTxOutputsV5(address: $address, page: $page) { + oTxHash + oIndex + value { + value + } + oTxHex + address + isCoinbase + scriptHex + } + } +} diff --git a/packages/dogecoin/src/datasource/indexer/queries/broadcast.query.ts b/packages/dogecoin/src/datasource/indexer/queries/broadcast.query.ts new file mode 100644 index 00000000..a0ac6724 --- /dev/null +++ b/packages/dogecoin/src/datasource/indexer/queries/broadcast.query.ts @@ -0,0 +1,13 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { BitcoinBroadcastTransactionDocument } from '@xdefi-tech/chains-graphql'; + +export const broadcast = async (rawHex: string): Promise => { + const response = await gqlClient.query({ + query: BitcoinBroadcastTransactionDocument, + variables: { + rawHex, + }, + }); + + return response.data.bitcoin.broadcastTransaction; +}; diff --git a/packages/dogecoin/src/datasource/indexer/queries/index.ts b/packages/dogecoin/src/datasource/indexer/queries/index.ts index 9cbb9018..f48bc8a8 100644 --- a/packages/dogecoin/src/datasource/indexer/queries/index.ts +++ b/packages/dogecoin/src/datasource/indexer/queries/index.ts @@ -1,3 +1,5 @@ export * from './transactions.query'; export * from './balances.query'; export * from './fees.query'; +export * from './broadcast.query'; +export * from './scanUTXOs.query'; diff --git a/packages/dogecoin/src/datasource/indexer/queries/scanUTXOs.query.ts b/packages/dogecoin/src/datasource/indexer/queries/scanUTXOs.query.ts new file mode 100644 index 00000000..64cf4fdb --- /dev/null +++ b/packages/dogecoin/src/datasource/indexer/queries/scanUTXOs.query.ts @@ -0,0 +1,19 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { + BitcoinScanUtxOsDocument, + UnspentTransactionOutputV5, +} from '@xdefi-tech/chains-graphql'; + +export const scanUTXOs = async ( + address: string +): Promise => { + const response = await gqlClient.query({ + query: BitcoinScanUtxOsDocument, + variables: { + address, + page: 0, + }, + }); + + return response.data.bitcoin.unspentTxOutputsV5; +}; diff --git a/packages/dogecoin/src/msg.ts b/packages/dogecoin/src/msg.ts index d6665a84..97f8045f 100644 --- a/packages/dogecoin/src/msg.ts +++ b/packages/dogecoin/src/msg.ts @@ -39,7 +39,7 @@ export class ChainMsg extends BaseMsg { async buildTx() { const msgData = this.toData(); - const utxos = await this.provider.utxoDataSource.scanUTXOs(this.data.from); + const utxos = await this.provider.dataSource.scanUTXOs(this.data.from); const { fee } = await this.getFee(); if (!fee) throw new Error('Fee estimation is required for building transaction'); diff --git a/packages/evm/src/signers/private-key.signer.ts b/packages/evm/src/signers/private-key.signer.ts index dbc95868..20c8dac2 100644 --- a/packages/evm/src/signers/private-key.signer.ts +++ b/packages/evm/src/signers/private-key.signer.ts @@ -21,7 +21,7 @@ export class PrivateKeySigner extends Signer.Provider { async sign( msg: ChainMsg, _derivation: string, - signatureType: SignatureType + signatureType: SignatureType = SignatureType.Transaction ): Promise { const wallet = new Wallet(this.key); const txData = await msg.buildTx(); diff --git a/packages/evm/src/signers/seed-phrase.signer.ts b/packages/evm/src/signers/seed-phrase.signer.ts index e3afa4e5..9e605b18 100644 --- a/packages/evm/src/signers/seed-phrase.signer.ts +++ b/packages/evm/src/signers/seed-phrase.signer.ts @@ -24,7 +24,7 @@ export class SeedPhraseSigner extends Signer.Provider { async sign( msg: ChainMsg, derivation: string, - signatureType: SignatureType + signatureType: SignatureType = SignatureType.Transaction ): Promise { const wallet = Wallet.fromMnemonic(this.key, derivation); const txData = await msg.buildTx(); diff --git a/packages/litecoin/src/chain.provider.ts b/packages/litecoin/src/chain.provider.ts index 206ec143..1b2565db 100644 --- a/packages/litecoin/src/chain.provider.ts +++ b/packages/litecoin/src/chain.provider.ts @@ -1,4 +1,4 @@ -import { Chain, ChainDecorator, MsgEncoding } from '@xdefi-tech/chains-core'; +import { Chain, ChainDecorator, MsgEncoding, Transaction } from '@xdefi-tech/chains-core'; import { MsgBody, UtxoProvider } from '@xdefi-tech/chains-utxo'; import { IndexerDataSource } from './datasource'; @@ -22,4 +22,8 @@ export class LitecoinProvider extends UtxoProvider { IndexerDataSource: IndexerDataSource, }; } + + async broadcast(messages: ChainMsg[]): Promise { + return this.dataSource.broadcast(messages); + } } diff --git a/packages/litecoin/src/datasource/indexer/indexer.data-source.ts b/packages/litecoin/src/datasource/indexer/indexer.data-source.ts index 99b355e7..7c931d0f 100644 --- a/packages/litecoin/src/datasource/indexer/indexer.data-source.ts +++ b/packages/litecoin/src/datasource/indexer/indexer.data-source.ts @@ -11,13 +11,20 @@ import { FeeData, DefaultFeeOptions, } from '@xdefi-tech/chains-core'; -import { UTXOManifest } from '@xdefi-tech/chains-utxo'; +import { UTXO, UTXOManifest } from '@xdefi-tech/chains-utxo'; import { utils } from 'ethers'; import { Observable } from 'rxjs'; +import * as Litecoin from 'bitcoinjs-lib'; import { ChainMsg } from '../../msg'; -import { getBalance, getTransactions, getFees } from './queries'; +import { + getBalance, + getTransactions, + getFees, + broadcast, + scanUTXOs, +} from './queries'; @Injectable() export class IndexerDataSource extends DataSource { @@ -29,6 +36,38 @@ export class IndexerDataSource extends DataSource { throw new Error('Current chain do not support NFTs'); } + async broadcast(messages: ChainMsg[]): Promise { + const result: Transaction[] = []; + for await (const message of messages) { + const { signedTransaction } = message; + + if (!message.hasSignature || !signedTransaction) { + throw new Error(`Message ${JSON.stringify(message)} is not signed`); + } + + const txHash = await broadcast(signedTransaction); + + result.push(Transaction.fromData({ hash: txHash })); + } + + return result; + } + + async scanUTXOs(address: string): Promise { + const utxos = await scanUTXOs(address); + return utxos.map((utxo) => { + const tx = Litecoin.Transaction.fromHex(utxo.oTxHex as string); + const utxoMapped: UTXO = { + hash: utxo.oTxHash, + index: utxo.oIndex, + value: parseInt(utxo.value.value), + txHex: utxo.oTxHex as string, + witnessUtxo: tx.outs[utxo.oIndex], + }; + return utxoMapped; + }); + } + async getBalance(filter: BalanceFilter): Promise { const { address } = filter; const balances = await getBalance(address); diff --git a/packages/litecoin/src/datasource/indexer/operations.graphql b/packages/litecoin/src/datasource/indexer/operations.graphql index 79ba40ba..c758476b 100644 --- a/packages/litecoin/src/datasource/indexer/operations.graphql +++ b/packages/litecoin/src/datasource/indexer/operations.graphql @@ -59,3 +59,25 @@ query GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: I } } } + +query LitecoinBroadcastTransaction($rawHex: String!) { + litecoin { + broadcastTransaction(rawHex: $rawHex) + } +} + +query LitecoinScanUTXOs($address: String!, $page: Int!) { + litecoin { + unspentTxOutputsV5(address: $address, page: $page) { + oTxHash + oIndex + value { + value + } + oTxHex + address + isCoinbase + scriptHex + } + } +} diff --git a/packages/litecoin/src/datasource/indexer/queries/broadcast.query.ts b/packages/litecoin/src/datasource/indexer/queries/broadcast.query.ts new file mode 100644 index 00000000..6921459c --- /dev/null +++ b/packages/litecoin/src/datasource/indexer/queries/broadcast.query.ts @@ -0,0 +1,13 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { LitecoinBroadcastTransactionDocument } from '@xdefi-tech/chains-graphql'; + +export const broadcast = async (rawHex: string): Promise => { + const response = await gqlClient.query({ + query: LitecoinBroadcastTransactionDocument, + variables: { + rawHex, + }, + }); + + return response.data.litecoin.broadcastTransaction; +}; diff --git a/packages/litecoin/src/datasource/indexer/queries/index.ts b/packages/litecoin/src/datasource/indexer/queries/index.ts index 9cbb9018..f48bc8a8 100644 --- a/packages/litecoin/src/datasource/indexer/queries/index.ts +++ b/packages/litecoin/src/datasource/indexer/queries/index.ts @@ -1,3 +1,5 @@ export * from './transactions.query'; export * from './balances.query'; export * from './fees.query'; +export * from './broadcast.query'; +export * from './scanUTXOs.query'; diff --git a/packages/litecoin/src/datasource/indexer/queries/scanUTXOs.query.ts b/packages/litecoin/src/datasource/indexer/queries/scanUTXOs.query.ts new file mode 100644 index 00000000..5a32d26c --- /dev/null +++ b/packages/litecoin/src/datasource/indexer/queries/scanUTXOs.query.ts @@ -0,0 +1,19 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { + LitecoinScanUtxOsDocument, + UnspentTransactionOutputV5, +} from '@xdefi-tech/chains-graphql'; + +export const scanUTXOs = async ( + address: string +): Promise => { + const response = await gqlClient.query({ + query: LitecoinScanUtxOsDocument, + variables: { + address, + page: 0, + }, + }); + + return response.data.litecoin.unspentTxOutputsV5; +}; diff --git a/packages/litecoin/src/msg.ts b/packages/litecoin/src/msg.ts index 021dccbd..a4a16716 100644 --- a/packages/litecoin/src/msg.ts +++ b/packages/litecoin/src/msg.ts @@ -37,7 +37,7 @@ export class ChainMsg extends BaseMsg { async buildTx() { const msgData = this.toData(); - const utxos = await this.provider.utxoDataSource.scanUTXOs(this.data.from); + const utxos = await this.provider.dataSource.scanUTXOs(this.data.from); const { fee } = await this.getFee(); if (!fee) throw new Error('Fee estimation is required for building transaction'); diff --git a/packages/utxo/src/chain.provider.ts b/packages/utxo/src/chain.provider.ts index 0009d4a3..d0ebe024 100644 --- a/packages/utxo/src/chain.provider.ts +++ b/packages/utxo/src/chain.provider.ts @@ -38,6 +38,7 @@ export class UtxoProvider extends Chain.Provider { this.rest = axios.create({ baseURL: manifest.rpcURL, }); + if (manifest.dataProviderType === 'haskoin') { this.utxoDataSource = new HaskoinDataProvider(manifest.dataProviderURL); } else if (manifest.dataProviderType === 'blockchair') { diff --git a/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts b/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts index 328562e6..941305a8 100644 --- a/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts +++ b/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts @@ -75,6 +75,7 @@ export class HaskoinDataProvider implements UTXODataProvider { constructor(baseURL: string) { this.api = axios.create({ baseURL }); } + broadcast(messages: ChainMsg[]): Promise[]> { throw new Error('Method not implemented.'); } diff --git a/utility-packages/graphql/codegen.yml b/utility-packages/graphql/codegen.yml index da12395e..0453ac4f 100644 --- a/utility-packages/graphql/codegen.yml +++ b/utility-packages/graphql/codegen.yml @@ -1,6 +1,8 @@ overwrite: true -schema: https://gql-router.dev.xdefiservices.com/graphql -documents: ../../**/*.graphql +schema: https://gql-router.xdefi.services/graphql +documents: + - '!../../node_modules/**/*.graphql' + - ../../**/*.graphql generates: src/gql/: preset: client diff --git a/utility-packages/graphql/src/gql/gql.ts b/utility-packages/graphql/src/gql/gql.ts index de54988d..0020cc84 100644 --- a/utility-packages/graphql/src/gql/gql.ts +++ b/utility-packages/graphql/src/gql/gql.ts @@ -15,26 +15,26 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ const documents = { 'query GetBinanceBalances($address: String!) {\n binance {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}\n\nquery GetBinanceTransactions($address: String!, $first: Int, $after: String, $blockRange: OptBlockSelector) {\n binance {\n transactions(\n address: $address\n first: $first\n after: $after\n blockRange: $blockRange\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n type\n }\n blockHeight\n data\n fee {\n value\n }\n fromAddress\n hash\n status\n time\n toAddress\n type\n }\n }\n }\n }\n}\n\nquery GetBinanceFee {\n binance {\n fee\n }\n}\n\nquery GetBinanceStatus {\n binance {\n status {\n lastBlock {\n hash\n height\n time\n txCount\n }\n }\n }\n}': types.GetBinanceBalancesDocument, - 'query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}': + 'query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinBroadcastTransaction($rawHex: String!) {\n bitcoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinScanUTXOs($address: String!, $page: Int!) {\n bitcoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}': types.BitcoinBalanceDocument, - 'query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}': + 'query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinCashBroadcastTransaction($rawHex: String!) {\n bitcoincash {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinCashScanUTXOs($address: String!, $page: Int!) {\n bitcoincash {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}': types.BitcoinCashBalanceDocument, 'query GetAssetsWithFilter($page: ConnectionArgs!, $filter: TokenFilter) {\n assets {\n tokens(page: $page, filter: $filter) {\n page {\n edges {\n node {\n contracts {\n address\n symbol\n chain\n scalingFactor\n }\n id\n price {\n amount\n scalingFactor\n }\n symbol\n name\n icon\n }\n }\n }\n }\n }\n}': types.GetAssetsWithFilterDocument, 'query CosmosBalance($address: String!) {\n cosmos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCosmosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cosmos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCosmosFees {\n cosmos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCosmosStatus {\n cosmos {\n status {\n lastBlock\n }\n }\n}\n\nquery OsmosisBalance($address: String!) {\n osmosis {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetOsmosisTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n osmosis {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetOsmosisFees {\n osmosis {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetOsmosisStatus {\n osmosis {\n status {\n lastBlock\n }\n }\n}\n\nquery AxelarBalance($address: String!) {\n axelar {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAxelarTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n axelar {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAxelarFees {\n axelar {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAxelarStatus {\n axelar {\n status {\n lastBlock\n }\n }\n}\n\nquery CrescentBalance($address: String!) {\n crescent {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCrescentTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n crescent {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCrescentFees {\n crescent {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCrescentStatus {\n crescent {\n status {\n lastBlock\n }\n }\n}\n\nquery KavaBalance($address: String!) {\n kava {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKavaTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kava {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKavaFees {\n kava {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKavaStatus {\n kava {\n status {\n lastBlock\n }\n }\n}\n\nquery AkashBalance($address: String!) {\n akash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAkashTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n akash {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAkashFees {\n akash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAkashStatus {\n akash {\n status {\n lastBlock\n }\n }\n}\n\nquery CronosBalance($address: String!) {\n cronos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCronosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cronos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCronosFees {\n cronos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCronosStatus {\n cronos {\n status {\n lastBlock\n }\n }\n}\n\nquery KujiraBalance($address: String!) {\n kujira {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKujiraTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kujira {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKujiraFees {\n kujira {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKujiraStatus {\n kujira {\n status {\n lastBlock\n }\n }\n}\n\nquery StrideBalance($address: String!) {\n stride {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStrideTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stride {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStrideFees {\n stride {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStrideStatus {\n stride {\n status {\n lastBlock\n }\n }\n}\n\nquery MarsBalance($address: String!) {\n mars {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetMarsTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n mars {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetMarsFees {\n mars {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetMarsStatus {\n mars {\n status {\n lastBlock\n }\n }\n}\n\nquery JunoBalance($address: String!) {\n juno {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetJunoTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n juno {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetJunoFees {\n juno {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetJunoStatus {\n juno {\n status {\n lastBlock\n }\n }\n}\n\nquery StargazeBalance($address: String!) {\n stargaze {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStargazeTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stargaze {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStargazeFees {\n stargaze {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStargazeStatus {\n stargaze {\n status {\n lastBlock\n }\n }\n}': types.CosmosBalanceDocument, - 'query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}': + 'query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery DogecoinBroadcastTransaction($rawHex: String!) {\n dogecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery DogecoinScanUTXOs($address: String!, $page: Int!) {\n dogecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}': types.DogecoinBalanceDocument, 'query EthereumBalance($address: String!) {\n ethereum {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}': types.EthereumBalanceDocument, - 'query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}': - types.GetCryptoAssetsDocument, - 'query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}': + 'query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery LitecoinBroadcastTransaction($rawHex: String!) {\n litecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery LitecoinScanUTXOs($address: String!, $page: Int!) {\n litecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}': types.LitecoinBalanceDocument, 'query GetSolanaBalance($address: String!) {\n solana {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n name\n image\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetSolanaTransactions($address: String!, $first: Int!, $after: String) {\n solana {\n transactions(address: $address, first: $first, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n fee {\n amount {\n value\n }\n payer\n }\n hash\n slot\n status\n timestamp\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n fromAddress\n toAddress\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetSolanaStatus {\n solana {\n status {\n lastBlock\n }\n }\n}\n\nquery GetSolanaFee {\n solana {\n fee {\n high\n low\n medium\n }\n }\n}': types.GetSolanaBalanceDocument, 'query GetTronBalance($address: String!) {\n tron {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n amount {\n value\n scalingFactor\n }\n }\n }\n}\n\nquery GetTronTransactions($address: String!, $first: Int) {\n tron {\n transactions(address: $address, first: $first) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n hash\n blockIndex\n blockNumber\n status\n value\n timestamp\n fromAddress\n toAddress\n transfers {\n amount {\n value\n }\n asset {\n ... on CryptoAsset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n fromAddress\n toAddress\n }\n }\n }\n }\n }\n}': types.GetTronBalanceDocument, + 'query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}': + types.GetCryptoAssetsDocument, }; /** @@ -61,14 +61,14 @@ export function gql( * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( - source: 'query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): typeof documents['query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; + source: 'query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinBroadcastTransaction($rawHex: String!) {\n bitcoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinScanUTXOs($address: String!, $page: Int!) {\n bitcoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}' +): typeof documents['query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinBroadcastTransaction($rawHex: String!) {\n bitcoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinScanUTXOs($address: String!, $page: Int!) {\n bitcoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( - source: 'query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): typeof documents['query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; + source: 'query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinCashBroadcastTransaction($rawHex: String!) {\n bitcoincash {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinCashScanUTXOs($address: String!, $page: Int!) {\n bitcoincash {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}' +): typeof documents['query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinCashBroadcastTransaction($rawHex: String!) {\n bitcoincash {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinCashScanUTXOs($address: String!, $page: Int!) {\n bitcoincash {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -85,8 +85,8 @@ export function gql( * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( - source: 'query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): typeof documents['query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; + source: 'query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery DogecoinBroadcastTransaction($rawHex: String!) {\n dogecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery DogecoinScanUTXOs($address: String!, $page: Int!) {\n dogecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}' +): typeof documents['query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery DogecoinBroadcastTransaction($rawHex: String!) {\n dogecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery DogecoinScanUTXOs($address: String!, $page: Int!) {\n dogecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -97,14 +97,8 @@ export function gql( * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( - source: 'query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}' -): typeof documents['query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}']; -/** - * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. - */ -export function gql( - source: 'query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}' -): typeof documents['query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}']; + source: 'query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery LitecoinBroadcastTransaction($rawHex: String!) {\n litecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery LitecoinScanUTXOs($address: String!, $page: Int!) {\n litecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}' +): typeof documents['query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery LitecoinBroadcastTransaction($rawHex: String!) {\n litecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery LitecoinScanUTXOs($address: String!, $page: Int!) {\n litecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -117,6 +111,12 @@ export function gql( export function gql( source: 'query GetTronBalance($address: String!) {\n tron {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n amount {\n value\n scalingFactor\n }\n }\n }\n}\n\nquery GetTronTransactions($address: String!, $first: Int) {\n tron {\n transactions(address: $address, first: $first) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n hash\n blockIndex\n blockNumber\n status\n value\n timestamp\n fromAddress\n toAddress\n transfers {\n amount {\n value\n }\n asset {\n ... on CryptoAsset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n fromAddress\n toAddress\n }\n }\n }\n }\n }\n}' ): typeof documents['query GetTronBalance($address: String!) {\n tron {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n amount {\n value\n scalingFactor\n }\n }\n }\n}\n\nquery GetTronTransactions($address: String!, $first: Int) {\n tron {\n transactions(address: $address, first: $first) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n hash\n blockIndex\n blockNumber\n status\n value\n timestamp\n fromAddress\n toAddress\n transfers {\n amount {\n value\n }\n asset {\n ... on CryptoAsset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n fromAddress\n toAddress\n }\n }\n }\n }\n }\n}']; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: 'query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}' +): typeof documents['query GetCryptoAssets($input: [CryptoAssetArgs!]!) {\n assets {\n cryptoAssets(input: $input) {\n chain\n contract\n id\n name\n symbol\n image\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n}']; export function gql(source: string) { return (documents as any)[source] ?? {}; diff --git a/utility-packages/graphql/src/gql/graphql.ts b/utility-packages/graphql/src/gql/graphql.ts index b77322ad..46adb6d6 100644 --- a/utility-packages/graphql/src/gql/graphql.ts +++ b/utility-packages/graphql/src/gql/graphql.ts @@ -18,7 +18,6 @@ export type Scalars = { Boolean: boolean; Int: number; Float: number; - AssetV0Args: any; /** * A datetime with timezone offset. * @@ -41,12 +40,6 @@ export type Scalars = { LocalDateTime: any; }; -export type Address = { - __typename?: 'Address'; - address: Scalars['String']; - chain: Scalars['String']; -}; - export enum AddressChain { /** Legacy, use "Arbitrum" instead */ ARBITRUM = 'ARBITRUM', @@ -186,21 +179,12 @@ export type AddressPortfolioFiat = { __typename?: 'AddressPortfolioFiat'; /** wallet address */ address: Scalars['String']; - /** chain */ - chain: Scalars['String']; /** errors if there was some issue with fetching data */ - errors?: Maybe>; + errors: Array; /** granularity of data (NOTE: experimental, can be removed) */ granularity?: Maybe; - /** historical balances sum of asset in USD at specific datetime */ + /** historical balances USD at specific datetime */ historicalBalanceSum: Array; - /** last balance value from `historical_balance_sum` */ - lastBalance?: Maybe; -}; - -export type AddressPortfolioRequest = { - address: Scalars['String']; - chain: PortfolioChainVariant; }; export type AddressRouteCheckTypeV2 = { @@ -210,13 +194,6 @@ export type AddressRouteCheckTypeV2 = { isValid: Scalars['Boolean']; }; -export type AddressRouteCheckTypeV3 = { - __typename?: 'AddressRouteCheckTypeV3'; - address: Scalars['String']; - chain: Scalars['String']; - isValid: Scalars['Boolean']; -}; - export type AddressRouteInputType = { address: Scalars['String']; chain: Scalars['String']; @@ -227,11 +204,6 @@ export type AddressRouteInputTypeV2 = { chain: Scalars['String']; }; -export type AddressRouteInputTypeV3 = { - address: Scalars['String']; - chain: Scalars['String']; -}; - export type AddressRouteType = { __typename?: 'AddressRouteType'; address: Scalars['String']; @@ -244,12 +216,6 @@ export type AddressRouteTypeV2 = { chain: Scalars['String']; }; -export type AddressRouteTypeV3 = { - __typename?: 'AddressRouteTypeV3'; - address: Scalars['String']; - chain: Scalars['String']; -}; - export type AddressType = { __typename?: 'AddressType'; address?: Maybe; @@ -259,6 +225,7 @@ export type AddressType = { export type AllAssetsFilter = { assetTypes?: InputMaybe>; ids?: InputMaybe>; + priceHistoryInterval?: InputMaybe; }; export type AllAssetsResponse = { @@ -274,6 +241,7 @@ export type Amount = { value: Scalars['String']; }; +/** Represent fiat amount in USD */ export type AmountFiat = { __typename?: 'AmountFiat'; amount: Scalars['String']; @@ -291,17 +259,10 @@ export type AmountType = { scalingFactor: Scalars['Float']; }; -export type AnnualPercentageRate = { - __typename?: 'AnnualPercentageRate'; - asset?: Maybe; - error?: Maybe; - provider?: Maybe; - rate?: Maybe; -}; - export type Arbitrum = { __typename?: 'Arbitrum'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; legacyNFTs: Array; @@ -316,6 +277,7 @@ export type ArbitrumBalancesArgs = { address: Scalars['String']; after?: InputMaybe; first?: InputMaybe; + tokenAddresses?: InputMaybe>; }; export type ArbitrumLegacyNfTsArgs = { @@ -335,17 +297,6 @@ export type ArbitrumTransactionsArgs = { first?: InputMaybe; }; -export type Asset = { - __typename?: 'Asset'; - address?: Maybe; - decimals?: Maybe; - id?: Maybe; - isERC721?: Maybe; - name?: Maybe; - symbol?: Maybe; - value?: Maybe; -}; - export type AssetAllAssetsType = AssetBaseType & { __typename?: 'AssetAllAssetsType'; /** Only for "CRYPTOCURRENCY" type */ @@ -418,6 +369,8 @@ export type AssetAmountType = { scalingFactor: Scalars['Float']; /** Current sparkline */ sparkline: Array; + /** Current sparkline image url */ + sparklineImageUrl?: Maybe; /** Updated on */ updatedOn: Scalars['Float']; /** Currency weekPriceChange */ @@ -426,12 +379,6 @@ export type AssetAmountType = { yearPriceChange?: Maybe; }; -export type AssetAmountV0 = { - __typename?: 'AssetAmountV0'; - amount: Scalars['String']; - asset: AssetV0; -}; - export type AssetBaseType = { /** Icon URL */ icon?: Maybe; @@ -676,14 +623,20 @@ export type AssetType = { losers?: Maybe>; /** Scaling factor for market cap */ lpTokens?: Maybe; - /** NFTs by chain, contract and token_id. */ - nftsV0?: Maybe>; - /** Trending popular (by market cap) */ + /** + * Trending popular (by market cap) + * @deprecated Use topMarketCap query instead + */ popular?: Maybe>; + search?: Maybe; /** Scaling factor for market cap */ tokens?: Maybe; /** Experimental tokenV0 assets */ tokensV0?: Maybe>; + /** Trending popular (by market cap) */ + topMarketCap?: Maybe>; + /** Trending coingecko tokens */ + trending?: Maybe>; }; export type AssetTypeAllAssetsArgs = { @@ -725,8 +678,9 @@ export type AssetTypeLpTokensArgs = { page: ConnectionArgs; }; -export type AssetTypeNftsV0Args = { - keys: Array; +export type AssetTypeSearchArgs = { + filter?: InputMaybe; + page: ConnectionArgs; }; export type AssetTypeTokensArgs = { @@ -740,18 +694,19 @@ export type AssetTypeTokensV0Args = { input: Array; }; -/** (experimental) Type that is responsible to resolve details (nft or token) */ -export type AssetV0 = { - __typename?: 'AssetV0'; - /** json encoded input arguments for payload resolver */ - args?: Maybe; - chain: Scalars['String']; - payload?: Maybe; +export type AssetV3 = { + __typename?: 'AssetV3'; + address?: Maybe; + assetId: Scalars['String']; + decimals?: Maybe; + icon?: Maybe; + id?: Maybe; + isERC721?: Maybe; + name?: Maybe; + symbol?: Maybe; + value?: Maybe; }; -/** (experimental) Union type that represent any asset (currently nft or token) */ -export type AssetV0Payload = NfTv0 | TokenV0; - export type AssetVariant = CryptoAsset | NftAsset; export type AssetWithAmount = { @@ -763,6 +718,7 @@ export type AssetWithAmount = { export type Aurora = { __typename?: 'Aurora'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; legacyNFTs: Array; @@ -777,6 +733,7 @@ export type AuroraBalancesArgs = { address: Scalars['String']; after?: InputMaybe; first?: InputMaybe; + tokenAddresses?: InputMaybe>; }; export type AuroraLegacyNfTsArgs = { @@ -796,16 +753,10 @@ export type AuroraTransactionsArgs = { first?: InputMaybe; }; -export type Auth = { - __typename?: 'Auth'; - accessToken: Scalars['String']; - refreshToken: Scalars['String']; - user: User; -}; - export type Avalanche = { __typename?: 'Avalanche'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; legacyNFTs: Array; @@ -820,6 +771,7 @@ export type AvalancheBalancesArgs = { address: Scalars['String']; after?: InputMaybe; first?: InputMaybe; + tokenAddresses?: InputMaybe>; }; export type AvalancheLegacyNfTsArgs = { @@ -853,13 +805,6 @@ export type Base = { name: Scalars['String']; }; -/** - * (experimental) Represent base activity - * - * All other activities should be build on top of these - */ -export type BasicActivityV0 = ReceiveAssetActivityV0 | SendAssetActivityV0; - export type Binance = { __typename?: 'Binance'; balances: Array; @@ -884,6 +829,7 @@ export type BinanceTransactionsArgs = { export type BinanceSmartChain = { __typename?: 'BinanceSmartChain'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; legacyNFTs: Array; @@ -898,6 +844,7 @@ export type BinanceSmartChainBalancesArgs = { address: Scalars['String']; after?: InputMaybe; first?: InputMaybe; + tokenAddresses?: InputMaybe>; }; export type BinanceSmartChainLegacyNfTsArgs = { @@ -956,7 +903,6 @@ export type BitcoinChain = { broadcastTransaction: Scalars['String']; fee?: Maybe; getTransactionByHashV5: UtxotransactionByHashV5; - latestHistoryActivityV0?: Maybe; legacyNFTs: Array; name: Scalars['String']; status: Statusv2; @@ -981,10 +927,6 @@ export type BitcoinChainGetTransactionByHashV5Args = { txHash: Scalars['String']; }; -export type BitcoinChainLatestHistoryActivityV0Args = { - address: Scalars['String']; -}; - export type BitcoinChainLegacyNfTsArgs = { address: Scalars['String']; }; @@ -1142,61 +1084,20 @@ export type BitcoincashChainUnspentTxOutputsV5Args = { export type BitcoincashChainTestNet = { __typename?: 'BitcoincashChainTestNet'; average24hFee?: Maybe; - balances: Array; - broadcastTransaction: Scalars['String']; fee?: Maybe; - getTransactionByHashV5: UtxotransactionByHashV5; name: Scalars['String']; - status: Statusv2; - /** @deprecated Use `transactions_v2` instead. */ - transactions: Array; - transactionsV2: Array; - transactionsV3: UtxoTransactionV2Connection; - /** @deprecated Use `unspent_tx_outputs_v5` instead. This endpoint will be removed after 31.12.2023 */ - unspentTxOutputs: Array; - unspentTxOutputsV5: Array; -}; - -export type BitcoincashChainTestNetBalancesArgs = { - address: Scalars['String']; -}; - -export type BitcoincashChainTestNetBroadcastTransactionArgs = { - rawHex: Scalars['String']; -}; - -export type BitcoincashChainTestNetGetTransactionByHashV5Args = { - txHash: Scalars['String']; -}; - -export type BitcoincashChainTestNetTransactionsArgs = { - address: Scalars['String']; - blockRange?: OptBlockRange; - dateRange?: OptDateRange; - pageNumber: Scalars['Int']; - pageSize: Scalars['Int']; -}; - -export type BitcoincashChainTestNetTransactionsV2Args = { - address: Scalars['String']; - pageNumber: Scalars['Int']; - pageSize: Scalars['Int']; -}; - -export type BitcoincashChainTestNetTransactionsV3Args = { - address: Scalars['String']; - after?: InputMaybe; - first: Scalars['Int']; }; -export type BitcoincashChainTestNetUnspentTxOutputsArgs = { - address: Scalars['String']; - page: Scalars['Int']; -}; - -export type BitcoincashChainTestNetUnspentTxOutputsV5Args = { - address: Scalars['String']; - page: Scalars['Int']; +/** Transaction object with necessary fields for risk analysis by Blowfish. */ +export type BlowfishEvmTxPayload = { + blockNumber?: InputMaybe; + chain?: InputMaybe; + dappDomain?: InputMaybe; + data?: InputMaybe; + fromAddress: Scalars['String']; + gas?: InputMaybe; + to: Scalars['String']; + value?: InputMaybe; }; export type BridgeTokenInput = { @@ -1204,11 +1105,6 @@ export type BridgeTokenInput = { name: Scalars['String']; }; -export type BridgeTokenInputV3 = { - address: Scalars['String']; - name: Scalars['String']; -}; - export enum CacheControlScope { PRIVATE = 'PRIVATE', PUBLIC = 'PUBLIC', @@ -1224,6 +1120,7 @@ export type CantoChain = { export type CantoEvm = { __typename?: 'CantoEVM'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; legacyNFTs: Array; @@ -1238,6 +1135,7 @@ export type CantoEvmBalancesArgs = { address: Scalars['String']; after?: InputMaybe; first?: InputMaybe; + tokenAddresses?: InputMaybe>; }; export type CantoEvmLegacyNfTsArgs = { @@ -1268,31 +1166,22 @@ export enum Chain { POLYGON = 'POLYGON', } +export type ChainPortfolio = { + __typename?: 'ChainPortfolio'; + chain: PortfolioChainVariant; + portfolioByAddr: Array; +}; + export type ChainType = { __typename?: 'ChainType'; - /** @deprecated The fee field is deprecated. To handle fee-related operations, utilize the fees-service directly. Deadline for transition: January 2024. */ fee: FeeType; name: Scalars['String']; }; -export enum Chains { - akash = 'akash', - alexar = 'alexar', - avalanche = 'avalanche', - cosmoshub = 'cosmoshub', - crescent = 'crescent', - ethereum = 'ethereum', - juno = 'juno', - kava = 'kava', - kujira = 'kujira', - osmosis = 'osmosis', - polygon = 'polygon', - sei = 'sei', - solana = 'solana', - stargaze = 'stargaze', - stride = 'stride', - terra2 = 'terra2', -} +export type ChainedAddresses = { + addresses: Array; + chain: PortfolioChainVariant; +}; export type ClaimStatus = { __typename?: 'ClaimStatus'; @@ -1303,27 +1192,10 @@ export type ClaimStatus = { status: Scalars['String']; }; -export type ClaimStatusV3 = { - __typename?: 'ClaimStatusV3'; - amountUsd: Scalars['Float']; - bonus: Scalars['Float']; - claimId: Scalars['String']; - dateModification?: Maybe; - status: Scalars['String']; -}; - -export enum ClassifierChainType { - Arbitrum = 'Arbitrum', - Avalanche = 'Avalanche', - BinanceSmartChain = 'BinanceSmartChain', - Ethereum = 'Ethereum', - Fantom = 'Fantom', - Polygon = 'Polygon', -} - export type CompositeTokenFilter = { chains?: InputMaybe>; ids?: InputMaybe>; + priceHistoryInterval?: InputMaybe; }; export type CompositeTokenResponse = { @@ -1365,6 +1237,7 @@ export type Contract = { export type CosmosBalanceChain = { __typename?: 'CosmosBalanceChain'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; name: Scalars['String']; @@ -1374,11 +1247,13 @@ export type CosmosBalanceChain = { export type CosmosBalanceChainBalancesArgs = { address: Scalars['String']; + tokenAddresses?: InputMaybe>; }; export type CosmosBasedChain = { __typename?: 'CosmosBasedChain'; average24hFee: DefaultGasFee; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; name: Scalars['String']; @@ -1389,6 +1264,7 @@ export type CosmosBasedChain = { export type CosmosBasedChainBalancesArgs = { address: Scalars['String']; + tokenAddresses?: InputMaybe>; }; export type CosmosBasedChainTransactionsArgs = { @@ -1412,34 +1288,12 @@ export type CosmosBasedChainWithNft = { name: Scalars['String']; }; -export type CosmosDelegationInput = { - amount: Scalars['Decimal']; - asset: SupportedAssets; - delegatorAddress: Scalars['String']; - delegatorPubkeyHex: Scalars['String']; - gasLimit?: InputMaybe; - memo: Scalars['String']; -}; - export type CosmosFee = { __typename?: 'CosmosFee'; amount: Array; payer?: Maybe; }; -export type CosmosIbcTransferInput = { - amount: Scalars['Decimal']; - destChain: Chains; - gasLimit?: InputMaybe; - memo: Scalars['String']; - recieverAddr: Scalars['String']; - senderAddr: Scalars['String']; - senderAsset: SupportedAssets; - senderPubkeyHex: Scalars['String']; - srcChain: Chains; - timeoutHeight: Scalars['Int']; -}; - export type CosmosLikeTransaction = { __typename?: 'CosmosLikeTransaction'; blockHeight: Scalars['Int']; @@ -1469,15 +1323,6 @@ export type CosmosLikeTransactionEdge = { node: CosmosLikeTransaction; }; -export type CosmosNativeStakedBalance = { - __typename?: 'CosmosNativeStakedBalance'; - amount: Scalars['Int']; - decimal: Scalars['Int']; - denom: Scalars['String']; - validatorAddress: Scalars['String']; - validatorName?: Maybe; -}; - export type CreateReferrer = { /** On chain wallet address of the referrer. Must be unique */ address: Scalars['String']; @@ -1487,28 +1332,10 @@ export type CreateReferrer = { signedMessage: Scalars['String']; }; -export type CreateReferrerV3 = { - /** On chain wallet address of the referrer. Must be unique */ - address: Scalars['String']; - /** Unique name of the Referrer */ - name: Scalars['String']; - /** Signed by the address to verify ownership. Must be {address}:{name} and signed by the address */ - signedMessage: Scalars['String']; -}; - -export enum CreditOutcome { - CONSUMED = 'CONSUMED', - INSUFFICIENT = 'INSUFFICIENT', -} - -export type Credits = { - __typename?: 'Credits'; - amount: Scalars['Int']; -}; - export type CronosEvm = { __typename?: 'CronosEVM'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; legacyNFTs: Array; @@ -1523,6 +1350,7 @@ export type CronosEvmBalancesArgs = { address: Scalars['String']; after?: InputMaybe; first?: InputMaybe; + tokenAddresses?: InputMaybe>; }; export type CronosEvmLegacyNfTsArgs = { @@ -1594,20 +1422,10 @@ export type CryptoAssetInputV2 = { symbol?: InputMaybe; }; -export type CryptoAssetInputV3 = { - chain?: InputMaybe; - contract?: InputMaybe; - decimals?: InputMaybe; - id?: InputMaybe; - image?: InputMaybe; - name?: InputMaybe; - price?: InputMaybe; - symbol?: InputMaybe; -}; - export type CryptoCurrencyFilter = { chains?: InputMaybe>; ids?: InputMaybe>; + priceHistoryInterval?: InputMaybe; symbols?: InputMaybe>; }; @@ -1679,8 +1497,6 @@ export type DefiProtocolType = { symbol: Scalars['String']; }; -export type DetailedActivityV0 = SwapAssetActivityV0; - export type DogeChain = { __typename?: 'DogeChain'; average24hFee?: Maybe; @@ -1758,18 +1574,6 @@ export type Eip1559GasFee = { medium?: Maybe; }; -export type EthtxPreview = { - __typename?: 'ETHTXPreview'; - chainId: Scalars['Int']; - data: Scalars['String']; - fromAddress: Scalars['String']; - gas: Scalars['String']; - maxFeePerGas: Scalars['String']; - nonce: Scalars['Int']; - toAddress: Scalars['String']; - value: Scalars['String']; -}; - export type EvmTransactionLog = { __typename?: 'EVMTransactionLog'; data?: Maybe; @@ -1779,11 +1583,29 @@ export type EvmTransactionLog = { topic3?: Maybe; }; +/** Transaction object with necessary fields for simulation and classification. */ +export type EvmTransactionPayload = { + chain?: InputMaybe; + data: Scalars['String']; + fromAddress: Scalars['String']; + to: Scalars['String']; + value?: InputMaybe; +}; + +/** Transaction object with necessary fields for simulation and classification. */ +export type EvmTransactionPayloadV2 = { + blockNumber?: InputMaybe; + chain?: InputMaybe; + data: Scalars['String']; + fromAddress: Scalars['String']; + to: Scalars['String']; + value?: InputMaybe; +}; + export type EvmTransactionV2 = { __typename?: 'EVMTransactionV2'; blockIndex: Scalars['Int']; blockNumber: Scalars['Int']; - decoded?: Maybe; fee: Scalars['JSON']; fromAddress: Scalars['String']; hash: Scalars['String']; @@ -1814,24 +1636,12 @@ export type EvmTransactionV2Edge = { node: EvmTransactionV2; }; -export type Erc20ApproveInput = { - amount: Scalars['Decimal']; - asset: SupportedAssets; - fromAddress: Scalars['String']; - gas: Scalars['Decimal']; - gasPrice?: InputMaybe; - maxFeePerGas: Scalars['Decimal']; - maxPriorityFeePerGas: Scalars['Decimal']; - nonce: Scalars['Int']; - spenderAddress: Scalars['String']; -}; - export type Ethereum = { __typename?: 'Ethereum'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; - latestHistoryActivityV0?: Maybe; legacyNFTs: Array; name: Scalars['String']; nfts: Array; @@ -1844,10 +1654,7 @@ export type EthereumBalancesArgs = { address: Scalars['String']; after?: InputMaybe; first?: InputMaybe; -}; - -export type EthereumLatestHistoryActivityV0Args = { - address: Scalars['String']; + tokenAddresses?: InputMaybe>; }; export type EthereumLegacyNfTsArgs = { @@ -1867,26 +1674,28 @@ export type EthereumTransactionsArgs = { first?: InputMaybe; }; -export type ExplainedTransaction = { - __typename?: 'ExplainedTransaction'; +export type ExplainedTransactionV3 = { + __typename?: 'ExplainedTransactionV3'; args: Array; - asset: Array; confidence: Scalars['Float']; + inputAssets: Array; + outputAssets: Array; type: TransactionType; }; -export type ExplainedTransactionV2 = { - __typename?: 'ExplainedTransactionV2'; +export type ExplainedTransactionV4 = { + __typename?: 'ExplainedTransactionV4'; args: Array; confidence: Scalars['Float']; - inputAssets: Array; - outputAssets: Array; - type: TransactionType; + inputAssets: Array; + outputAssets: Array; + type: TxClassifierTxType; }; export type Fantom = { __typename?: 'Fantom'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; legacyNFTs: Array; @@ -1901,6 +1710,7 @@ export type FantomBalancesArgs = { address: Scalars['String']; after?: InputMaybe; first?: InputMaybe; + tokenAddresses?: InputMaybe>; }; export type FantomLegacyNfTsArgs = { @@ -1941,17 +1751,6 @@ export type FeeType = { value?: Maybe; }; -/** (experimental) Represent amount of asset paid by payer(s) */ -export type FeeV0 = { - __typename?: 'FeeV0'; - /** The sum of amount paid by payers */ - amount: Scalars['String']; - /** The asset that was used to pay the fee */ - asset: AssetV0; - /** Who paid the fee */ - payer: Array; -}; - /** Unable to fetch some or all tokens information */ export type FetchingError = { __typename?: 'FetchingError'; @@ -1983,12 +1782,11 @@ export type FiatCurrencyType = { export enum FiatGranularity { DAY = 'DAY', FIVE_MINUTE = 'FIVE_MINUTE', - THIRTY_MINUTES = 'THIRTY_MINUTES', - TWO_HOURS = 'TWO_HOURS', + HOUR = 'HOUR', } export type FilterArgs = { - chains?: InputMaybe>; + chain?: InputMaybe; pool?: InputMaybe; }; @@ -2010,13 +1808,6 @@ export type GnosisLegacyNfTsArgs = { address: Scalars['String']; }; -/** Portfolio that groups wallets */ -export type GroupedWalletsPortfolio = { - __typename?: 'GroupedWalletsPortfolio'; - stats?: Maybe; - wallets: Array; -}; - export type ImageType = { __typename?: 'ImageType'; data: Scalars['String']; @@ -2041,6 +1832,7 @@ export type InvestingTypePoolsArgs = { export type JunoChain = { __typename?: 'JunoChain'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; name: Scalars['String']; @@ -2052,6 +1844,7 @@ export type JunoChain = { export type JunoChainBalancesArgs = { address: Scalars['String']; + tokenAddresses?: InputMaybe>; }; export type JunoChainNftsArgs = { @@ -2096,44 +1889,6 @@ export type LeaderboardEntry = { volumeUsd: Scalars['Decimal']; }; -export type LeaderboardEntryV3 = { - __typename?: 'LeaderboardEntryV3'; - /** EVM address of the user */ - evmAddress: Scalars['String']; - /** Volume that was swapped by the address */ - volumeUsd: Scalars['Decimal']; -}; - -export type LeaderboardV3 = { - __typename?: 'LeaderboardV3'; - /** CCTP leaderboard details */ - cctpV3?: Maybe>; -}; - -export type LidoErc20AllowanceInput = { - asset: SupportedAssets; - ownerAddress: Scalars['String']; -}; - -export type LidoStakedAssetBalance = { - __typename?: 'LidoStakedAssetBalance'; - amount: Scalars['String']; - asset: Scalars['String']; - chain: Scalars['String']; - decimal: Scalars['Int']; -}; - -export type LidoStakingInput = { - address: Scalars['String']; - asset: SupportedAssets; - gas: Scalars['Decimal']; - gasPrice?: InputMaybe; - maxFeePerGas: Scalars['Decimal']; - maxPriorityFeePerGas: Scalars['Decimal']; - nonce: Scalars['Int']; - stakeValue: Scalars['Decimal']; -}; - export type LitecoinChain = { __typename?: 'LitecoinChain'; average24hFee?: Maybe; @@ -2197,112 +1952,30 @@ export type LitecoinChainUnspentTxOutputsV5Args = { export type LitecoinChainTestNet = { __typename?: 'LitecoinChainTestNet'; average24hFee?: Maybe; - balances: Array; - broadcastTransaction: Scalars['String']; fee?: Maybe; - getTransactionByHashV5: UtxotransactionByHashV5; name: Scalars['String']; - status: Statusv2; - /** @deprecated Use `transactions_v2` instead. */ - transactions: Array; - transactionsV2: Array; - transactionsV3: UtxoTransactionV2Connection; - /** @deprecated Use `unspent_tx_outputs_v5` instead. This endpoint will be removed after 31.12.2023 */ - unspentTxOutputs: Array; - unspentTxOutputsV5: Array; -}; - -export type LitecoinChainTestNetBalancesArgs = { - address: Scalars['String']; -}; - -export type LitecoinChainTestNetBroadcastTransactionArgs = { - rawHex: Scalars['String']; -}; - -export type LitecoinChainTestNetGetTransactionByHashV5Args = { - txHash: Scalars['String']; }; -export type LitecoinChainTestNetTransactionsArgs = { - address: Scalars['String']; - blockRange?: OptBlockRange; - dateRange?: OptDateRange; - pageNumber: Scalars['Int']; - pageSize: Scalars['Int']; +export type MayaChain = { + __typename?: 'MayaChain'; + /** Native (always present) and token balances for address */ + balances: Array; + fee?: Maybe; + name: Scalars['String']; + status: Status; + transactions: ThorchainTransactionConnection; + version: Array; }; -export type LitecoinChainTestNetTransactionsV2Args = { +export type MayaChainBalancesArgs = { address: Scalars['String']; - pageNumber: Scalars['Int']; - pageSize: Scalars['Int']; + tokenAddress?: InputMaybe>; }; -export type LitecoinChainTestNetTransactionsV3Args = { +export type MayaChainTransactionsArgs = { address: Scalars['String']; after?: InputMaybe; - first: Scalars['Int']; -}; - -export type LitecoinChainTestNetUnspentTxOutputsArgs = { - address: Scalars['String']; - page: Scalars['Int']; -}; - -export type LitecoinChainTestNetUnspentTxOutputsV5Args = { - address: Scalars['String']; - page: Scalars['Int']; -}; - -export enum LoginChain { - BITCOIN = 'BITCOIN', - ETHEREUM = 'ETHEREUM', -} - -export type LpBalance = { - __typename?: 'LpBalance'; - address: Scalars['String']; - balance: Scalars['Float']; - balanceUSD: Scalars['Float']; - createdAt: Scalars['String']; - decimals: Scalars['Int']; - image?: Maybe; - images?: Maybe>; - key: Scalars['String']; - liquidity: Scalars['Float']; - name: Scalars['String']; - network: Scalars['String']; - platform: Scalars['String']; - poolAddress?: Maybe; - price: Scalars['Float']; - rawBalance: Scalars['String']; - symbol: Scalars['String']; - tokens: Array; - updatedAt: Scalars['String']; -}; - -export type LpToken = { - __typename?: 'LpToken'; - address: Scalars['String']; - createdAt: Scalars['String']; - decimals: Scalars['Int']; - image?: Maybe; - images?: Maybe>; - key: Scalars['String']; - liquidity: Scalars['Float']; - name: Scalars['String']; - network: Scalars['String']; - platform: Scalars['String']; - poolAddress?: Maybe; - price: Scalars['Float']; - symbol: Scalars['String']; - updatedAt: Scalars['String']; -}; - -export type MayaChain = { - __typename?: 'MayaChain'; - fee?: Maybe; - name: Scalars['String']; + first?: Scalars['Int']; }; /** Transactions fee management for MAYA chain. */ @@ -2342,47 +2015,15 @@ export type MediaV2 = { export type Mutation = { __typename?: 'Mutation'; addComment: Reputation; - addCreditsForUser: Credits; - addUserAddress: User; - anonymousLogin: Auth; claimFees?: Maybe; - claimFeesV3?: Maybe; - consumeCreditsForUser: CreditOutcome; /** Publicly exposed Create a referrer */ createReferrer?: Maybe; - /** Publicly exposed Create a referrer */ - createReferrerV3?: Maybe; - createUser: Auth; - /** - * The difference between these two credit consumption methods is that first checks and tries - * to consume credits or fails if they are insufficent - * the second one just blindly subtracts them with possibility to go to negative - * Those two methods are required to support the following scenario for query cost calculation: - * 1. router gets request from user - * 2. it calculates (statically) query cost and credits by analyzing query and tries to subtract credits - * BEFORE query execution. Rejects if insufficient credits - * 3. when query is executed, response is analyzed to calculated adjusted cost and credits - * 4. router then forces user credit subtraction without any tries, because query is already executed - * If we go into negative territory it will efficiently stop query execution at point 2. anyway and also - * will require user to cover for any consumed credits - * Alternative approach would be permit or reservation based, when step 2. reserves some amount and step 4. commits actual one, - * but it still requires to know reservation size in advance and requires more coordination on db level. - */ - forceConsumeCreditsForUser: CreditOutcome; - loginWithPassword: Auth; - loginWithSignature: Auth; - refreshAccessToken: Auth; transactionHashV2: Scalars['String']; - transactionHashV3: Scalars['String']; transactions: Array; transactionsV2: PostRouteTypeV2; - transactionsV3: PostRouteTypeV3; transactonHash: Scalars['String']; - updateUserSettings: User; /** Create or update a referrer. If id is provided, the referrer will be updated.Otherwise, a new referrer will be created. Sig controlled by an admin */ upsertReferrer?: Maybe; - /** Create or update a referrer. If id is provided, the referrer will be updated.Otherwise, a new referrer will be created. Sig controlled by an admin */ - upsertReferrerV3?: Maybe; }; export type MutationAddCommentArgs = { @@ -2391,67 +2032,16 @@ export type MutationAddCommentArgs = { source: Scalars['String']; }; -export type MutationAddCreditsForUserArgs = { - creditAmount: Scalars['Int']; - externalUserId: Scalars['String']; -}; - -export type MutationAddUserAddressArgs = { - address: Scalars['String']; - chain: LoginChain; - signature: Scalars['String']; -}; - -export type MutationConsumeCreditsForUserArgs = { - creditAmount: Scalars['Int']; - externalUserId: Scalars['String']; -}; - export type MutationCreateReferrerArgs = { referrer: CreateReferrer; }; -export type MutationCreateReferrerV3Args = { - referrer: CreateReferrerV3; -}; - -export type MutationCreateUserArgs = { - password: Scalars['String']; - username: Scalars['String']; -}; - -export type MutationForceConsumeCreditsForUserArgs = { - creditAmount: Scalars['Int']; - externalUserId: Scalars['String']; -}; - -export type MutationLoginWithPasswordArgs = { - password: Scalars['String']; - username: Scalars['String']; -}; - -export type MutationLoginWithSignatureArgs = { - chain: LoginChain; - signature: Scalars['String']; - username: Scalars['String']; -}; - -export type MutationRefreshAccessTokenArgs = { - token: Scalars['String']; -}; - export type MutationTransactionHashV2Args = { routeId: Scalars['String']; tradeId: Scalars['String']; transactionHash: Scalars['String']; }; -export type MutationTransactionHashV3Args = { - routeId: Scalars['String']; - tradeId: Scalars['String']; - transactionHash: Scalars['String']; -}; - export type MutationTransactionsArgs = { routeData: RouteTransactionInputType; }; @@ -2460,20 +2050,12 @@ export type MutationTransactionsV2Args = { routeData: RouteInputTypeV2; }; -export type MutationTransactionsV3Args = { - routeData: RouteInputTypeV3; -}; - export type MutationTransactonHashArgs = { routeId: Scalars['String']; signedHash: Scalars['String']; tradeId: Scalars['Float']; }; -export type MutationUpdateUserSettingsArgs = { - input: UserSettingsInput; -}; - export type MutationUpsertReferrerArgs = { address: Scalars['String']; feeTier: Scalars['String']; @@ -2481,19 +2063,11 @@ export type MutationUpsertReferrerArgs = { name: Scalars['String']; }; -export type MutationUpsertReferrerV3Args = { - address: Scalars['String']; - feeTier: Scalars['String']; - id?: InputMaybe; - name: Scalars['String']; -}; - /** attributes data from opensea spec */ export type NftAttribute = { __typename?: 'NFTAttribute'; displayType?: Maybe; traitType: Scalars['String']; - /** according to opensea spec this can be string or number or float number */ value: Scalars['JSON']; }; @@ -2519,36 +2093,6 @@ export type NftLastSaleV2 = { quantity: Amount; }; -/** - * (experimental) NFT for a given chain, contract and token_id - * - * # Note - * This is just to query different service to resolve NFT details - */ -export type NfTv0 = { - __typename?: 'NFTv0'; - attributes?: Maybe>; - chain?: Maybe; - collection?: Maybe; - contract?: Maybe; - contractType?: Maybe; - description?: Maybe; - isNftSpam?: Maybe; - lastSale?: Maybe; - location?: Maybe; - media?: Maybe>; - name?: Maybe; - spamScore?: Maybe; - symbol?: Maybe; - tokenId?: Maybe; -}; - -export type NfTv0Args = { - chain?: InputMaybe; - contract?: InputMaybe; - tokenId?: InputMaybe; -}; - export type NfTv2 = { __typename?: 'NFTv2'; attributes: Array; @@ -2655,19 +2199,6 @@ export type NftAsset = { tokenId: Scalars['String']; }; -export enum NftChainType { - Arbitrum = 'Arbitrum', - Avalanche = 'Avalanche', - Base = 'Base', - BinanceSmartChain = 'BinanceSmartChain', - Bitcoin = 'Bitcoin', - Ethereum = 'Ethereum', - Gnosis = 'Gnosis', - Optimism = 'Optimism', - Polygon = 'Polygon', - Solana = 'Solana', -} - /** A both end inclusive range selector for block */ export type OptBlockRange = { /** The lower bound of the range (inclusive). */ @@ -2697,6 +2228,7 @@ export type OptDateSelector = { export type Optimism = { __typename?: 'Optimism'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; legacyNFTs: Array; @@ -2711,6 +2243,7 @@ export type OptimismBalancesArgs = { address: Scalars['String']; after?: InputMaybe; first?: InputMaybe; + tokenAddresses?: InputMaybe>; }; export type OptimismLegacyNfTsArgs = { @@ -2768,6 +2301,7 @@ export type PickObjectType = { export type Polygon = { __typename?: 'Polygon'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; legacyNFTs: Array; @@ -2782,6 +2316,7 @@ export type PolygonBalancesArgs = { address: Scalars['String']; after?: InputMaybe; first?: InputMaybe; + tokenAddresses?: InputMaybe>; }; export type PolygonLegacyNfTsArgs = { @@ -2887,6 +2422,7 @@ export enum PortfolioChainVariant { Sentinel = 'Sentinel', Shentu = 'Shentu', Sifchain = 'Sifchain', + Solana = 'Solana', Sommelier = 'Sommelier', Stargaze = 'Stargaze', Starname = 'Starname', @@ -2899,25 +2435,18 @@ export enum PortfolioChainVariant { Umee = 'Umee', } -/** General structure to provide stats for [WalletPortfolio] and [GroupedWalletsPortfolio] */ -export type PortfolioStats = { - __typename?: 'PortfolioStats'; - /** last available balance from `spark_line` */ - lastBalance?: Maybe; - /** change between last and first balance in sparkline */ - performance?: Maybe; - sparkLine: Array; -}; - export type PostRouteTypeV2 = { __typename?: 'PostRouteTypeV2'; routeId: Scalars['String']; }; -export type PostRouteTypeV3 = { - __typename?: 'PostRouteTypeV3'; - routeId: Scalars['String']; -}; +/** Price history interval */ +export enum PriceHistoryInterval { + day = 'day', + month = 'month', + week = 'week', + year = 'year', +} /** Prices history contains history information for each asset: its price, market caps and total volumes. All those metrics provided for different time frames: day, week, month and year. */ export type PriceHistoryType = { @@ -2937,11 +2466,6 @@ export type PriceInputV2 = { scalingFactor?: Scalars['Int']; }; -export type PriceInputV3 = { - amount?: Scalars['String']; - scalingFactor?: Scalars['Int']; -}; - export type ProviderHealth = { __typename?: 'ProviderHealth'; error?: Maybe; @@ -2962,13 +2486,6 @@ export type ProviderInputTypeV2 = { time?: InputMaybe; }; -export type ProviderInputTypeV3 = { - icon?: InputMaybe; - id: Scalars['String']; - name?: InputMaybe; - time?: InputMaybe; -}; - export type ProviderType = { __typename?: 'ProviderType'; icon?: Maybe; @@ -2985,21 +2502,6 @@ export type ProviderTypeV2 = { time: Scalars['String']; }; -export type ProviderTypeV3 = { - __typename?: 'ProviderTypeV3'; - icon: Scalars['String']; - id: Scalars['String']; - name: Scalars['String']; - time: Scalars['String']; -}; - -export enum Providers { - Lido = 'Lido', - Meria = 'Meria', - StakeLab = 'StakeLab', - Stride = 'Stride', -} - export type Query = { __typename?: 'Query'; akash: CosmosBasedChain; @@ -3031,13 +2533,8 @@ export type Query = { /** Fetch list of all available tokens */ cryptoCurrencies: Array; dapp: DAppReputation; - decodeTransaction?: Maybe; dogecoin: DogeChain; ethereum: Ethereum; - /** @deprecated Passing a dictionary object is better than a JSON. Use explainTransactionV2. */ - explainTransaction?: Maybe; - explainTransactionV2?: Maybe; - explainTransactionV3?: Maybe; fantom: Fantom; /** Fetch list of fiat currencies */ fiatCurrencies: Array; @@ -3050,22 +2547,20 @@ export type Query = { kujira: CosmosBasedChain; litecoin: LitecoinChain; litecoinTestnet: LitecoinChainTestNet; - lpTokens: Array; mars: CosmosBasedChain; mayachain: MayaChain; near: NearChain; optimism: Optimism; osmosis: CosmosBasedChain; polygon: Polygon; - portfolio: GroupedWalletsPortfolio; + portfolio: Array; quasar: CosmosBasedChain; reputation: Reputation; + reputationV2: ReputationV2; routing: RoutingType; routingV2?: Maybe; - routingV3?: Maybe; sei: CosmosBalanceChain; solana: SolanaChain; - staking: StakingService; stargaze: StargazeChain; stride: CosmosBasedChain; /** Terra2 */ @@ -3076,14 +2571,10 @@ export type Query = { /** Fetch list of all available tokens */ tokens: Array; trackWalletConnect?: Maybe; - trackWalletConnectV3?: Maybe; tron: Tron; - user: User; - version: Scalars['String']; + txClassifier: TxClassifier; /** Fetch wallet information */ walletInfo: WalletInfo; - /** Fetch wallet information */ - walletInfoV3: WalletInfoV3; zkSync: ZkSync; }; @@ -3106,38 +2597,14 @@ export type QueryDappArgs = { app: DAppReputationInput; }; -export type QueryDecodeTransactionArgs = { - chain: Scalars['String']; - payload: Scalars['String']; - to: Scalars['String']; -}; - -export type QueryExplainTransactionArgs = { - chain: Scalars['String']; - payload: Scalars['String']; -}; - -export type QueryExplainTransactionV2Args = { - payload: TransactionPayload; -}; - -export type QueryExplainTransactionV3Args = { - payload: TransactionPayload; -}; - export type QueryFiatCurrenciesArgs = { after?: InputMaybe; ids?: InputMaybe>; }; -export type QueryLpTokensArgs = { - address: Scalars['String']; - chains?: InputMaybe>; -}; - export type QueryPortfolioArgs = { timePeriod: TimePeriod; - wallets: Array; + wallets: Array; }; export type QueryReputationArgs = { @@ -3147,6 +2614,14 @@ export type QueryReputationArgs = { offest?: Scalars['Int']; }; +export type QueryReputationV2Args = { + address: Scalars['String']; + approved?: InputMaybe; + chain: ReputationChains; + cursor?: InputMaybe; + first?: Scalars['Int']; +}; + export type QueryTokensArgs = { after?: InputMaybe; filter?: InputMaybe; @@ -3157,38 +2632,15 @@ export type QueryTrackWalletConnectArgs = { walletProvider: Scalars['String']; }; -export type QueryTrackWalletConnectV3Args = { - walletAddress: Scalars['String']; - walletProvider: Scalars['String']; -}; - export type QueryWalletInfoArgs = { address: Scalars['String']; }; -export type QueryWalletInfoV3Args = { - address: Scalars['String']; -}; - -/** (experimental) Represent receive asset activity, valid with wallet context */ -export type ReceiveAssetActivityV0 = { - __typename?: 'ReceiveAssetActivityV0'; - amount: Scalars['String']; - asset: AssetV0; - /** Represent wallet address that send the asset */ - from: Array; -}; - export type ReferralBonus = { __typename?: 'ReferralBonus'; bonus?: Maybe; }; -export type ReferralBonusV3 = { - __typename?: 'ReferralBonusV3'; - bonus?: Maybe; -}; - export type ReferralFeeSummary = { __typename?: 'ReferralFeeSummary'; bonusArbEarned: Scalars['Decimal']; @@ -3205,44 +2657,17 @@ export type ReferralFeeSummary = { userType: Scalars['String']; }; -export type ReferralFeeSummaryV3 = { - __typename?: 'ReferralFeeSummaryV3'; - bonusArbEarned: Scalars['Decimal']; - claimHistory: Array; - claimableFees: Scalars['Decimal']; - feeTier: Scalars['Decimal']; - last7dFees: Scalars['Decimal']; - last30dFees: Scalars['Decimal']; - lifetimeFees: Scalars['Decimal']; - referrerId: Scalars['String']; - totalAssociatedAddresses: Scalars['Int']; - totalReferralVolume: Scalars['Decimal']; - url: Scalars['String']; - userType: Scalars['String']; -}; - export type ReferralInputType = { link?: InputMaybe; medium?: InputMaybe; }; -export type ReferralInputTypeV3 = { - link?: InputMaybe; - medium?: InputMaybe; -}; - export type ReferralType = { __typename?: 'ReferralType'; link?: Maybe; medium?: Maybe; }; -export type ReferralTypeV3 = { - __typename?: 'ReferralTypeV3'; - link?: Maybe; - medium?: Maybe; -}; - export type Referrer = { __typename?: 'Referrer'; /** On chain wallet address of the referrer. Must be unique */ @@ -3255,18 +2680,6 @@ export type Referrer = { name: Scalars['String']; }; -export type ReferrerV3 = { - __typename?: 'ReferrerV3'; - /** On chain wallet address of the referrer. Must be unique */ - address: Scalars['String']; - /** Fee tier of the referrer. Must be between [0, 1] */ - feeTier: Scalars['String']; - id: Scalars['String']; - link?: Maybe; - /** Name of the Referrer. Must be unique */ - name: Scalars['String']; -}; - export type ReferrerWithFees = { __typename?: 'ReferrerWithFees'; /** On chain wallet address of the referrer. Must be unique */ @@ -3283,22 +2696,6 @@ export type ReferrerWithFees = { name: Scalars['String']; }; -export type ReferrerWithFeesV3 = { - __typename?: 'ReferrerWithFeesV3'; - /** On chain wallet address of the referrer. Must be unique */ - address: Scalars['String']; - /** Fees that the referrer already claimed from XDEFI */ - collectedFees?: Maybe; - /** Fee tier of the referrer. Must be between [0, 1] */ - feeTier: Scalars['String']; - /** Total fees generated by the referrer for XDEFI */ - generatedFees?: Maybe; - id: Scalars['String']; - link?: Maybe; - /** Name of the Referrer. Must be unique */ - name: Scalars['String']; -}; - export type RefuelInfoType = { __typename?: 'RefuelInfoType'; destChain: Scalars['String']; @@ -3307,14 +2704,6 @@ export type RefuelInfoType = { srcChain: Scalars['String']; }; -export type RefuelInfoTypeV3 = { - __typename?: 'RefuelInfoTypeV3'; - destChain: Scalars['String']; - maxAmount: Scalars['Decimal']; - minAmount: Scalars['Decimal']; - srcChain: Scalars['String']; -}; - export type Reputation = { __typename?: 'Reputation'; comments: Array; @@ -3324,69 +2713,201 @@ export type Reputation = { location: Scalars['String']; }; -export type ReputationComment = { - __typename?: 'ReputationComment'; - approved: Scalars['Boolean']; - commentId: Scalars['Int']; - date: Scalars['DateTime']; - source: Scalars['String']; - text: Scalars['String']; -}; - -export type RewardInputType = { - amount?: Scalars['Decimal']; - amountUsd?: Scalars['Decimal']; - asset: RoutingTokenInputTypeV2; -}; - -export type RewardInputTypeV3 = { - amount?: Scalars['Decimal']; - amountUsd?: Scalars['Decimal']; - asset: RoutingTokenInputTypeV3; -}; - -export type RewardType = { - __typename?: 'RewardType'; - amount: Scalars['Decimal']; - amountUsd: Scalars['Decimal']; - asset: RoutingTokenTypeV2; -}; - -export type RewardTypeV3 = { - __typename?: 'RewardTypeV3'; - amount: Scalars['Decimal']; - amountUsd: Scalars['Decimal']; - asset: RoutingTokenTypeV3; -}; - -export type RouteInputTypeV2 = { - addresses: Array; - amountIn: Scalars['Decimal']; - approvalInfiniteFlag?: InputMaybe; - destAddress: Scalars['String']; - errorBuildingRoute?: InputMaybe; - gasPrices?: InputMaybe; - isOptIn?: InputMaybe; - priceImpact: Scalars['String']; - priceRate: Scalars['Decimal']; - priceRateText: Scalars['String']; - slippage: Scalars['Decimal']; - tradesRoute: Array; -}; - -export type RouteInputTypeV3 = { - addresses: Array; - amountIn: Scalars['Decimal']; - approvalInfiniteFlag?: InputMaybe; - destAddress: Scalars['String']; - errorBuildingRoute?: InputMaybe; - gasPrices?: InputMaybe; - isOptIn?: InputMaybe; - priceImpact: Scalars['String']; - priceRate: Scalars['Decimal']; +export enum ReputationChains { + Akash = 'Akash', + Algorand = 'Algorand', + Arbitrum = 'Arbitrum', + Archway = 'Archway', + ArchwayTestnet = 'ArchwayTestnet', + AssetMantle = 'AssetMantle', + Astar = 'Astar', + Aurora = 'Aurora', + Avalanche = 'Avalanche', + Axelar = 'Axelar', + Band = 'Band', + Base = 'Base', + BerachainTestnet = 'BerachainTestnet', + BinanceChain = 'BinanceChain', + BinanceChainTestnet = 'BinanceChainTestnet', + BinanceSmartChain = 'BinanceSmartChain', + BinanceSmartChainTestnet = 'BinanceSmartChainTestnet', + Bitcanna = 'Bitcanna', + Bitcoin = 'Bitcoin', + BitcoinCash = 'BitcoinCash', + BitcoinCashTestnet = 'BitcoinCashTestnet', + BitcoinTestnet = 'BitcoinTestnet', + Bitsong = 'Bitsong', + Canto = 'Canto', + CantoEVM = 'CantoEVM', + Cardano = 'Cardano', + Celo = 'Celo', + Cerberus = 'Cerberus', + Chihuahua = 'Chihuahua', + Comdex = 'Comdex', + Cosmos = 'Cosmos', + Crescent = 'Crescent', + Cronos = 'Cronos', + CronosEVM = 'CronosEVM', + CronosPOS = 'CronosPOS', + Cudos = 'Cudos', + Defikingdoms = 'Defikingdoms', + Dep = 'Dep', + Desmos = 'Desmos', + Dogecoin = 'Dogecoin', + DogecoinTestnet = 'DogecoinTestnet', + ETHW = 'ETHW', + Emoney = 'Emoney', + Eos = 'Eos', + Ethereum = 'Ethereum', + Everscale = 'Everscale', + Evmos = 'Evmos', + FONSmartChain = 'FONSmartChain', + Fantom = 'Fantom', + FetchAI = 'FetchAI', + Flow = 'Flow', + Fuse = 'Fuse', + Gnosis = 'Gnosis', + GravityBridge = 'GravityBridge', + Harmony = 'Harmony', + Heco = 'Heco', + Hedera = 'Hedera', + Hive = 'Hive', + HuobiECOChain = 'HuobiECOChain', + Immutablex = 'Immutablex', + Injective = 'Injective', + Iotex = 'Iotex', + Iris = 'Iris', + Ixo = 'Ixo', + JUNO = 'JUNO', + Kardiachain = 'Kardiachain', + Kava = 'Kava', + Kcc = 'Kcc', + KiChain = 'KiChain', + Klaytn = 'Klaytn', + Konstellation = 'Konstellation', + Kujira = 'Kujira', + LikeCoin = 'LikeCoin', + Linea = 'Linea', + Litecoin = 'Litecoin', + LitecoinTestnet = 'LitecoinTestnet', + Lum = 'Lum', + MAYAChain = 'MAYAChain', + MarsProtocol = 'MarsProtocol', + Medibloc = 'Medibloc', + Mooi = 'Mooi', + Moonbeam = 'Moonbeam', + Moonriver = 'Moonriver', + Mumbai = 'Mumbai', + Near = 'Near', + Neo = 'Neo', + Neutron = 'Neutron', + Noble = 'Noble', + OKExChain = 'OKExChain', + Oasis = 'Oasis', + Oec = 'Oec', + Ontology = 'Ontology', + Optimism = 'Optimism', + Osmosis = 'Osmosis', + Other = 'Other', + Persistence = 'Persistence', + Platon = 'Platon', + Polygon = 'Polygon', + Provenance = 'Provenance', + Quasar = 'Quasar', + Rangers = 'Rangers', + Regen = 'Regen', + Rizon = 'Rizon', + Ronin = 'Ronin', + Ropsten = 'Ropsten', + Rsk = 'Rsk', + Scroll = 'Scroll', + Secret = 'Secret', + Sei = 'Sei', + SeiTestnet = 'SeiTestnet', + Sentinel = 'Sentinel', + Shentu = 'Shentu', + Shiden = 'Shiden', + Sifchain = 'Sifchain', + Skale = 'Skale', + Solana = 'Solana', + Sommelier = 'Sommelier', + Stacks = 'Stacks', + Stargaze = 'Stargaze', + Starname = 'Starname', + Steem = 'Steem', + Stride = 'Stride', + Sxnetwork = 'Sxnetwork', + THORChain = 'THORChain', + THORChainTestnet = 'THORChainTestnet', + Telos = 'Telos', + Telosevm = 'Telosevm', + Terra = 'Terra', + TerraClassic = 'TerraClassic', + Tezos = 'Tezos', + Theta = 'Theta', + Thundercore = 'Thundercore', + TomoChain = 'TomoChain', + Tron = 'Tron', + Umee = 'Umee', + Vechain = 'Vechain', + Vulcanforged = 'Vulcanforged', + Wax = 'Wax', + Zilliqa = 'Zilliqa', + opBNB = 'opBNB', + xDAI = 'xDAI', + zkSync = 'zkSync', +} + +export type ReputationComment = { + __typename?: 'ReputationComment'; + approved: Scalars['Boolean']; + commentId: Scalars['Int']; + date: Scalars['DateTime']; + source: Scalars['String']; + text: Scalars['String']; +}; + +export type ReputationCommentNode = { + __typename?: 'ReputationCommentNode'; + cursor: Scalars['String']; + node: ReputationComment; +}; + +export type ReputationV2 = { + __typename?: 'ReputationV2'; + address: Scalars['String']; + chain: ReputationChains; + comments: Array; + pageInfo: PageInfo; +}; + +export type RewardInputType = { + amount?: Scalars['Decimal']; + amountUsd?: Scalars['Decimal']; + asset: RoutingTokenInputTypeV2; +}; + +export type RewardType = { + __typename?: 'RewardType'; + amount: Scalars['Decimal']; + amountUsd: Scalars['Decimal']; + asset: RoutingTokenTypeV2; +}; + +export type RouteInputTypeV2 = { + addresses: Array; + amountIn: Scalars['Decimal']; + approvalInfiniteFlag?: InputMaybe; + destAddress: Scalars['String']; + errorBuildingRoute?: InputMaybe; + feeTier?: InputMaybe; + gasPrices?: InputMaybe; + isOptIn?: InputMaybe; + priceImpact: Scalars['String']; + priceRate: Scalars['Decimal']; priceRateText: Scalars['String']; slippage: Scalars['Decimal']; - tradesRoute: Array; + tradesRoute: Array; }; export type RouteTradeInputType = { @@ -3432,22 +2953,6 @@ export type RouteTradeTypeV2 = { tradeType: Scalars['String']; }; -export type RouteTradeTypeV3 = { - __typename?: 'RouteTradeTypeV3'; - amountIn: Scalars['Decimal']; - amountOut: Scalars['Decimal']; - assetIn: RoutingTokenTypeV3; - assetOut: RoutingTokenTypeV3; - fee: RoutingFeeTypeV3; - minAmountReceived: Scalars['Decimal']; - priceRateUsdAssetIn: Scalars['Decimal']; - priceRateUsdAssetOut: Scalars['Decimal']; - provider: ProviderTypeV3; - referral?: Maybe; - reward?: Maybe; - tradeType: Scalars['String']; -}; - export type RouteTransactionInputType = { addresses: Array; amountIn?: InputMaybe; @@ -3474,12 +2979,6 @@ export type RouteTransactionStatusV2 = { txHash?: Maybe; }; -export type RouteTransactionStatusV3 = { - __typename?: 'RouteTransactionStatusV3'; - status?: Maybe; - txHash?: Maybe; -}; - export type RouteTransactionTradeType = { __typename?: 'RouteTransactionTradeType'; routeId: Scalars['String']; @@ -3497,15 +2996,6 @@ export type RouteTransactionTradeTypeV2 = { transaction?: Maybe; }; -export type RouteTransactionTradeTypeV3 = { - __typename?: 'RouteTransactionTradeTypeV3'; - routeId: Scalars['String']; - status: RouteTransactionStatusV3; - tradeId: Scalars['String']; - tradeRoute: RouteTradeTypeV3; - transaction?: Maybe; -}; - export type RouteTransactionType = { __typename?: 'RouteTransactionType'; amount?: Maybe; @@ -3541,25 +3031,6 @@ export type RouteTransactionTypeV2 = { unsignedStdTx?: Maybe; }; -export type RouteTransactionTypeV3 = { - __typename?: 'RouteTransactionTypeV3'; - actions?: Maybe; - amount: Scalars['Decimal']; - chain: Scalars['String']; - data?: Maybe; - feeRate: Scalars['String']; - gasLimit?: Maybe; - gasPrice?: Maybe; - memo?: Maybe; - receiverId?: Maybe; - recipient?: Maybe; - routeId?: Maybe; - signerId?: Maybe; - tradeId: Scalars['String']; - txType: Scalars['String']; - unsignedStdTx?: Maybe; -}; - export type RouteType = { __typename?: 'RouteType'; addresses: Array; @@ -3582,6 +3053,8 @@ export type RouteTypeV2 = { approvalInfiniteFlag?: Maybe; destAddress: Scalars['String']; errorBuildingRoute?: Maybe; + /** Fee tier that the wallet requesting the quote has. Fee tier are defined by the number XDEFI & vXDEFI tokens held by the wallet. The more tokens the wallet has, the lower the fee tier */ + feeTier: Scalars['Int']; gasPrices?: Maybe; /** * On chain wallet address of the referrer. Must be unique @@ -3595,26 +3068,6 @@ export type RouteTypeV2 = { tradesRoute: Array; }; -export type RouteTypeV3 = { - __typename?: 'RouteTypeV3'; - addresses: Array; - amountIn: Scalars['Decimal']; - approvalInfiniteFlag?: Maybe; - destAddress: Scalars['String']; - errorBuildingRoute?: Maybe; - gasPrices?: Maybe; - /** - * On chain wallet address of the referrer. Must be unique - * @deprecated Not necessary anymore, now this data is stored in the Campaigns service - */ - isOptIn?: Maybe; - priceImpact: Scalars['String']; - priceRate: Scalars['Decimal']; - priceRateText: Scalars['String']; - slippage: Scalars['Decimal']; - tradesRoute: Array; -}; - export type RoutingChainType = { __typename?: 'RoutingChainType'; name: Scalars['String']; @@ -3632,12 +3085,6 @@ export type RoutingChainTypeV2 = { tokens: Array>; }; -export type RoutingChainTypeV3 = { - __typename?: 'RoutingChainTypeV3'; - name: Scalars['String']; - tokens: Array>; -}; - export type RoutingFeeInputTypeV2 = { feeRateTransaction: Scalars['Decimal']; inboundFeeAsset: Scalars['Decimal']; @@ -3649,17 +3096,6 @@ export type RoutingFeeInputTypeV2 = { xdefiSwapFeeDollar?: Scalars['Decimal']; }; -export type RoutingFeeInputTypeV3 = { - feeRateTransaction: Scalars['Decimal']; - inboundFeeAsset: Scalars['Decimal']; - inboundFeeDollar: Scalars['Decimal']; - networkFeeAsset: Scalars['Decimal']; - networkFeeDollar: Scalars['Decimal']; - swapFee: Scalars['Decimal']; - xdefiSwapFee?: Scalars['Decimal']; - xdefiSwapFeeDollar?: Scalars['Decimal']; -}; - export type RoutingFeeType = { __typename?: 'RoutingFeeType'; feeRateTransaction: Scalars['Float']; @@ -3682,18 +3118,6 @@ export type RoutingFeeTypeV2 = { xdefiSwapFeeDollar?: Maybe; }; -export type RoutingFeeTypeV3 = { - __typename?: 'RoutingFeeTypeV3'; - feeRateTransaction: Scalars['Decimal']; - inboundFeeAsset: Scalars['Decimal']; - inboundFeeDollar: Scalars['Decimal']; - networkFeeAsset: Scalars['Decimal']; - networkFeeDollar: Scalars['Decimal']; - swapFee: Scalars['Decimal']; - xdefiSwapFee?: Maybe; - xdefiSwapFeeDollar?: Maybe; -}; - export type RoutingTokenInputType = { asset?: InputMaybe; id: Scalars['ID']; @@ -3706,12 +3130,6 @@ export type RoutingTokenInputTypeV2 = { listProviders?: InputMaybe>; }; -export type RoutingTokenInputTypeV3 = { - asset?: InputMaybe; - id: Scalars['String']; - listProviders?: InputMaybe>; -}; - export type RoutingTokenType = { __typename?: 'RoutingTokenType'; asset?: Maybe; @@ -3726,13 +3144,6 @@ export type RoutingTokenTypeV2 = { listProviders: Array; }; -export type RoutingTokenTypeV3 = { - __typename?: 'RoutingTokenTypeV3'; - asset: CryptoAsset; - id: Scalars['String']; - listProviders: Array; -}; - export type RoutingType = { __typename?: 'RoutingType'; chain?: Maybe; @@ -3850,118 +3261,68 @@ export type RoutingTypeV2TradesV2Args = { routeId: Scalars['String']; }; -export type RoutingTypeV3 = { - __typename?: 'RoutingTypeV3'; - addressCheckV3: AddressRouteCheckTypeV3; - allReferrersV3?: Maybe>; - bridgeableTokensV3: Array; - chainV3: RoutingChainTypeV3; - chainsV3: Array; - dailyVolumeV3?: Maybe>; - getArbGaugeV3: ReferralBonusV3; - leaderboardV3: LeaderboardV3; - referrerSummaryV3: ReferralFeeSummaryV3; - refuelInfoV3: RefuelInfoTypeV3; - refuelV3: RouteTypeV3; - routeV3: RouteTypeV3; - tokenV3: RoutingTokenTypeV3; - tokensV3: Array; - tradeV3: RouteTransactionTradeTypeV3; - tradesV3: Array; -}; - -export type RoutingTypeV3AddressCheckV3Args = { - address: AddressRouteInputTypeV3; -}; - -export type RoutingTypeV3BridgeableTokensV3Args = { - bridgeToken?: InputMaybe; - tokenId?: InputMaybe; +export type SearchFilter = { + name?: InputMaybe; + symbol?: InputMaybe; }; -export type RoutingTypeV3ChainV3Args = { - name: Scalars['String']; +export type SearchResponse = { + __typename?: 'SearchResponse'; + page: SearchTypeConnection; + pageData?: Maybe; }; -export type RoutingTypeV3DailyVolumeV3Args = { - startDate?: Scalars['String']; +export type SearchType = AssetBaseType & { + __typename?: 'SearchType'; + /** Only for "CRYPTOCURRENCY" type */ + chain?: Maybe; + /** For "TOKEN" and "LP_TOKEN" types */ + contracts?: Maybe>; + /** Additional info about asset: description, social and tech links, etc. */ + externalData?: Maybe; + /** Icon URL */ + icon?: Maybe; + /** Unique identifier in the database */ + id: Scalars['ID']; + /** Market capitalization is total value of a publicly traded company's outstanding common shares owned by stockholders */ + marketCap?: Maybe; + /** Known name that identifies token */ + name?: Maybe; + price?: Maybe; + priceHistory: PriceHistoryType; + /** Only for "CRYPTOCURRENCY" type */ + scalingFactor?: Maybe; + /** The symbol that identifies token */ + symbol: Scalars['String']; + type: AssetInternalType; }; -export type RoutingTypeV3RefuelInfoV3Args = { - destChain: Scalars['String']; - srcChain: Scalars['String']; +export type SearchTypeConnection = { + __typename?: 'SearchTypeConnection'; + edges?: Maybe>; + pageInfo?: Maybe; }; -export type RoutingTypeV3RefuelV3Args = { - addresses: Array; - amountSource?: InputMaybe; - destAddress: Scalars['String']; - destToken: Scalars['String']; - referral?: InputMaybe; - srcToken: Scalars['String']; +export type SearchTypeEdge = { + __typename?: 'SearchTypeEdge'; + cursor?: Maybe; + node?: Maybe; }; -export type RoutingTypeV3RouteV3Args = { - addresses: Array; - amountSource?: InputMaybe; - destAddress: Scalars['String']; - destToken: Scalars['String']; - infiniteApproval?: InputMaybe; - isLedgerLive?: InputMaybe; - isOptedIn?: InputMaybe; - referral?: InputMaybe; - slippage: Scalars['String']; - srcToken: Scalars['String']; -}; - -export type RoutingTypeV3TokenV3Args = { - id: Scalars['String']; -}; - -export type RoutingTypeV3TokensV3Args = { - names?: InputMaybe>; - tokenIds?: InputMaybe>; -}; - -export type RoutingTypeV3TradeV3Args = { - tradeId: Scalars['String']; -}; - -export type RoutingTypeV3TradesV3Args = { - routeId: Scalars['String']; -}; - -/** - * (experimental) Represent send asset activity, valid with wallet context - * TODOs: check ReceiveAssetActivityV0 - */ -export type SendAssetActivityV0 = { - __typename?: 'SendAssetActivityV0'; - amount: Scalars['String']; - asset: AssetV0; - /** Represent wallet address that receive the asset */ - to: Array; -}; - -export type Settings = { - __typename?: 'Settings'; - private?: Maybe; -}; - -/** Keep information about smart contract/program */ -export type SmartContractV0 = { - __typename?: 'SmartContractV0'; - contract: Scalars['String']; - name?: Maybe; +export type SearchTypePageInfo = { + __typename?: 'SearchTypePageInfo'; + endCursor?: Maybe; + hasNextPage: Scalars['Boolean']; + hasPreviousPage: Scalars['Boolean']; + startCursor?: Maybe; }; export type SolanaChain = { __typename?: 'SolanaChain'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; - /** (experimental) Get latest wallet activity */ - latestHistoryActivityV0?: Maybe; legacyNFTs: Array; name: Scalars['String']; nfts: Array; @@ -3972,12 +3333,7 @@ export type SolanaChain = { export type SolanaChainBalancesArgs = { address: Scalars['String']; -}; - -export type SolanaChainLatestHistoryActivityV0Args = { - address: Scalars['String']; - after?: InputMaybe; - first?: Scalars['Int']; + tokenAddresses?: InputMaybe>; }; export type SolanaChainLegacyNfTsArgs = { @@ -4027,103 +3383,10 @@ export type SolanaTransactionEdge = { node: SolanaTransaction; }; -export type StakingService = { - __typename?: 'StakingService'; - /** Returns a delegate tx in json format for Cosmos chains, either provider a Cosmos validator from providers or a valoper address but not both. */ - createCosmosDelegateTx: Scalars['String']; - createCosmosIbcTransferTx: Scalars['String']; - /** Returns a delegate tx in json format for Cosmos chains, either provider a Cosmos validator from providers or a valoper address but not both. */ - createCosmosUndelegateTx: Scalars['String']; - createErc20ApproveTx: EthtxPreview; - createLidoStakeTx: EthtxPreview; - createStrideLiquidStakingTx: Scalars['String']; - /** Returns a list of all APRs for all of the supported Providers per supported asset for each provider. */ - getAnnualPercentageRates: Array; - /** Returns the currenct cosmos zone height based on the asset */ - getCosmosChainHeight: Scalars['Int']; - /** Returns nativly staked assets balances by the supported providers */ - getCosmosDelegations: Array; - /** Returns the transaction count for ETH only */ - getEthAddressNonce: Scalars['Int']; - /** Returns balance for the staked token on Lido contract on Ethereum */ - getLidoStakedBalance: LidoStakedAssetBalance; - /** Returns a list of supported assets for any given provider */ - getProviderSupportedAssets: Array; - getStrideStakedAssetBalance: StrideStakedAssetBalance; - lidoCheckErc20Allowance: Scalars['Int']; - name: Scalars['String']; - stakingServiceStatus: StakingServiceStatus; -}; - -export type StakingServiceCreateCosmosDelegateTxArgs = { - delegationInput: CosmosDelegationInput; - provider?: InputMaybe; - validatorAddress?: InputMaybe; -}; - -export type StakingServiceCreateCosmosIbcTransferTxArgs = { - input: CosmosIbcTransferInput; - provider: Providers; -}; - -export type StakingServiceCreateCosmosUndelegateTxArgs = { - delegationInput: CosmosDelegationInput; - provider?: InputMaybe; - validatorAddress?: InputMaybe; -}; - -export type StakingServiceCreateErc20ApproveTxArgs = { - input: Erc20ApproveInput; -}; - -export type StakingServiceCreateLidoStakeTxArgs = { - input: LidoStakingInput; -}; - -export type StakingServiceCreateStrideLiquidStakingTxArgs = { - input: StrideStakingInput; -}; - -export type StakingServiceGetCosmosChainHeightArgs = { - asset: SupportedAssets; -}; - -export type StakingServiceGetCosmosDelegationsArgs = { - address: Scalars['String']; - asset: SupportedAssets; -}; - -export type StakingServiceGetEthAddressNonceArgs = { - address: Scalars['String']; -}; - -export type StakingServiceGetLidoStakedBalanceArgs = { - address: Scalars['String']; - asset: SupportedAssets; -}; - -export type StakingServiceGetProviderSupportedAssetsArgs = { - provider: Providers; -}; - -export type StakingServiceGetStrideStakedAssetBalanceArgs = { - asset: SupportedAssets; - strideAddress: Scalars['String']; -}; - -export type StakingServiceLidoCheckErc20AllowanceArgs = { - input: LidoErc20AllowanceInput; -}; - -export type StakingServiceStatus = { - __typename?: 'StakingServiceStatus'; - error?: Maybe; - status: Scalars['String']; -}; - export type StargazeChain = { __typename?: 'StargazeChain'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; name: Scalars['String']; @@ -4135,6 +3398,7 @@ export type StargazeChain = { export type StargazeChainBalancesArgs = { address: Scalars['String']; + tokenAddresses?: InputMaybe>; }; export type StargazeChainNftsArgs = { @@ -4159,55 +3423,20 @@ export type Statusv2 = { blockchairHealth: ProviderHealth; }; -export type StrideStakedAssetBalance = { - __typename?: 'StrideStakedAssetBalance'; - amount: Scalars['Int']; - decimal: Scalars['Int']; - denom: Scalars['String']; -}; - -export type StrideStakingInput = { - amount: Scalars['Decimal']; - asset: SupportedAssets; - gasLimit?: InputMaybe; - recieverStrideAddr: Scalars['String']; - senderAddr: Scalars['String']; - senderPubkeyHex: Scalars['String']; - timeoutHeight: Scalars['Int']; -}; - -export enum SupportedAssets { - AKASH = 'AKASH', - ATOM = 'ATOM', - AVAX = 'AVAX', - AXL = 'AXL', - CRE = 'CRE', - ETH = 'ETH', - JUNO = 'JUNO', - KAVA = 'KAVA', - KUJI = 'KUJI', - LUNA = 'LUNA', - MATIC_ERC20 = 'MATIC_ERC20', - OSMO = 'OSMO', - SEI = 'SEI', - SOL = 'SOL', - STARS = 'STARS', - STRD = 'STRD', -} - -export type SwapAssetActivityV0 = { - __typename?: 'SwapAssetActivityV0'; - fromAssets?: Maybe>; - /** Program that was used to execute swap */ - program?: Maybe; - /** amount paid during swap execution to the protocol */ - swapFee?: Maybe>; - toAssets?: Maybe>; +/** Transaction object with necessary fields for simulation and classification using tenderly */ +export type TenderlyMinimalSimulateInput = { + blockNumber?: InputMaybe; + chain?: InputMaybe; + data: Scalars['String']; + fromAddress: Scalars['String']; + to: Scalars['String']; + value?: InputMaybe; }; export type TerraChain = { __typename?: 'TerraChain'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; legacyNFTs: Array; @@ -4218,6 +3447,7 @@ export type TerraChain = { export type TerraChainBalancesArgs = { address: Scalars['String']; + tokenAddresses?: InputMaybe>; }; export type TerraChainLegacyNfTsArgs = { @@ -4226,6 +3456,7 @@ export type TerraChainLegacyNfTsArgs = { export type ThorChain = { __typename?: 'ThorChain'; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; name: Scalars['String']; @@ -4236,11 +3467,13 @@ export type ThorChain = { export type ThorChainBalancesArgs = { address: Scalars['String']; + tokenAddress?: InputMaybe>; }; export type ThorChainTransactionsArgs = { address: Scalars['String']; - pagination?: CursorPagination; + after?: InputMaybe; + first?: Scalars['Int']; }; /** Transactions fee management for THORChain. */ @@ -4271,7 +3504,7 @@ export type ThorchainTransaction = { hash: Scalars['String']; status: Scalars['String']; timestamp?: Maybe; - transfers: Array; + transfers: Array; }; export type ThorchainTransactionConnection = { @@ -4331,6 +3564,7 @@ export type TokenFilter = { address?: InputMaybe>; chains?: InputMaybe>; ids?: InputMaybe>; + priceHistoryInterval?: InputMaybe; symbols?: InputMaybe>; }; @@ -4353,12 +3587,11 @@ export type TokenType = { symbol: Scalars['String']; }; -/** (experimental) Represent Token for a given chain, contract and token_id */ export type TokenV0 = { __typename?: 'TokenV0'; /** Chain name */ chain?: Maybe; - /** Contract for EVM/Cosmos and program_id for Solana */ + /** Crypto currency address */ contract?: Maybe; /** Number of decimals for current asset */ decimals?: Maybe; @@ -4369,7 +3602,7 @@ export type TokenV0 = { price?: Maybe; /** The symbol that identifies token */ symbol?: Maybe; - /** Null for EVM/Cosmos and mint for Solana */ + /** Token id for solana mint */ tokenId?: Maybe; }; @@ -4394,21 +3627,6 @@ export type TradeRouteInputTypeV2 = { tradeType: Scalars['String']; }; -export type TradeRouteInputTypeV3 = { - amountIn: Scalars['Decimal']; - amountOut: Scalars['Decimal']; - assetIn: RoutingTokenInputTypeV3; - assetOut: RoutingTokenInputTypeV3; - fee: RoutingFeeInputTypeV3; - minAmountReceived: Scalars['Decimal']; - priceRateUsdAssetIn: Scalars['Decimal']; - priceRateUsdAssetOut: Scalars['Decimal']; - provider: ProviderInputTypeV3; - referral?: InputMaybe; - reward?: InputMaybe; - tradeType: Scalars['String']; -}; - export type TransactionCallArg = { __typename?: 'TransactionCallArg'; name: Scalars['String']; @@ -4417,15 +3635,6 @@ export type TransactionCallArg = { value: Scalars['String']; }; -/** Transaction object with necessary fields for simulation and classification. */ -export type TransactionPayload = { - chain?: InputMaybe; - data: Scalars['String']; - fromAddress: Scalars['String']; - to: Scalars['String']; - value?: InputMaybe; -}; - export enum TransactionType { CLAIM = 'CLAIM', DEPOSIT = 'DEPOSIT', @@ -4436,9 +3645,21 @@ export enum TransactionType { WITHDRAW = 'WITHDRAW', } +export type TrendingCoingeckoType = { + __typename?: 'TrendingCoingeckoType'; + assetId: Scalars['String']; + chains: Array; + icon?: Maybe; + name: Scalars['String']; + price?: Maybe; + symbol: Scalars['String']; + type: AssetInternalType; +}; + export type TrendingTokensType = { __typename?: 'TrendingTokensType'; assetId: Scalars['String']; + chains: Array; icon?: Maybe; name: Scalars['String']; price: AssetAmountType; @@ -4449,6 +3670,7 @@ export type TrendingTokensType = { export type Tron = { __typename?: 'Tron'; average24hFee?: Maybe; + /** Native (always present) and token balances for address */ balances: Array; fee?: Maybe; name: Scalars['String']; @@ -4462,6 +3684,7 @@ export type TronBalancesArgs = { address: Scalars['String']; after?: InputMaybe; first?: InputMaybe; + tokenAddresses?: InputMaybe>; }; export type TronNftsArgs = { @@ -4477,6 +3700,118 @@ export type TronTransactionsArgs = { first?: InputMaybe; }; +export type TxAnalysisV1 = { + __typename?: 'TxAnalysisV1'; + securityIssues: Array; + txRiskLevel: Scalars['String']; +}; + +export type TxAnalysisV2 = { + __typename?: 'TxAnalysisV2'; + issues: Array; + riskScore: Scalars['String']; +}; + +export type TxAnalysisV3 = { + __typename?: 'TxAnalysisV3'; + securityIssues: Array; + txRiskLevel: Scalars['String']; +}; + +export type TxClassifier = { + __typename?: 'TxClassifier'; + analyzeTxBlowfish: TxAnalysisV3; + analyzeTxV1Hexagate: TxAnalysisV1; + analyzeTxV2Hexagate: TxAnalysisV2; + decodeTransactionV2?: Maybe; + explainTransactionV3?: Maybe; + explainTransactionV3DebugTraceCall?: Maybe; + explainTransactionV3Tenderly?: Maybe; + explainTransactionV3TenderlyBundled?: Maybe; + explainTransactionV4Tenderly?: Maybe; + getBlockchairTxsByQuery: Scalars['String']; +}; + +export type TxClassifierAnalyzeTxBlowfishArgs = { + payload: BlowfishEvmTxPayload; +}; + +export type TxClassifierAnalyzeTxV1HexagateArgs = { + payload: EvmTransactionPayloadV2; +}; + +export type TxClassifierAnalyzeTxV2HexagateArgs = { + payload: EvmTransactionPayloadV2; +}; + +export type TxClassifierDecodeTransactionV2Args = { + payload: EvmTransactionPayload; +}; + +export type TxClassifierExplainTransactionV3Args = { + payload: EvmTransactionPayloadV2; +}; + +export type TxClassifierExplainTransactionV3DebugTraceCallArgs = { + payload: EvmTransactionPayloadV2; +}; + +export type TxClassifierExplainTransactionV3TenderlyArgs = { + payload: EvmTransactionPayloadV2; +}; + +export type TxClassifierExplainTransactionV3TenderlyBundledArgs = { + payload: Array; +}; + +export type TxClassifierExplainTransactionV4TenderlyArgs = { + payload: EvmTransactionPayloadV2; +}; + +export type TxClassifierGetBlockchairTxsByQueryArgs = { + chain: TxClassifierChains; + limit: Scalars['Int']; + offset: Scalars['Int']; + recipient: Scalars['String']; + useApiKey: Scalars['Boolean']; +}; + +export enum TxClassifierChains { + Dummychain = 'Dummychain', + arbitrum = 'arbitrum', + avalanche = 'avalanche', + bsc = 'bsc', + ethereum = 'ethereum', + fantom = 'fantom', + polygon = 'polygon', +} + +export enum TxClassifierTxType { + APPROVE = 'APPROVE', + CLAIM = 'CLAIM', + DEPOSIT = 'DEPOSIT', + MINT = 'MINT', + STAKE = 'STAKE', + SWAP = 'SWAP', + TRANSFER = 'TRANSFER', + UNCLASSIFIED = 'UNCLASSIFIED', + WITHDRAW = 'WITHDRAW', +} + +export type TxSecurityIssue = { + __typename?: 'TxSecurityIssue'; + categoryType: Scalars['String']; + riskScore: Scalars['String']; + type: Scalars['String']; +}; + +export type TxSecurityIssueV2 = { + __typename?: 'TxSecurityIssueV2'; + kind: Scalars['String']; + message: Scalars['String']; + riskScore: Scalars['String']; +}; + export type UtxoTransaction = { __typename?: 'UTXOTransaction'; balanceChange?: Maybe; @@ -4546,20 +3881,6 @@ export type UnspentTransactionOutputV5 = { value: Amount; }; -export type User = { - __typename?: 'User'; - addresses: Array
; - credits: Credits; - id: Scalars['ID']; - settings: Settings; - username: Scalars['String']; -}; - -export type UserSettingsInput = { - private?: InputMaybe; - userId?: InputMaybe; -}; - export type UtxotransactionByHashV5 = { __typename?: 'UtxotransactionByHashV5'; /** (numeric, optional) the block number in which this transaction is mined. */ @@ -4644,55 +3965,11 @@ export type VolumeHistory = { volume: Scalars['String']; }; -export type VolumeHistoryV3 = { - __typename?: 'VolumeHistoryV3'; - date: Scalars['String']; - volume: Scalars['String']; -}; - export type Wallet = { __typename?: 'Wallet'; name: Scalars['String']; }; -/** (experimental) Represent wallet activities */ -export type WalletActivityV0 = { - __typename?: 'WalletActivityV0'; - /** Wallet address */ - address: Scalars['String']; - /** Assets movements (Sent and Received activities) */ - basic: Array; - /** Block height (null for pending txs) */ - blockHeight?: Maybe; - /** Chain */ - chain: Scalars['String']; - /** Time of the transaction as ISO 8601 string */ - datetime?: Maybe; - /** Complex activities (Swap, Withdraw, Stake, etc.); build on top of `basic` */ - detailed?: Maybe>; - /** Transaction fee */ - fee: Array; - /** Tx hash */ - txHash: Scalars['String']; -}; - -export type WalletActivityV0Connection = { - __typename?: 'WalletActivityV0Connection'; - /** A list of edges. */ - edges: Array; - /** Information to aid in pagination. */ - pageInfo: PageInfo; -}; - -/** An edge in a connection. */ -export type WalletActivityV0Edge = { - __typename?: 'WalletActivityV0Edge'; - /** A cursor for use in pagination */ - cursor: Scalars['String']; - /** The item at the end of the edge */ - node: WalletActivityV0; -}; - export type WalletInfo = { __typename?: 'WalletInfo'; /** EVM address of the wallet. */ @@ -4703,32 +3980,6 @@ export type WalletInfo = { isReferrer: Scalars['Boolean']; }; -export type WalletInfoV3 = { - __typename?: 'WalletInfoV3'; - /** EVM address of the wallet. */ - address: Scalars['String']; - /** If set to true, wallet is the boss */ - isAdmin: Scalars['Boolean']; - /** If set to true, wallet is part of the referral program */ - isReferrer: Scalars['Boolean']; -}; - -/** Portfolio that groups addresses */ -export type WalletPortfolio = { - __typename?: 'WalletPortfolio'; - addresses: Array; - stats?: Maybe; -}; - -export type WalletPortfolioRequest = { - addresses: Array; -}; - -export type WalletV3 = { - __typename?: 'WalletV3'; - name: Scalars['String']; -}; - export type ZkSync = { __typename?: 'ZkSync'; fee?: Maybe; @@ -4921,6 +4172,37 @@ export type GetBitcoinTransactionsQuery = { }; }; +export type BitcoinBroadcastTransactionQueryVariables = Exact<{ + rawHex: Scalars['String']; +}>; + +export type BitcoinBroadcastTransactionQuery = { + __typename?: 'Query'; + bitcoin: { __typename?: 'BitcoinChain'; broadcastTransaction: string }; +}; + +export type BitcoinScanUtxOsQueryVariables = Exact<{ + address: Scalars['String']; + page: Scalars['Int']; +}>; + +export type BitcoinScanUtxOsQuery = { + __typename?: 'Query'; + bitcoin: { + __typename?: 'BitcoinChain'; + unspentTxOutputsV5: Array<{ + __typename?: 'UnspentTransactionOutputV5'; + oTxHash: string; + oIndex: number; + oTxHex?: string | null; + address?: string | null; + isCoinbase?: boolean | null; + scriptHex?: string | null; + value: { __typename?: 'Amount'; value: string }; + }>; + }; +}; + export type BitcoinCashBalanceQueryVariables = Exact<{ address: Scalars['String']; }>; @@ -4995,6 +4277,40 @@ export type GetBitcoinCashTransactionsQuery = { }; }; +export type BitcoinCashBroadcastTransactionQueryVariables = Exact<{ + rawHex: Scalars['String']; +}>; + +export type BitcoinCashBroadcastTransactionQuery = { + __typename?: 'Query'; + bitcoincash: { + __typename?: 'BitcoincashChain'; + broadcastTransaction: string; + }; +}; + +export type BitcoinCashScanUtxOsQueryVariables = Exact<{ + address: Scalars['String']; + page: Scalars['Int']; +}>; + +export type BitcoinCashScanUtxOsQuery = { + __typename?: 'Query'; + bitcoincash: { + __typename?: 'BitcoincashChain'; + unspentTxOutputsV5: Array<{ + __typename?: 'UnspentTransactionOutputV5'; + oTxHash: string; + oIndex: number; + oTxHex?: string | null; + address?: string | null; + isCoinbase?: boolean | null; + scriptHex?: string | null; + value: { __typename?: 'Amount'; value: string }; + }>; + }; +}; + export type GetAssetsWithFilterQueryVariables = Exact<{ page: ConnectionArgs; filter?: InputMaybe; @@ -6633,6 +5949,37 @@ export type GetDogecoinTransactionsQuery = { }; }; +export type DogecoinBroadcastTransactionQueryVariables = Exact<{ + rawHex: Scalars['String']; +}>; + +export type DogecoinBroadcastTransactionQuery = { + __typename?: 'Query'; + dogecoin: { __typename?: 'DogeChain'; broadcastTransaction: string }; +}; + +export type DogecoinScanUtxOsQueryVariables = Exact<{ + address: Scalars['String']; + page: Scalars['Int']; +}>; + +export type DogecoinScanUtxOsQuery = { + __typename?: 'Query'; + dogecoin: { + __typename?: 'DogeChain'; + unspentTxOutputsV5: Array<{ + __typename?: 'UnspentTransactionOutputV5'; + oTxHash: string; + oIndex: number; + oTxHex?: string | null; + address?: string | null; + isCoinbase?: boolean | null; + scriptHex?: string | null; + value: { __typename?: 'Amount'; value: string }; + }>; + }; +}; + export type EthereumBalanceQueryVariables = Exact<{ address: Scalars['String']; }>; @@ -6663,32 +6010,6 @@ export type EthereumBalanceQuery = { }; }; -export type GetCryptoAssetsQueryVariables = Exact<{ - input: Array | CryptoAssetArgs; -}>; - -export type GetCryptoAssetsQuery = { - __typename?: 'Query'; - assets: { - __typename?: 'AssetType'; - cryptoAssets?: Array<{ - __typename?: 'CryptoAsset'; - chain?: string | null; - contract?: string | null; - id?: string | null; - name?: string | null; - symbol?: string | null; - image?: string | null; - decimals?: number | null; - price?: { - __typename?: 'AssetAmountType'; - amount: string; - scalingFactor: number; - } | null; - }> | null; - }; -}; - export type LitecoinBalanceQueryVariables = Exact<{ address: Scalars['String']; }>; @@ -6763,6 +6084,37 @@ export type GetLitecoinTransactionsQuery = { }; }; +export type LitecoinBroadcastTransactionQueryVariables = Exact<{ + rawHex: Scalars['String']; +}>; + +export type LitecoinBroadcastTransactionQuery = { + __typename?: 'Query'; + litecoin: { __typename?: 'LitecoinChain'; broadcastTransaction: string }; +}; + +export type LitecoinScanUtxOsQueryVariables = Exact<{ + address: Scalars['String']; + page: Scalars['Int']; +}>; + +export type LitecoinScanUtxOsQuery = { + __typename?: 'Query'; + litecoin: { + __typename?: 'LitecoinChain'; + unspentTxOutputsV5: Array<{ + __typename?: 'UnspentTransactionOutputV5'; + oTxHash: string; + oIndex: number; + oTxHex?: string | null; + address?: string | null; + isCoinbase?: boolean | null; + scriptHex?: string | null; + value: { __typename?: 'Amount'; value: string }; + }>; + }; +}; + export type GetSolanaBalanceQueryVariables = Exact<{ address: Scalars['String']; }>; @@ -6961,6 +6313,32 @@ export type GetTronTransactionsQuery = { }; }; +export type GetCryptoAssetsQueryVariables = Exact<{ + input: Array | CryptoAssetArgs; +}>; + +export type GetCryptoAssetsQuery = { + __typename?: 'Query'; + assets: { + __typename?: 'AssetType'; + cryptoAssets?: Array<{ + __typename?: 'CryptoAsset'; + chain?: string | null; + contract?: string | null; + id?: string | null; + name?: string | null; + symbol?: string | null; + image?: string | null; + decimals?: number | null; + price?: { + __typename?: 'AssetAmountType'; + amount: string; + scalingFactor: number; + } | null; + }> | null; + }; +}; + export const GetBinanceBalancesDocument = { kind: 'Document', definitions: [ @@ -7480,16 +6858,544 @@ export const GetBinanceStatusDocument = { }, ], } as unknown as DocumentNode< - GetBinanceStatusQuery, - GetBinanceStatusQueryVariables + GetBinanceStatusQuery, + GetBinanceStatusQueryVariables +>; +export const BitcoinBalanceDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'BitcoinBalance' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'address' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'bitcoin' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'balances' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'address' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'address' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'amount' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'value' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'asset' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'chain' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'contract' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'decimals' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'id' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'image' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'name' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'price' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'amount' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'symbol' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const GetBitcoinFeesDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'GetBitcoinFees' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'bitcoin' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'fee' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'high' } }, + { kind: 'Field', name: { kind: 'Name', value: 'low' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'medium' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const GetBitcoinTransactionsDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'GetBitcoinTransactions' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'address' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'pageSize' }, + }, + type: { + kind: 'NonNullType', + type: { kind: 'NamedType', name: { kind: 'Name', value: 'Int' } }, + }, + }, + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'pageNumber' }, + }, + type: { + kind: 'NonNullType', + type: { kind: 'NamedType', name: { kind: 'Name', value: 'Int' } }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'bitcoin' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'transactionsV2' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'address' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'address' }, + }, + }, + { + kind: 'Argument', + name: { kind: 'Name', value: 'pageSize' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'pageSize' }, + }, + }, + { + kind: 'Argument', + name: { kind: 'Name', value: 'pageNumber' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'pageNumber' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'balanceChange' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'value' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockNumber' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'fee' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'value' }, + }, + ], + }, + }, + { kind: 'Field', name: { kind: 'Name', value: 'hash' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'inputs' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'amount' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'value' }, + }, + ], + }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'outputs' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'amount' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'value' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'timestamp' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'status' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + GetBitcoinTransactionsQuery, + GetBitcoinTransactionsQueryVariables +>; +export const BitcoinBroadcastTransactionDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'BitcoinBroadcastTransaction' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'rawHex' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'bitcoin' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'broadcastTransaction' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'rawHex' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'rawHex' }, + }, + }, + ], + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + BitcoinBroadcastTransactionQuery, + BitcoinBroadcastTransactionQueryVariables +>; +export const BitcoinScanUtxOsDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'BitcoinScanUTXOs' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'address' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + { + kind: 'VariableDefinition', + variable: { kind: 'Variable', name: { kind: 'Name', value: 'page' } }, + type: { + kind: 'NonNullType', + type: { kind: 'NamedType', name: { kind: 'Name', value: 'Int' } }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'bitcoin' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'unspentTxOutputsV5' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'address' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'address' }, + }, + }, + { + kind: 'Argument', + name: { kind: 'Name', value: 'page' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'page' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'oTxHash' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'oIndex' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'value' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'value' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'oTxHex' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isCoinbase' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'scriptHex' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + BitcoinScanUtxOsQuery, + BitcoinScanUtxOsQueryVariables >; -export const BitcoinBalanceDocument = { +export const BitcoinCashBalanceDocument = { kind: 'Document', definitions: [ { kind: 'OperationDefinition', operation: 'query', - name: { kind: 'Name', value: 'BitcoinBalance' }, + name: { kind: 'Name', value: 'BitcoinCashBalance' }, variableDefinitions: [ { kind: 'VariableDefinition', @@ -7511,7 +7417,7 @@ export const BitcoinBalanceDocument = { selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'bitcoin' }, + name: { kind: 'Name', value: 'bitcoincash' }, selectionSet: { kind: 'SelectionSet', selections: [ @@ -7608,20 +7514,23 @@ export const BitcoinBalanceDocument = { }, }, ], -} as unknown as DocumentNode; -export const GetBitcoinFeesDocument = { +} as unknown as DocumentNode< + BitcoinCashBalanceQuery, + BitcoinCashBalanceQueryVariables +>; +export const GetBitcoinCashFeesDocument = { kind: 'Document', definitions: [ { kind: 'OperationDefinition', operation: 'query', - name: { kind: 'Name', value: 'GetBitcoinFees' }, + name: { kind: 'Name', value: 'GetBitcoinCashFees' }, selectionSet: { kind: 'SelectionSet', selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'bitcoin' }, + name: { kind: 'Name', value: 'bitcoincash' }, selectionSet: { kind: 'SelectionSet', selections: [ @@ -7647,14 +7556,17 @@ export const GetBitcoinFeesDocument = { }, }, ], -} as unknown as DocumentNode; -export const GetBitcoinTransactionsDocument = { +} as unknown as DocumentNode< + GetBitcoinCashFeesQuery, + GetBitcoinCashFeesQueryVariables +>; +export const GetBitcoinCashTransactionsDocument = { kind: 'Document', definitions: [ { kind: 'OperationDefinition', operation: 'query', - name: { kind: 'Name', value: 'GetBitcoinTransactions' }, + name: { kind: 'Name', value: 'GetBitcoinCashTransactions' }, variableDefinitions: [ { kind: 'VariableDefinition', @@ -7698,7 +7610,7 @@ export const GetBitcoinTransactionsDocument = { selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'bitcoin' }, + name: { kind: 'Name', value: 'bitcoincash' }, selectionSet: { kind: 'SelectionSet', selections: [ @@ -7836,22 +7748,22 @@ export const GetBitcoinTransactionsDocument = { }, ], } as unknown as DocumentNode< - GetBitcoinTransactionsQuery, - GetBitcoinTransactionsQueryVariables + GetBitcoinCashTransactionsQuery, + GetBitcoinCashTransactionsQueryVariables >; -export const BitcoinCashBalanceDocument = { +export const BitcoinCashBroadcastTransactionDocument = { kind: 'Document', definitions: [ { kind: 'OperationDefinition', operation: 'query', - name: { kind: 'Name', value: 'BitcoinCashBalance' }, + name: { kind: 'Name', value: 'BitcoinCashBroadcastTransaction' }, variableDefinitions: [ { kind: 'VariableDefinition', variable: { kind: 'Variable', - name: { kind: 'Name', value: 'address' }, + name: { kind: 'Name', value: 'rawHex' }, }, type: { kind: 'NonNullType', @@ -7873,131 +7785,17 @@ export const BitcoinCashBalanceDocument = { selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'balances' }, + name: { kind: 'Name', value: 'broadcastTransaction' }, arguments: [ { kind: 'Argument', - name: { kind: 'Name', value: 'address' }, + name: { kind: 'Name', value: 'rawHex' }, value: { kind: 'Variable', - name: { kind: 'Name', value: 'address' }, + name: { kind: 'Name', value: 'rawHex' }, }, }, ], - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'address' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'amount' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'value' }, - }, - ], - }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'asset' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'chain' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'contract' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'decimals' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'id' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'image' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'name' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'price' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'amount' }, - }, - ], - }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'symbol' }, - }, - ], - }, - }, - ], - }, - }, - ], - }, - }, - ], - }, - }, - ], -} as unknown as DocumentNode< - BitcoinCashBalanceQuery, - BitcoinCashBalanceQueryVariables ->; -export const GetBitcoinCashFeesDocument = { - kind: 'Document', - definitions: [ - { - kind: 'OperationDefinition', - operation: 'query', - name: { kind: 'Name', value: 'GetBitcoinCashFees' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'bitcoincash' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'fee' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { kind: 'Field', name: { kind: 'Name', value: 'high' } }, - { kind: 'Field', name: { kind: 'Name', value: 'low' } }, - { - kind: 'Field', - name: { kind: 'Name', value: 'medium' }, - }, - ], - }, }, ], }, @@ -8007,16 +7805,16 @@ export const GetBitcoinCashFeesDocument = { }, ], } as unknown as DocumentNode< - GetBitcoinCashFeesQuery, - GetBitcoinCashFeesQueryVariables + BitcoinCashBroadcastTransactionQuery, + BitcoinCashBroadcastTransactionQueryVariables >; -export const GetBitcoinCashTransactionsDocument = { +export const BitcoinCashScanUtxOsDocument = { kind: 'Document', definitions: [ { kind: 'OperationDefinition', operation: 'query', - name: { kind: 'Name', value: 'GetBitcoinCashTransactions' }, + name: { kind: 'Name', value: 'BitcoinCashScanUTXOs' }, variableDefinitions: [ { kind: 'VariableDefinition', @@ -8034,21 +7832,7 @@ export const GetBitcoinCashTransactionsDocument = { }, { kind: 'VariableDefinition', - variable: { - kind: 'Variable', - name: { kind: 'Name', value: 'pageSize' }, - }, - type: { - kind: 'NonNullType', - type: { kind: 'NamedType', name: { kind: 'Name', value: 'Int' } }, - }, - }, - { - kind: 'VariableDefinition', - variable: { - kind: 'Variable', - name: { kind: 'Name', value: 'pageNumber' }, - }, + variable: { kind: 'Variable', name: { kind: 'Name', value: 'page' } }, type: { kind: 'NonNullType', type: { kind: 'NamedType', name: { kind: 'Name', value: 'Int' } }, @@ -8066,7 +7850,7 @@ export const GetBitcoinCashTransactionsDocument = { selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'transactionsV2' }, + name: { kind: 'Name', value: 'unspentTxOutputsV5' }, arguments: [ { kind: 'Argument', @@ -8078,114 +7862,52 @@ export const GetBitcoinCashTransactionsDocument = { }, { kind: 'Argument', - name: { kind: 'Name', value: 'pageSize' }, - value: { - kind: 'Variable', - name: { kind: 'Name', value: 'pageSize' }, - }, - }, - { - kind: 'Argument', - name: { kind: 'Name', value: 'pageNumber' }, + name: { kind: 'Name', value: 'page' }, value: { kind: 'Variable', - name: { kind: 'Name', value: 'pageNumber' }, + name: { kind: 'Name', value: 'page' }, }, }, ], selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'balanceChange' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'value' }, - }, - ], - }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'blockNumber' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'fee' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'value' }, - }, - ], - }, - }, - { kind: 'Field', name: { kind: 'Name', value: 'hash' } }, - { - kind: 'Field', - name: { kind: 'Name', value: 'inputs' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'address' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'amount' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'value' }, - }, - ], - }, - }, - ], - }, + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'oTxHash' }, }, { kind: 'Field', - name: { kind: 'Name', value: 'outputs' }, + name: { kind: 'Name', value: 'oIndex' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'value' }, selectionSet: { kind: 'SelectionSet', selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'amount' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'value' }, - }, - ], - }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'address' }, + name: { kind: 'Name', value: 'value' }, }, ], }, }, { kind: 'Field', - name: { kind: 'Name', value: 'timestamp' }, + name: { kind: 'Name', value: 'oTxHex' }, }, { kind: 'Field', - name: { kind: 'Name', value: 'status' }, + name: { kind: 'Name', value: 'address' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isCoinbase' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'scriptHex' }, }, ], }, @@ -8198,8 +7920,8 @@ export const GetBitcoinCashTransactionsDocument = { }, ], } as unknown as DocumentNode< - GetBitcoinCashTransactionsQuery, - GetBitcoinCashTransactionsQueryVariables + BitcoinCashScanUtxOsQuery, + BitcoinCashScanUtxOsQueryVariables >; export const GetAssetsWithFilterDocument = { kind: 'Document', @@ -16145,13 +15867,70 @@ export const GetDogecoinTransactionsDocument = { GetDogecoinTransactionsQuery, GetDogecoinTransactionsQueryVariables >; -export const EthereumBalanceDocument = { +export const DogecoinBroadcastTransactionDocument = { kind: 'Document', definitions: [ { kind: 'OperationDefinition', operation: 'query', - name: { kind: 'Name', value: 'EthereumBalance' }, + name: { kind: 'Name', value: 'DogecoinBroadcastTransaction' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'rawHex' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'dogecoin' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'broadcastTransaction' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'rawHex' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'rawHex' }, + }, + }, + ], + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + DogecoinBroadcastTransactionQuery, + DogecoinBroadcastTransactionQueryVariables +>; +export const DogecoinScanUtxOsDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'DogecoinScanUTXOs' }, variableDefinitions: [ { kind: 'VariableDefinition', @@ -16167,19 +15946,27 @@ export const EthereumBalanceDocument = { }, }, }, + { + kind: 'VariableDefinition', + variable: { kind: 'Variable', name: { kind: 'Name', value: 'page' } }, + type: { + kind: 'NonNullType', + type: { kind: 'NamedType', name: { kind: 'Name', value: 'Int' } }, + }, + }, ], selectionSet: { kind: 'SelectionSet', selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'ethereum' }, + name: { kind: 'Name', value: 'dogecoin' }, selectionSet: { kind: 'SelectionSet', selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'balances' }, + name: { kind: 'Name', value: 'unspentTxOutputsV5' }, arguments: [ { kind: 'Argument', @@ -16189,71 +15976,55 @@ export const EthereumBalanceDocument = { name: { kind: 'Name', value: 'address' }, }, }, + { + kind: 'Argument', + name: { kind: 'Name', value: 'page' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'page' }, + }, + }, ], selectionSet: { kind: 'SelectionSet', selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'address' }, + name: { kind: 'Name', value: 'oTxHash' }, }, { kind: 'Field', - name: { kind: 'Name', value: 'asset' }, + name: { kind: 'Name', value: 'oIndex' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'value' }, selectionSet: { kind: 'SelectionSet', selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'symbol' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'contract' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'id' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'name' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'image' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'chain' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'decimals' }, - }, - { - kind: 'Field', - name: { kind: 'Name', value: 'price' }, - selectionSet: { - kind: 'SelectionSet', - selections: [ - { - kind: 'Field', - name: { kind: 'Name', value: 'amount' }, - }, - { - kind: 'Field', - name: { - kind: 'Name', - value: 'scalingFactor', - }, - }, - ], - }, + name: { kind: 'Name', value: 'value' }, }, ], }, }, + { + kind: 'Field', + name: { kind: 'Name', value: 'oTxHex' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isCoinbase' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'scriptHex' }, + }, ], }, }, @@ -16265,34 +16036,28 @@ export const EthereumBalanceDocument = { }, ], } as unknown as DocumentNode< - EthereumBalanceQuery, - EthereumBalanceQueryVariables + DogecoinScanUtxOsQuery, + DogecoinScanUtxOsQueryVariables >; -export const GetCryptoAssetsDocument = { +export const EthereumBalanceDocument = { kind: 'Document', definitions: [ { kind: 'OperationDefinition', operation: 'query', - name: { kind: 'Name', value: 'GetCryptoAssets' }, + name: { kind: 'Name', value: 'EthereumBalance' }, variableDefinitions: [ { kind: 'VariableDefinition', variable: { kind: 'Variable', - name: { kind: 'Name', value: 'input' }, + name: { kind: 'Name', value: 'address' }, }, type: { kind: 'NonNullType', type: { - kind: 'ListType', - type: { - kind: 'NonNullType', - type: { - kind: 'NamedType', - name: { kind: 'Name', value: 'CryptoAssetArgs' }, - }, - }, + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, }, }, }, @@ -16302,55 +16067,83 @@ export const GetCryptoAssetsDocument = { selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'assets' }, + name: { kind: 'Name', value: 'ethereum' }, selectionSet: { kind: 'SelectionSet', selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'cryptoAssets' }, + name: { kind: 'Name', value: 'balances' }, arguments: [ { kind: 'Argument', - name: { kind: 'Name', value: 'input' }, + name: { kind: 'Name', value: 'address' }, value: { kind: 'Variable', - name: { kind: 'Name', value: 'input' }, + name: { kind: 'Name', value: 'address' }, }, }, ], selectionSet: { kind: 'SelectionSet', selections: [ - { kind: 'Field', name: { kind: 'Name', value: 'chain' } }, - { - kind: 'Field', - name: { kind: 'Name', value: 'contract' }, - }, - { kind: 'Field', name: { kind: 'Name', value: 'id' } }, - { kind: 'Field', name: { kind: 'Name', value: 'name' } }, - { - kind: 'Field', - name: { kind: 'Name', value: 'symbol' }, - }, - { kind: 'Field', name: { kind: 'Name', value: 'image' } }, { kind: 'Field', - name: { kind: 'Name', value: 'decimals' }, + name: { kind: 'Name', value: 'address' }, }, { kind: 'Field', - name: { kind: 'Name', value: 'price' }, + name: { kind: 'Name', value: 'asset' }, selectionSet: { kind: 'SelectionSet', selections: [ { kind: 'Field', - name: { kind: 'Name', value: 'amount' }, + name: { kind: 'Name', value: 'symbol' }, }, { kind: 'Field', - name: { kind: 'Name', value: 'scalingFactor' }, + name: { kind: 'Name', value: 'contract' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'id' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'name' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'image' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'chain' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'decimals' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'price' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'amount' }, + }, + { + kind: 'Field', + name: { + kind: 'Name', + value: 'scalingFactor', + }, + }, + ], + }, }, ], }, @@ -16366,8 +16159,8 @@ export const GetCryptoAssetsDocument = { }, ], } as unknown as DocumentNode< - GetCryptoAssetsQuery, - GetCryptoAssetsQueryVariables + EthereumBalanceQuery, + EthereumBalanceQueryVariables >; export const LitecoinBalanceDocument = { kind: 'Document', @@ -16731,6 +16524,178 @@ export const GetLitecoinTransactionsDocument = { GetLitecoinTransactionsQuery, GetLitecoinTransactionsQueryVariables >; +export const LitecoinBroadcastTransactionDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'LitecoinBroadcastTransaction' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'rawHex' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'litecoin' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'broadcastTransaction' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'rawHex' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'rawHex' }, + }, + }, + ], + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + LitecoinBroadcastTransactionQuery, + LitecoinBroadcastTransactionQueryVariables +>; +export const LitecoinScanUtxOsDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'LitecoinScanUTXOs' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'address' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + { + kind: 'VariableDefinition', + variable: { kind: 'Variable', name: { kind: 'Name', value: 'page' } }, + type: { + kind: 'NonNullType', + type: { kind: 'NamedType', name: { kind: 'Name', value: 'Int' } }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'litecoin' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'unspentTxOutputsV5' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'address' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'address' }, + }, + }, + { + kind: 'Argument', + name: { kind: 'Name', value: 'page' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'page' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'oTxHash' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'oIndex' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'value' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'value' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'oTxHex' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'isCoinbase' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'scriptHex' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + LitecoinScanUtxOsQuery, + LitecoinScanUtxOsQueryVariables +>; export const GetSolanaBalanceDocument = { kind: 'Document', definitions: [ @@ -17681,3 +17646,104 @@ export const GetTronTransactionsDocument = { GetTronTransactionsQuery, GetTronTransactionsQueryVariables >; +export const GetCryptoAssetsDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'GetCryptoAssets' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'input' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'ListType', + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'CryptoAssetArgs' }, + }, + }, + }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'assets' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'cryptoAssets' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'input' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'input' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'chain' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'contract' }, + }, + { kind: 'Field', name: { kind: 'Name', value: 'id' } }, + { kind: 'Field', name: { kind: 'Name', value: 'name' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'symbol' }, + }, + { kind: 'Field', name: { kind: 'Name', value: 'image' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'decimals' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'price' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'amount' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'scalingFactor' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + GetCryptoAssetsQuery, + GetCryptoAssetsQueryVariables +>; From 7f272c2805787d9c168cc9fb3334608e90fae2e3 Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Tue, 30 Apr 2024 22:45:04 +0300 Subject: [PATCH 085/132] feat: add getTransaction by hash method to all UTXO chains --- packages/bitcoin/src/chain.provider.ts | 5 + .../datasource/indexer/indexer.data-source.ts | 35 +- .../src/datasource/indexer/operations.graphql | 26 + .../queries/getTransactionByHash.query.ts | 23 + .../src/datasource/indexer/queries/index.ts | 1 + packages/bitcoincash/src/chain.provider.ts | 5 + .../datasource/indexer/indexer.data-source.ts | 22 + .../src/datasource/indexer/operations.graphql | 27 +- .../queries/getTransactionByHash.query.ts | 23 + .../src/datasource/indexer/queries/index.ts | 1 + .../src/core/datasource/base.data-source.ts | 6 +- packages/dogecoin/src/chain.provider.ts | 5 + .../datasource/indexer/indexer.data-source.ts | 22 + .../src/datasource/indexer/operations.graphql | 25 + .../queries/getTransactionByHash.query.ts | 23 + .../src/datasource/indexer/queries/index.ts | 1 + packages/litecoin/src/chain.provider.ts | 12 +- .../datasource/indexer/indexer.data-source.ts | 22 + .../src/datasource/indexer/operations.graphql | 26 + .../queries/getTransactionByHash.query.ts | 23 + .../src/datasource/indexer/queries/index.ts | 1 + utility-packages/graphql/src/gql/gql.ts | 24 +- utility-packages/graphql/src/gql/graphql.ts | 596 ++++++++++++++++++ 23 files changed, 928 insertions(+), 26 deletions(-) create mode 100644 packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts create mode 100644 packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts create mode 100644 packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts create mode 100644 packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts diff --git a/packages/bitcoin/src/chain.provider.ts b/packages/bitcoin/src/chain.provider.ts index 2af9be8d..01121b94 100644 --- a/packages/bitcoin/src/chain.provider.ts +++ b/packages/bitcoin/src/chain.provider.ts @@ -3,6 +3,7 @@ import { ChainDecorator, MsgEncoding, Transaction, + TransactionData, } from '@xdefi-tech/chains-core'; import { UtxoProvider } from '@xdefi-tech/chains-utxo'; @@ -31,4 +32,8 @@ export class BitcoinProvider extends UtxoProvider { async broadcast(messages: ChainMsg[]): Promise { return this.dataSource.broadcast(messages); } + + async getTransaction(txHash: string): Promise { + return this.dataSource.getTransaction(txHash); + } } diff --git a/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts b/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts index 5ad2aca8..3470adc4 100644 --- a/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts +++ b/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts @@ -10,14 +10,11 @@ import { Balance, FeeData, DefaultFeeOptions, + TransactionData, + TransactionStatus, } from '@xdefi-tech/chains-core'; import Bitcoin from 'bitcoinjs-lib'; -import { - UTXO, - UTXODataProvider, - UTXOManifest, - UTXOTransaction, -} from '@xdefi-tech/chains-utxo'; +import { UTXO, UTXOManifest } from '@xdefi-tech/chains-utxo'; import { utils } from 'ethers'; import { Observable } from 'rxjs'; @@ -30,10 +27,11 @@ import { getNFTBalance, broadcast, scanUTXOs, + getTransactionByHash, } from './queries'; @Injectable() -export class IndexerDataSource extends DataSource implements UTXODataProvider { +export class IndexerDataSource extends DataSource { constructor(manifest: UTXOManifest) { super(manifest); } @@ -70,10 +68,6 @@ export class IndexerDataSource extends DataSource implements UTXODataProvider { }); } - getTransaction(_txid: string): Promise { - throw new Error('Method not implemented.'); - } - async getNFTBalance(address: string) { return getNFTBalance(address); } @@ -145,4 +139,23 @@ export class IndexerDataSource extends DataSource implements UTXODataProvider { async getNonce(_address: string): Promise { throw new Error('Method not implemented.'); } + + async getTransaction(txHash: string): Promise { + const tx = await getTransactionByHash(txHash); + let response = null; + + if (tx && tx.hash) { + response = { + hash: tx.hash, + from: (tx.inputs && tx.inputs[0].address) || '', + to: (tx.outputs && tx.outputs[0].address) || '', + status: + (tx.blockNumber || 0) > 0 + ? TransactionStatus.success + : TransactionStatus.pending, + }; + } + + return response; + } } diff --git a/packages/bitcoin/src/datasource/indexer/operations.graphql b/packages/bitcoin/src/datasource/indexer/operations.graphql index af6f46db..cb8d6ad5 100644 --- a/packages/bitcoin/src/datasource/indexer/operations.graphql +++ b/packages/bitcoin/src/datasource/indexer/operations.graphql @@ -81,3 +81,29 @@ query BitcoinScanUTXOs($address: String!, $page: Int!) { } } } + +query BitcoinGetTransactionByHash($txHash: String!) { + bitcoin { + getTransactionByHashV5(txHash: $txHash) { + hex + txid + hash + size + version + locktime + confirmations + blocktime + time + blockhash + blockNumber + sourceOfData + inputs { + address + } + outputs { + address + } + } + } +} + diff --git a/packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts new file mode 100644 index 00000000..bc3bcea9 --- /dev/null +++ b/packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -0,0 +1,23 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { + BitcoinGetTransactionByHashDocument, + UtxotransactionByHashV5, +} from '@xdefi-tech/chains-graphql'; + +export const getTransactionByHash = async ( + txHash: string +): Promise | null> => { + try { + const response = await gqlClient.query({ + query: BitcoinGetTransactionByHashDocument, + variables: { + txHash, + }, + }); + + return response.data.bitcoin.getTransactionByHashV5 || null; + } catch (error) { + console.error('Error fetching transaction by hash', error); + return null; + } +}; diff --git a/packages/bitcoin/src/datasource/indexer/queries/index.ts b/packages/bitcoin/src/datasource/indexer/queries/index.ts index e3a20064..62e585d6 100644 --- a/packages/bitcoin/src/datasource/indexer/queries/index.ts +++ b/packages/bitcoin/src/datasource/indexer/queries/index.ts @@ -4,3 +4,4 @@ export * from './fees.query'; export * from './nfts.query'; export * from './broadcast.query'; export * from './scanUTXOs.query'; +export * from './getTransactionByHash.query'; diff --git a/packages/bitcoincash/src/chain.provider.ts b/packages/bitcoincash/src/chain.provider.ts index da9b1295..08ca2e63 100644 --- a/packages/bitcoincash/src/chain.provider.ts +++ b/packages/bitcoincash/src/chain.provider.ts @@ -3,6 +3,7 @@ import { ChainDecorator, MsgEncoding, Transaction, + TransactionData, } from '@xdefi-tech/chains-core'; import { MsgBody, UtxoProvider } from '@xdefi-tech/chains-utxo'; @@ -31,4 +32,8 @@ export class BitcoinCashProvider extends UtxoProvider { async broadcast(messages: ChainMsg[]): Promise { return this.dataSource.broadcast(messages); } + + async getTransaction(txHash: string): Promise { + return this.dataSource.getTransaction(txHash); + } } diff --git a/packages/bitcoincash/src/datasource/indexer/indexer.data-source.ts b/packages/bitcoincash/src/datasource/indexer/indexer.data-source.ts index 1fdb7522..cb60667d 100644 --- a/packages/bitcoincash/src/datasource/indexer/indexer.data-source.ts +++ b/packages/bitcoincash/src/datasource/indexer/indexer.data-source.ts @@ -10,6 +10,8 @@ import { Balance, FeeData, DefaultFeeOptions, + TransactionData, + TransactionStatus, } from '@xdefi-tech/chains-core'; import { UTXO, UTXOManifest } from '@xdefi-tech/chains-utxo'; import { utils } from 'ethers'; @@ -24,6 +26,7 @@ import { getFees, broadcast, scanUTXOs, + getTransactionByHash, } from './queries'; @Injectable() @@ -135,4 +138,23 @@ export class IndexerDataSource extends DataSource { async getNonce(_address: string): Promise { throw new Error('Method not implemented.'); } + + async getTransaction(txHash: string): Promise { + const tx = await getTransactionByHash(txHash); + let response = null; + + if (tx && tx.hash) { + response = { + hash: tx.hash, + from: (tx.inputs && tx.inputs[0].address) || '', + to: (tx.outputs && tx.outputs[0].address) || '', + status: + (tx.blockNumber || 0) > 0 + ? TransactionStatus.success + : TransactionStatus.pending, + }; + } + + return response; + } } diff --git a/packages/bitcoincash/src/datasource/indexer/operations.graphql b/packages/bitcoincash/src/datasource/indexer/operations.graphql index 4275fa52..37043326 100644 --- a/packages/bitcoincash/src/datasource/indexer/operations.graphql +++ b/packages/bitcoincash/src/datasource/indexer/operations.graphql @@ -80,4 +80,29 @@ query BitcoinCashScanUTXOs($address: String!, $page: Int!) { scriptHex } } -} \ No newline at end of file +} + +query BitcoinCashGetTransactionByHash($txHash: String!) { + bitcoincash { + getTransactionByHashV5(txHash: $txHash) { + hex + txid + hash + size + version + locktime + confirmations + blocktime + time + blockhash + blockNumber + sourceOfData + inputs { + address + } + outputs { + address + } + } + } +} diff --git a/packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts new file mode 100644 index 00000000..486da75a --- /dev/null +++ b/packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -0,0 +1,23 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { + BitcoinCashGetTransactionByHashDocument, + UtxotransactionByHashV5, +} from '@xdefi-tech/chains-graphql'; + +export const getTransactionByHash = async ( + txHash: string +): Promise | null> => { + try { + const response = await gqlClient.query({ + query: BitcoinCashGetTransactionByHashDocument, + variables: { + txHash, + }, + }); + + return response.data.bitcoincash.getTransactionByHashV5 || null; + } catch (error) { + console.error('Error fetching transaction by hash', error); + return null; + } +}; diff --git a/packages/bitcoincash/src/datasource/indexer/queries/index.ts b/packages/bitcoincash/src/datasource/indexer/queries/index.ts index f48bc8a8..cf93050e 100644 --- a/packages/bitcoincash/src/datasource/indexer/queries/index.ts +++ b/packages/bitcoincash/src/datasource/indexer/queries/index.ts @@ -3,3 +3,4 @@ export * from './balances.query'; export * from './fees.query'; export * from './broadcast.query'; export * from './scanUTXOs.query'; +export * from './getTransactionByHash.query'; diff --git a/packages/core/src/core/datasource/base.data-source.ts b/packages/core/src/core/datasource/base.data-source.ts index 112cd0e7..fbf5e79f 100644 --- a/packages/core/src/core/datasource/base.data-source.ts +++ b/packages/core/src/core/datasource/base.data-source.ts @@ -1,7 +1,7 @@ import { Observable } from 'rxjs'; import { Manifest } from '../chain'; -import { Coin, FeeOptions, GasFeeSpeed, Msg, Transaction } from '../../core'; +import { Coin, FeeOptions, GasFeeSpeed, Msg, Transaction, TransactionData } from '../../core'; import { FeeData } from '../interfaces'; export interface BalanceFilter { @@ -76,4 +76,8 @@ export abstract class DataSource { public async scanUTXOs(_address: string): Promise { throw new Error('Method not implemented.'); } + + public async getTransaction(_txHash: string): Promise { + throw new Error('Method not implemented.'); + } } diff --git a/packages/dogecoin/src/chain.provider.ts b/packages/dogecoin/src/chain.provider.ts index c3cf8313..6c318336 100644 --- a/packages/dogecoin/src/chain.provider.ts +++ b/packages/dogecoin/src/chain.provider.ts @@ -3,6 +3,7 @@ import { ChainDecorator, MsgEncoding, Transaction, + TransactionData, } from '@xdefi-tech/chains-core'; import { MsgBody, UtxoProvider } from '@xdefi-tech/chains-utxo'; @@ -31,4 +32,8 @@ export class DogecoinProvider extends UtxoProvider { async broadcast(messages: ChainMsg[]): Promise { return this.dataSource.broadcast(messages); } + + async getTransaction(txHash: string): Promise { + return this.dataSource.getTransaction(txHash); + } } diff --git a/packages/dogecoin/src/datasource/indexer/indexer.data-source.ts b/packages/dogecoin/src/datasource/indexer/indexer.data-source.ts index ef05db25..a888d623 100644 --- a/packages/dogecoin/src/datasource/indexer/indexer.data-source.ts +++ b/packages/dogecoin/src/datasource/indexer/indexer.data-source.ts @@ -10,6 +10,8 @@ import { Balance, FeeData, DefaultFeeOptions, + TransactionData, + TransactionStatus, } from '@xdefi-tech/chains-core'; import { UTXO } from '@xdefi-tech/chains-utxo'; import type { UTXOManifest } from '@xdefi-tech/chains-utxo'; @@ -25,6 +27,7 @@ import { getFees, broadcast, scanUTXOs, + getTransactionByHash, } from './queries'; @Injectable() @@ -136,4 +139,23 @@ export class IndexerDataSource extends DataSource { async getNonce(_address: string): Promise { throw new Error('Method not implemented.'); } + + async getTransaction(txHash: string): Promise { + const tx = await getTransactionByHash(txHash); + let response = null; + + if (tx && tx.hash) { + response = { + hash: tx.hash, + from: (tx.inputs && tx.inputs[0].address) || '', + to: (tx.outputs && tx.outputs[0].address) || '', + status: + (tx.blockNumber || 0) > 0 + ? TransactionStatus.success + : TransactionStatus.pending, + }; + } + + return response; + } } diff --git a/packages/dogecoin/src/datasource/indexer/operations.graphql b/packages/dogecoin/src/datasource/indexer/operations.graphql index a80c6d15..75a4d99e 100644 --- a/packages/dogecoin/src/datasource/indexer/operations.graphql +++ b/packages/dogecoin/src/datasource/indexer/operations.graphql @@ -82,3 +82,28 @@ query DogecoinScanUTXOs($address: String!, $page: Int!) { } } } + +query DogecoinGetTransactionByHash($txHash: String!) { + dogecoin { + getTransactionByHashV5(txHash: $txHash) { + hex + txid + hash + size + version + locktime + confirmations + blocktime + time + blockhash + blockNumber + sourceOfData + inputs { + address + } + outputs { + address + } + } + } +} diff --git a/packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts new file mode 100644 index 00000000..c0dbed4e --- /dev/null +++ b/packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -0,0 +1,23 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { + DogecoinGetTransactionByHashDocument, + UtxotransactionByHashV5, +} from '@xdefi-tech/chains-graphql'; + +export const getTransactionByHash = async ( + txHash: string +): Promise | null> => { + try { + const response = await gqlClient.query({ + query: DogecoinGetTransactionByHashDocument, + variables: { + txHash, + }, + }); + + return response.data.dogecoin.getTransactionByHashV5 || null; + } catch (error) { + console.error('Error fetching transaction by hash', error); + return null; + } +}; diff --git a/packages/dogecoin/src/datasource/indexer/queries/index.ts b/packages/dogecoin/src/datasource/indexer/queries/index.ts index f48bc8a8..cf93050e 100644 --- a/packages/dogecoin/src/datasource/indexer/queries/index.ts +++ b/packages/dogecoin/src/datasource/indexer/queries/index.ts @@ -3,3 +3,4 @@ export * from './balances.query'; export * from './fees.query'; export * from './broadcast.query'; export * from './scanUTXOs.query'; +export * from './getTransactionByHash.query'; diff --git a/packages/litecoin/src/chain.provider.ts b/packages/litecoin/src/chain.provider.ts index 1b2565db..4c6ea497 100644 --- a/packages/litecoin/src/chain.provider.ts +++ b/packages/litecoin/src/chain.provider.ts @@ -1,4 +1,10 @@ -import { Chain, ChainDecorator, MsgEncoding, Transaction } from '@xdefi-tech/chains-core'; +import { + Chain, + ChainDecorator, + MsgEncoding, + Transaction, + TransactionData, +} from '@xdefi-tech/chains-core'; import { MsgBody, UtxoProvider } from '@xdefi-tech/chains-utxo'; import { IndexerDataSource } from './datasource'; @@ -26,4 +32,8 @@ export class LitecoinProvider extends UtxoProvider { async broadcast(messages: ChainMsg[]): Promise { return this.dataSource.broadcast(messages); } + + async getTransaction(txHash: string): Promise { + return this.dataSource.getTransaction(txHash); + } } diff --git a/packages/litecoin/src/datasource/indexer/indexer.data-source.ts b/packages/litecoin/src/datasource/indexer/indexer.data-source.ts index 7c931d0f..08980920 100644 --- a/packages/litecoin/src/datasource/indexer/indexer.data-source.ts +++ b/packages/litecoin/src/datasource/indexer/indexer.data-source.ts @@ -10,6 +10,8 @@ import { Balance, FeeData, DefaultFeeOptions, + TransactionData, + TransactionStatus, } from '@xdefi-tech/chains-core'; import { UTXO, UTXOManifest } from '@xdefi-tech/chains-utxo'; import { utils } from 'ethers'; @@ -24,6 +26,7 @@ import { getFees, broadcast, scanUTXOs, + getTransactionByHash, } from './queries'; @Injectable() @@ -135,4 +138,23 @@ export class IndexerDataSource extends DataSource { async getNonce(_address: string): Promise { throw new Error('Method not implemented.'); } + + async getTransaction(txHash: string): Promise { + const tx = await getTransactionByHash(txHash); + let response = null; + + if (tx && tx.hash) { + response = { + hash: tx.hash, + from: (tx.inputs && tx.inputs[0].address) || '', + to: (tx.outputs && tx.outputs[0].address) || '', + status: + (tx.blockNumber || 0) > 0 + ? TransactionStatus.success + : TransactionStatus.pending, + }; + } + + return response; + } } diff --git a/packages/litecoin/src/datasource/indexer/operations.graphql b/packages/litecoin/src/datasource/indexer/operations.graphql index c758476b..6a1697c0 100644 --- a/packages/litecoin/src/datasource/indexer/operations.graphql +++ b/packages/litecoin/src/datasource/indexer/operations.graphql @@ -81,3 +81,29 @@ query LitecoinScanUTXOs($address: String!, $page: Int!) { } } } + +query LitecoinGetTransactionByHash($txHash: String!) { + litecoin { + getTransactionByHashV5(txHash: $txHash) { + hex + txid + hash + size + version + locktime + confirmations + blocktime + time + blockhash + blockNumber + sourceOfData + inputs { + address + } + outputs { + address + } + } + } +} + diff --git a/packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts new file mode 100644 index 00000000..a61fd422 --- /dev/null +++ b/packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -0,0 +1,23 @@ +import { gqlClient } from '@xdefi-tech/chains-core'; +import { + LitecoinGetTransactionByHashDocument, + UtxotransactionByHashV5, +} from '@xdefi-tech/chains-graphql'; + +export const getTransactionByHash = async ( + txHash: string +): Promise | null> => { + try { + const response = await gqlClient.query({ + query: LitecoinGetTransactionByHashDocument, + variables: { + txHash, + }, + }); + + return response.data.litecoin.getTransactionByHashV5 || null; + } catch (error) { + console.error('Error fetching transaction by hash', error); + return null; + } +}; diff --git a/packages/litecoin/src/datasource/indexer/queries/index.ts b/packages/litecoin/src/datasource/indexer/queries/index.ts index f48bc8a8..cf93050e 100644 --- a/packages/litecoin/src/datasource/indexer/queries/index.ts +++ b/packages/litecoin/src/datasource/indexer/queries/index.ts @@ -3,3 +3,4 @@ export * from './balances.query'; export * from './fees.query'; export * from './broadcast.query'; export * from './scanUTXOs.query'; +export * from './getTransactionByHash.query'; diff --git a/utility-packages/graphql/src/gql/gql.ts b/utility-packages/graphql/src/gql/gql.ts index 0020cc84..a3118d9b 100644 --- a/utility-packages/graphql/src/gql/gql.ts +++ b/utility-packages/graphql/src/gql/gql.ts @@ -15,19 +15,19 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ const documents = { 'query GetBinanceBalances($address: String!) {\n binance {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}\n\nquery GetBinanceTransactions($address: String!, $first: Int, $after: String, $blockRange: OptBlockSelector) {\n binance {\n transactions(\n address: $address\n first: $first\n after: $after\n blockRange: $blockRange\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n type\n }\n blockHeight\n data\n fee {\n value\n }\n fromAddress\n hash\n status\n time\n toAddress\n type\n }\n }\n }\n }\n}\n\nquery GetBinanceFee {\n binance {\n fee\n }\n}\n\nquery GetBinanceStatus {\n binance {\n status {\n lastBlock {\n hash\n height\n time\n txCount\n }\n }\n }\n}': types.GetBinanceBalancesDocument, - 'query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinBroadcastTransaction($rawHex: String!) {\n bitcoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinScanUTXOs($address: String!, $page: Int!) {\n bitcoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}': + 'query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinBroadcastTransaction($rawHex: String!) {\n bitcoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinScanUTXOs($address: String!, $page: Int!) {\n bitcoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery BitcoinGetTransactionByHash($txHash: String!) {\n bitcoin {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}': types.BitcoinBalanceDocument, - 'query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinCashBroadcastTransaction($rawHex: String!) {\n bitcoincash {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinCashScanUTXOs($address: String!, $page: Int!) {\n bitcoincash {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}': + 'query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinCashBroadcastTransaction($rawHex: String!) {\n bitcoincash {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinCashScanUTXOs($address: String!, $page: Int!) {\n bitcoincash {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery BitcoinCashGetTransactionByHash($txHash: String!) {\n bitcoincash {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}': types.BitcoinCashBalanceDocument, 'query GetAssetsWithFilter($page: ConnectionArgs!, $filter: TokenFilter) {\n assets {\n tokens(page: $page, filter: $filter) {\n page {\n edges {\n node {\n contracts {\n address\n symbol\n chain\n scalingFactor\n }\n id\n price {\n amount\n scalingFactor\n }\n symbol\n name\n icon\n }\n }\n }\n }\n }\n}': types.GetAssetsWithFilterDocument, 'query CosmosBalance($address: String!) {\n cosmos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCosmosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cosmos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCosmosFees {\n cosmos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCosmosStatus {\n cosmos {\n status {\n lastBlock\n }\n }\n}\n\nquery OsmosisBalance($address: String!) {\n osmosis {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetOsmosisTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n osmosis {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetOsmosisFees {\n osmosis {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetOsmosisStatus {\n osmosis {\n status {\n lastBlock\n }\n }\n}\n\nquery AxelarBalance($address: String!) {\n axelar {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAxelarTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n axelar {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAxelarFees {\n axelar {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAxelarStatus {\n axelar {\n status {\n lastBlock\n }\n }\n}\n\nquery CrescentBalance($address: String!) {\n crescent {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCrescentTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n crescent {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCrescentFees {\n crescent {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCrescentStatus {\n crescent {\n status {\n lastBlock\n }\n }\n}\n\nquery KavaBalance($address: String!) {\n kava {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKavaTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kava {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKavaFees {\n kava {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKavaStatus {\n kava {\n status {\n lastBlock\n }\n }\n}\n\nquery AkashBalance($address: String!) {\n akash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetAkashTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n akash {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetAkashFees {\n akash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetAkashStatus {\n akash {\n status {\n lastBlock\n }\n }\n}\n\nquery CronosBalance($address: String!) {\n cronos {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetCronosTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n cronos {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetCronosFees {\n cronos {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetCronosStatus {\n cronos {\n status {\n lastBlock\n }\n }\n}\n\nquery KujiraBalance($address: String!) {\n kujira {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetKujiraTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n kujira {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetKujiraFees {\n kujira {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetKujiraStatus {\n kujira {\n status {\n lastBlock\n }\n }\n}\n\nquery StrideBalance($address: String!) {\n stride {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStrideTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stride {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStrideFees {\n stride {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStrideStatus {\n stride {\n status {\n lastBlock\n }\n }\n}\n\nquery MarsBalance($address: String!) {\n mars {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetMarsTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n mars {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetMarsFees {\n mars {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetMarsStatus {\n mars {\n status {\n lastBlock\n }\n }\n}\n\nquery JunoBalance($address: String!) {\n juno {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetJunoTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n juno {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetJunoFees {\n juno {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetJunoStatus {\n juno {\n status {\n lastBlock\n }\n }\n}\n\nquery StargazeBalance($address: String!) {\n stargaze {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n scalingFactor\n }\n symbol\n }\n }\n }\n}\n\nquery GetStargazeTransactions($address: String!, $blockRange: OptBlockRange!, $first: Int!, $after: String) {\n stargaze {\n transactions(\n address: $address\n blockRange: $blockRange\n first: $first\n after: $after\n ) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n blockHeight\n blockIndex\n hash\n status\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n name\n symbol\n image\n decimals\n }\n fromAddress\n toAddress\n }\n timestamp\n fee {\n amount {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n symbol\n price {\n amount\n }\n }\n }\n payer\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetStargazeFees {\n stargaze {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetStargazeStatus {\n stargaze {\n status {\n lastBlock\n }\n }\n}': types.CosmosBalanceDocument, - 'query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery DogecoinBroadcastTransaction($rawHex: String!) {\n dogecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery DogecoinScanUTXOs($address: String!, $page: Int!) {\n dogecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}': + 'query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery DogecoinBroadcastTransaction($rawHex: String!) {\n dogecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery DogecoinScanUTXOs($address: String!, $page: Int!) {\n dogecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery DogecoinGetTransactionByHash($txHash: String!) {\n dogecoin {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}': types.DogecoinBalanceDocument, 'query EthereumBalance($address: String!) {\n ethereum {\n balances(address: $address) {\n address\n asset {\n symbol\n contract\n id\n name\n image\n chain\n decimals\n price {\n amount\n scalingFactor\n }\n }\n }\n }\n}': types.EthereumBalanceDocument, - 'query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery LitecoinBroadcastTransaction($rawHex: String!) {\n litecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery LitecoinScanUTXOs($address: String!, $page: Int!) {\n litecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}': + 'query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery LitecoinBroadcastTransaction($rawHex: String!) {\n litecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery LitecoinScanUTXOs($address: String!, $page: Int!) {\n litecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery LitecoinGetTransactionByHash($txHash: String!) {\n litecoin {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}': types.LitecoinBalanceDocument, 'query GetSolanaBalance($address: String!) {\n solana {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n name\n image\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetSolanaTransactions($address: String!, $first: Int!, $after: String) {\n solana {\n transactions(address: $address, first: $first, after: $after) {\n pageInfo {\n endCursor\n hasNextPage\n }\n edges {\n node {\n fee {\n amount {\n value\n }\n payer\n }\n hash\n slot\n status\n timestamp\n transfers {\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n fromAddress\n toAddress\n }\n signers\n }\n }\n }\n }\n}\n\nquery GetSolanaStatus {\n solana {\n status {\n lastBlock\n }\n }\n}\n\nquery GetSolanaFee {\n solana {\n fee {\n high\n low\n medium\n }\n }\n}': types.GetSolanaBalanceDocument, @@ -61,14 +61,14 @@ export function gql( * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( - source: 'query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinBroadcastTransaction($rawHex: String!) {\n bitcoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinScanUTXOs($address: String!, $page: Int!) {\n bitcoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}' -): typeof documents['query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinBroadcastTransaction($rawHex: String!) {\n bitcoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinScanUTXOs($address: String!, $page: Int!) {\n bitcoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}']; + source: 'query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinBroadcastTransaction($rawHex: String!) {\n bitcoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinScanUTXOs($address: String!, $page: Int!) {\n bitcoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery BitcoinGetTransactionByHash($txHash: String!) {\n bitcoin {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}' +): typeof documents['query BitcoinBalance($address: String!) {\n bitcoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinFees {\n bitcoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinBroadcastTransaction($rawHex: String!) {\n bitcoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinScanUTXOs($address: String!, $page: Int!) {\n bitcoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery BitcoinGetTransactionByHash($txHash: String!) {\n bitcoin {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( - source: 'query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinCashBroadcastTransaction($rawHex: String!) {\n bitcoincash {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinCashScanUTXOs($address: String!, $page: Int!) {\n bitcoincash {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}' -): typeof documents['query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinCashBroadcastTransaction($rawHex: String!) {\n bitcoincash {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinCashScanUTXOs($address: String!, $page: Int!) {\n bitcoincash {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}']; + source: 'query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinCashBroadcastTransaction($rawHex: String!) {\n bitcoincash {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinCashScanUTXOs($address: String!, $page: Int!) {\n bitcoincash {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery BitcoinCashGetTransactionByHash($txHash: String!) {\n bitcoincash {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}' +): typeof documents['query BitcoinCashBalance($address: String!) {\n bitcoincash {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetBitcoinCashFees {\n bitcoincash {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetBitcoinCashTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n bitcoincash {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery BitcoinCashBroadcastTransaction($rawHex: String!) {\n bitcoincash {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery BitcoinCashScanUTXOs($address: String!, $page: Int!) {\n bitcoincash {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery BitcoinCashGetTransactionByHash($txHash: String!) {\n bitcoincash {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -85,8 +85,8 @@ export function gql( * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( - source: 'query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery DogecoinBroadcastTransaction($rawHex: String!) {\n dogecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery DogecoinScanUTXOs($address: String!, $page: Int!) {\n dogecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}' -): typeof documents['query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery DogecoinBroadcastTransaction($rawHex: String!) {\n dogecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery DogecoinScanUTXOs($address: String!, $page: Int!) {\n dogecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}']; + source: 'query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery DogecoinBroadcastTransaction($rawHex: String!) {\n dogecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery DogecoinScanUTXOs($address: String!, $page: Int!) {\n dogecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery DogecoinGetTransactionByHash($txHash: String!) {\n dogecoin {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}' +): typeof documents['query DogecoinBalance($address: String!) {\n dogecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetDogecoinFees {\n dogecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetDogecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n dogecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery DogecoinBroadcastTransaction($rawHex: String!) {\n dogecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery DogecoinScanUTXOs($address: String!, $page: Int!) {\n dogecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery DogecoinGetTransactionByHash($txHash: String!) {\n dogecoin {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ @@ -97,8 +97,8 @@ export function gql( * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ export function gql( - source: 'query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery LitecoinBroadcastTransaction($rawHex: String!) {\n litecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery LitecoinScanUTXOs($address: String!, $page: Int!) {\n litecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}' -): typeof documents['query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery LitecoinBroadcastTransaction($rawHex: String!) {\n litecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery LitecoinScanUTXOs($address: String!, $page: Int!) {\n litecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}']; + source: 'query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery LitecoinBroadcastTransaction($rawHex: String!) {\n litecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery LitecoinScanUTXOs($address: String!, $page: Int!) {\n litecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery LitecoinGetTransactionByHash($txHash: String!) {\n litecoin {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}' +): typeof documents['query LitecoinBalance($address: String!) {\n litecoin {\n balances(address: $address) {\n address\n amount {\n value\n }\n asset {\n chain\n contract\n decimals\n id\n image\n name\n price {\n amount\n }\n symbol\n }\n }\n }\n}\n\nquery GetLitecoinFees {\n litecoin {\n fee {\n high\n low\n medium\n }\n }\n}\n\nquery GetLitecoinTransactions($address: String!, $pageSize: Int!, $pageNumber: Int!) {\n litecoin {\n transactionsV2(address: $address, pageSize: $pageSize, pageNumber: $pageNumber) {\n balanceChange {\n value\n }\n blockNumber\n fee {\n value\n }\n hash\n inputs {\n address\n amount {\n value\n }\n }\n outputs {\n amount {\n value\n }\n address\n }\n timestamp\n status\n }\n }\n}\n\nquery LitecoinBroadcastTransaction($rawHex: String!) {\n litecoin {\n broadcastTransaction(rawHex: $rawHex)\n }\n}\n\nquery LitecoinScanUTXOs($address: String!, $page: Int!) {\n litecoin {\n unspentTxOutputsV5(address: $address, page: $page) {\n oTxHash\n oIndex\n value {\n value\n }\n oTxHex\n address\n isCoinbase\n scriptHex\n }\n }\n}\n\nquery LitecoinGetTransactionByHash($txHash: String!) {\n litecoin {\n getTransactionByHashV5(txHash: $txHash) {\n hex\n txid\n hash\n size\n version\n locktime\n confirmations\n blocktime\n time\n blockhash\n blockNumber\n sourceOfData\n inputs {\n address\n }\n outputs {\n address\n }\n }\n }\n}']; /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/utility-packages/graphql/src/gql/graphql.ts b/utility-packages/graphql/src/gql/graphql.ts index 46adb6d6..da486e81 100644 --- a/utility-packages/graphql/src/gql/graphql.ts +++ b/utility-packages/graphql/src/gql/graphql.ts @@ -4203,6 +4203,34 @@ export type BitcoinScanUtxOsQuery = { }; }; +export type BitcoinGetTransactionByHashQueryVariables = Exact<{ + txHash: Scalars['String']; +}>; + +export type BitcoinGetTransactionByHashQuery = { + __typename?: 'Query'; + bitcoin: { + __typename?: 'BitcoinChain'; + getTransactionByHashV5: { + __typename?: 'UtxotransactionByHashV5'; + hex?: string | null; + txid?: string | null; + hash: string; + size: number; + version: number; + locktime?: number | null; + confirmations?: number | null; + blocktime?: number | null; + time?: number | null; + blockhash?: string | null; + blockNumber?: number | null; + sourceOfData: string; + inputs: Array<{ __typename?: 'Input'; address: string }>; + outputs: Array<{ __typename?: 'Output'; address: string }>; + }; + }; +}; + export type BitcoinCashBalanceQueryVariables = Exact<{ address: Scalars['String']; }>; @@ -4311,6 +4339,34 @@ export type BitcoinCashScanUtxOsQuery = { }; }; +export type BitcoinCashGetTransactionByHashQueryVariables = Exact<{ + txHash: Scalars['String']; +}>; + +export type BitcoinCashGetTransactionByHashQuery = { + __typename?: 'Query'; + bitcoincash: { + __typename?: 'BitcoincashChain'; + getTransactionByHashV5: { + __typename?: 'UtxotransactionByHashV5'; + hex?: string | null; + txid?: string | null; + hash: string; + size: number; + version: number; + locktime?: number | null; + confirmations?: number | null; + blocktime?: number | null; + time?: number | null; + blockhash?: string | null; + blockNumber?: number | null; + sourceOfData: string; + inputs: Array<{ __typename?: 'Input'; address: string }>; + outputs: Array<{ __typename?: 'Output'; address: string }>; + }; + }; +}; + export type GetAssetsWithFilterQueryVariables = Exact<{ page: ConnectionArgs; filter?: InputMaybe; @@ -5980,6 +6036,34 @@ export type DogecoinScanUtxOsQuery = { }; }; +export type DogecoinGetTransactionByHashQueryVariables = Exact<{ + txHash: Scalars['String']; +}>; + +export type DogecoinGetTransactionByHashQuery = { + __typename?: 'Query'; + dogecoin: { + __typename?: 'DogeChain'; + getTransactionByHashV5: { + __typename?: 'UtxotransactionByHashV5'; + hex?: string | null; + txid?: string | null; + hash: string; + size: number; + version: number; + locktime?: number | null; + confirmations?: number | null; + blocktime?: number | null; + time?: number | null; + blockhash?: string | null; + blockNumber?: number | null; + sourceOfData: string; + inputs: Array<{ __typename?: 'Input'; address: string }>; + outputs: Array<{ __typename?: 'Output'; address: string }>; + }; + }; +}; + export type EthereumBalanceQueryVariables = Exact<{ address: Scalars['String']; }>; @@ -6115,6 +6199,34 @@ export type LitecoinScanUtxOsQuery = { }; }; +export type LitecoinGetTransactionByHashQueryVariables = Exact<{ + txHash: Scalars['String']; +}>; + +export type LitecoinGetTransactionByHashQuery = { + __typename?: 'Query'; + litecoin: { + __typename?: 'LitecoinChain'; + getTransactionByHashV5: { + __typename?: 'UtxotransactionByHashV5'; + hex?: string | null; + txid?: string | null; + hash: string; + size: number; + version: number; + locktime?: number | null; + confirmations?: number | null; + blocktime?: number | null; + time?: number | null; + blockhash?: string | null; + blockNumber?: number | null; + sourceOfData: string; + inputs: Array<{ __typename?: 'Input'; address: string }>; + outputs: Array<{ __typename?: 'Output'; address: string }>; + }; + }; +}; + export type GetSolanaBalanceQueryVariables = Exact<{ address: Scalars['String']; }>; @@ -7389,6 +7501,127 @@ export const BitcoinScanUtxOsDocument = { BitcoinScanUtxOsQuery, BitcoinScanUtxOsQueryVariables >; +export const BitcoinGetTransactionByHashDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'BitcoinGetTransactionByHash' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'txHash' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'bitcoin' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'getTransactionByHashV5' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'txHash' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'txHash' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'hex' } }, + { kind: 'Field', name: { kind: 'Name', value: 'txid' } }, + { kind: 'Field', name: { kind: 'Name', value: 'hash' } }, + { kind: 'Field', name: { kind: 'Name', value: 'size' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'version' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'locktime' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'confirmations' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blocktime' }, + }, + { kind: 'Field', name: { kind: 'Name', value: 'time' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockhash' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockNumber' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'sourceOfData' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'inputs' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'outputs' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + BitcoinGetTransactionByHashQuery, + BitcoinGetTransactionByHashQueryVariables +>; export const BitcoinCashBalanceDocument = { kind: 'Document', definitions: [ @@ -7923,6 +8156,127 @@ export const BitcoinCashScanUtxOsDocument = { BitcoinCashScanUtxOsQuery, BitcoinCashScanUtxOsQueryVariables >; +export const BitcoinCashGetTransactionByHashDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'BitcoinCashGetTransactionByHash' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'txHash' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'bitcoincash' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'getTransactionByHashV5' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'txHash' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'txHash' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'hex' } }, + { kind: 'Field', name: { kind: 'Name', value: 'txid' } }, + { kind: 'Field', name: { kind: 'Name', value: 'hash' } }, + { kind: 'Field', name: { kind: 'Name', value: 'size' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'version' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'locktime' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'confirmations' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blocktime' }, + }, + { kind: 'Field', name: { kind: 'Name', value: 'time' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockhash' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockNumber' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'sourceOfData' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'inputs' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'outputs' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + BitcoinCashGetTransactionByHashQuery, + BitcoinCashGetTransactionByHashQueryVariables +>; export const GetAssetsWithFilterDocument = { kind: 'Document', definitions: [ @@ -16039,6 +16393,127 @@ export const DogecoinScanUtxOsDocument = { DogecoinScanUtxOsQuery, DogecoinScanUtxOsQueryVariables >; +export const DogecoinGetTransactionByHashDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'DogecoinGetTransactionByHash' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'txHash' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'dogecoin' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'getTransactionByHashV5' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'txHash' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'txHash' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'hex' } }, + { kind: 'Field', name: { kind: 'Name', value: 'txid' } }, + { kind: 'Field', name: { kind: 'Name', value: 'hash' } }, + { kind: 'Field', name: { kind: 'Name', value: 'size' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'version' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'locktime' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'confirmations' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blocktime' }, + }, + { kind: 'Field', name: { kind: 'Name', value: 'time' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockhash' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockNumber' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'sourceOfData' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'inputs' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'outputs' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + DogecoinGetTransactionByHashQuery, + DogecoinGetTransactionByHashQueryVariables +>; export const EthereumBalanceDocument = { kind: 'Document', definitions: [ @@ -16696,6 +17171,127 @@ export const LitecoinScanUtxOsDocument = { LitecoinScanUtxOsQuery, LitecoinScanUtxOsQueryVariables >; +export const LitecoinGetTransactionByHashDocument = { + kind: 'Document', + definitions: [ + { + kind: 'OperationDefinition', + operation: 'query', + name: { kind: 'Name', value: 'LitecoinGetTransactionByHash' }, + variableDefinitions: [ + { + kind: 'VariableDefinition', + variable: { + kind: 'Variable', + name: { kind: 'Name', value: 'txHash' }, + }, + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { kind: 'Name', value: 'String' }, + }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'litecoin' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'getTransactionByHashV5' }, + arguments: [ + { + kind: 'Argument', + name: { kind: 'Name', value: 'txHash' }, + value: { + kind: 'Variable', + name: { kind: 'Name', value: 'txHash' }, + }, + }, + ], + selectionSet: { + kind: 'SelectionSet', + selections: [ + { kind: 'Field', name: { kind: 'Name', value: 'hex' } }, + { kind: 'Field', name: { kind: 'Name', value: 'txid' } }, + { kind: 'Field', name: { kind: 'Name', value: 'hash' } }, + { kind: 'Field', name: { kind: 'Name', value: 'size' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'version' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'locktime' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'confirmations' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blocktime' }, + }, + { kind: 'Field', name: { kind: 'Name', value: 'time' } }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockhash' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'blockNumber' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'sourceOfData' }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'inputs' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + ], + }, + }, + { + kind: 'Field', + name: { kind: 'Name', value: 'outputs' }, + selectionSet: { + kind: 'SelectionSet', + selections: [ + { + kind: 'Field', + name: { kind: 'Name', value: 'address' }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + LitecoinGetTransactionByHashQuery, + LitecoinGetTransactionByHashQueryVariables +>; export const GetSolanaBalanceDocument = { kind: 'Document', definitions: [ From 2d5b46c9267d944f319507179500842f00cb426b Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Wed, 1 May 2024 09:29:12 +0300 Subject: [PATCH 086/132] feat: remove hascoin & blockchair dataproviders, update test cases, update readme --- packages/bitcoin/README.md | 7 ---- .../datasource/indexer/indexer.data-source.ts | 2 +- .../queries/getTransactionByHash.query.ts | 9 ++--- .../indexer/queries/scanUTXOs.query.ts | 6 ++-- packages/bitcoin/src/manifests.ts | 2 -- .../src/signers/private-key.signer.spec.ts | 18 +++------- packages/bitcoincash/README.md | 7 ---- .../queries/getTransactionByHash.query.ts | 9 ++--- packages/bitcoincash/src/manifests.ts | 2 -- .../src/signers/private-key.signer.spec.ts | 33 +++++++++++++++++ packages/dogecoin/README.md | 7 ---- .../queries/getTransactionByHash.query.ts | 9 ++--- packages/dogecoin/src/manifests.ts | 2 -- .../src/signers/ledger.signer.spec.ts | 31 ++++++++-------- .../src/signers/private-key.signer.spec.ts | 31 ++++++++-------- .../src/signers/seed-phrase.signer.spec.ts | 32 ++++++++--------- .../src/signers/trezor.signer.spec.ts | 36 ++++++++----------- packages/litecoin/README.md | 7 ---- .../queries/getTransactionByHash.query.ts | 9 ++--- packages/litecoin/src/manifests.ts | 2 -- packages/utxo/src/chain.provider.ts | 31 ++++------------ .../haskoin/haskoin.data-provider.ts | 2 +- packages/utxo/src/manifests.ts | 4 +-- packages/utxo/src/msg.ts | 2 +- 24 files changed, 117 insertions(+), 183 deletions(-) diff --git a/packages/bitcoin/README.md b/packages/bitcoin/README.md index b7d0b3c4..1322ab6e 100644 --- a/packages/bitcoin/README.md +++ b/packages/bitcoin/README.md @@ -7,8 +7,6 @@ const bitcoinManifest = { rpcURL: 'https://btc-haskoin.xdefiservices.com', chainSymbol: 'BTC', blockExplorerURL: 'https://blockchair.com/bitcoin', - dataProviderType: 'haskoin', - dataProviderURL: 'https://api.haskoin.com/btc', chainId: 'bitcoin', chain: 'bitcoin', decimals: 8, @@ -29,8 +27,3 @@ const bitcoinManifest = { - `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). - `decimals`: The number of decimal places used for representing token amounts on the Bitcoin blockchain. In this case, it is set to 8. - `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Bitcoin blockchain network. In this example, all fee levels are set to 1. - -UTXO Specifec fields: - -- `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair -- `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts b/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts index 3470adc4..d4017810 100644 --- a/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts +++ b/packages/bitcoin/src/datasource/indexer/indexer.data-source.ts @@ -13,7 +13,7 @@ import { TransactionData, TransactionStatus, } from '@xdefi-tech/chains-core'; -import Bitcoin from 'bitcoinjs-lib'; +import * as Bitcoin from 'bitcoinjs-lib'; import { UTXO, UTXOManifest } from '@xdefi-tech/chains-utxo'; import { utils } from 'ethers'; import { Observable } from 'rxjs'; diff --git a/packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts index bc3bcea9..41e6c30c 100644 --- a/packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts +++ b/packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -1,12 +1,7 @@ import { gqlClient } from '@xdefi-tech/chains-core'; -import { - BitcoinGetTransactionByHashDocument, - UtxotransactionByHashV5, -} from '@xdefi-tech/chains-graphql'; +import { BitcoinGetTransactionByHashDocument } from '@xdefi-tech/chains-graphql'; -export const getTransactionByHash = async ( - txHash: string -): Promise | null> => { +export const getTransactionByHash = async (txHash: string) => { try { const response = await gqlClient.query({ query: BitcoinGetTransactionByHashDocument, diff --git a/packages/bitcoin/src/datasource/indexer/queries/scanUTXOs.query.ts b/packages/bitcoin/src/datasource/indexer/queries/scanUTXOs.query.ts index ad3c5497..64cf4fdb 100644 --- a/packages/bitcoin/src/datasource/indexer/queries/scanUTXOs.query.ts +++ b/packages/bitcoin/src/datasource/indexer/queries/scanUTXOs.query.ts @@ -1,6 +1,6 @@ import { gqlClient } from '@xdefi-tech/chains-core'; import { - DogecoinScanUtxOsDocument, + BitcoinScanUtxOsDocument, UnspentTransactionOutputV5, } from '@xdefi-tech/chains-graphql'; @@ -8,12 +8,12 @@ export const scanUTXOs = async ( address: string ): Promise => { const response = await gqlClient.query({ - query: DogecoinScanUtxOsDocument, + query: BitcoinScanUtxOsDocument, variables: { address, page: 0, }, }); - return response.data.dogecoin.unspentTxOutputsV5; + return response.data.bitcoin.unspentTxOutputsV5; }; diff --git a/packages/bitcoin/src/manifests.ts b/packages/bitcoin/src/manifests.ts index 8f7fe79a..8a97cbe2 100644 --- a/packages/bitcoin/src/manifests.ts +++ b/packages/bitcoin/src/manifests.ts @@ -6,8 +6,6 @@ export const BITCOIN_MANIFEST: UTXOManifest = { rpcURL: 'https://btc-haskoin.xdefiservices.com', chainSymbol: 'BTC', blockExplorerURL: 'https://blockchair.com/bitcoin', - dataProviderType: 'haskoin', - dataProviderURL: 'https://api.haskoin.com/btc', chainId: 'bitcoin', chain: 'bitcoin', decimals: 8, diff --git a/packages/bitcoin/src/signers/private-key.signer.spec.ts b/packages/bitcoin/src/signers/private-key.signer.spec.ts index 3de43a61..0fd5aa64 100644 --- a/packages/bitcoin/src/signers/private-key.signer.spec.ts +++ b/packages/bitcoin/src/signers/private-key.signer.spec.ts @@ -21,16 +21,14 @@ describe('private-key.signer', () => { let message: Msg; beforeEach(() => { - privateKey = 'L1nvuM997ysJ7izhBwr8SCpnKKPtpZDGrr3fuC8E6dgXfUkE9Ub4'; + privateKey = 'KyaowqfYE7mJmTYEpxPJmAXwErQQY6KdDRynbg7SQPTAvC3bLNmF'; signer = new PrivateKeySigner(privateKey); - provider = new BitcoinProvider(new IndexerDataSource(BITCOIN_MANIFEST), { - apiKey: '', - }); + provider = new BitcoinProvider(new IndexerDataSource(BITCOIN_MANIFEST)); txInput = { - from: 'bc1qlmywh0zkz0xlc9rkfjy5haqerjlzf4rrwpxd9m', - to: 'bc1qlmywh0zkz0xlc9rkfjy5haqerjlzf4rrwpxd9m', + from: 'bc1qfcsf4tue7jcgedd4s06ws765dvqw5kjn2zztvw', + to: 'bc1qfcsf4tue7jcgedd4s06ws765dvqw5kjn2zztvw', amount: 0.000001, }; @@ -68,12 +66,4 @@ describe('private-key.signer', () => { it('should get a private key', async () => { expect(await signer.getPrivateKey('')).toEqual(privateKey); }); - - it('should broadcast the thansaction to blockchain', async () => { - const msg = provider.createMsg(txInput); - await signer.sign(msg as ChainMsg); - - const tx = await provider.broadcast([msg]); - expect(tx).toBeTruthy(); - }); }); diff --git a/packages/bitcoincash/README.md b/packages/bitcoincash/README.md index 7cdb8eb6..93452b91 100644 --- a/packages/bitcoincash/README.md +++ b/packages/bitcoincash/README.md @@ -7,8 +7,6 @@ const bitcoincashManifest = { rpcURL: 'https://bch-mainnet.xdefiservices.com', chainSymbol: 'BCH', blockExplorerURL: 'https://blockchair.com/bitcoin-cash', - dataProviderType: 'haskoin', - dataProviderURL: 'https://api.haskoin.com/bch', chainId: 'bitcoincash', chain: 'bitcoincash', decimals: 8, @@ -29,8 +27,3 @@ const bitcoincashManifest = { - `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). - `decimals`: The number of decimal places used for representing token amounts on the Bitcoin Cash blockchain. In this case, it is set to 8. - `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Bitcoin Cash blockchain network. In this example, all fee levels are set to 1. - -UTXO Specifec fields: - -- `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair -- `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts index 486da75a..e13e18e9 100644 --- a/packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts +++ b/packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -1,12 +1,7 @@ import { gqlClient } from '@xdefi-tech/chains-core'; -import { - BitcoinCashGetTransactionByHashDocument, - UtxotransactionByHashV5, -} from '@xdefi-tech/chains-graphql'; +import { BitcoinCashGetTransactionByHashDocument } from '@xdefi-tech/chains-graphql'; -export const getTransactionByHash = async ( - txHash: string -): Promise | null> => { +export const getTransactionByHash = async (txHash: string) => { try { const response = await gqlClient.query({ query: BitcoinCashGetTransactionByHashDocument, diff --git a/packages/bitcoincash/src/manifests.ts b/packages/bitcoincash/src/manifests.ts index 052fb38b..507708fe 100644 --- a/packages/bitcoincash/src/manifests.ts +++ b/packages/bitcoincash/src/manifests.ts @@ -6,8 +6,6 @@ export const BITCOINCASH_MANIFEST: UTXOManifest = { rpcURL: 'https://bch-mainnet.xdefiservices.com', chainSymbol: 'BCH', blockExplorerURL: 'https://blockchair.com/bitcoin-cash', - dataProviderType: 'haskoin', - dataProviderURL: 'https://api.haskoin.com/bch', chainId: 'bitcoincash', chain: 'bitcoincash', decimals: 8, diff --git a/packages/bitcoincash/src/signers/private-key.signer.spec.ts b/packages/bitcoincash/src/signers/private-key.signer.spec.ts index 92078ef4..2d082b6f 100644 --- a/packages/bitcoincash/src/signers/private-key.signer.spec.ts +++ b/packages/bitcoincash/src/signers/private-key.signer.spec.ts @@ -13,6 +13,39 @@ jest.mock('../datasource/indexer/queries/balances.query', () => ({ }, })); +jest.mock('../datasource/indexer/queries/scanUTXOs.query', () => ({ + scanUTXOs: () => { + return [ + { + oTxHash: + '9536a4f3efc4c4db7e88cda0e3668038678cba5d34ed80c2e9a6adaf33973386', + oIndex: 0, + oTxHex: + '0100000001a0f1ebe12602a226d5fd7407b5aceece2ad220c9121222cb0e800e97eec27c2a000000006b483045022100fb8e3eee81f80107de496f21635c35e86063947363f735ba30fc28b153f7629102204d899df15b0410c6dbab3149c58c7eceb7a1aec05a6e2b215ebf6a4697a9867541210340b6f9fa321f12bab6dcf264f44e2a644fd1d3cc7512a57ca3d2c99ee3bfa7d4ffffffff0210270000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688accc5d0100000000001976a914e26ef4edfcff06b0ad42ed42efa8af1ee5684b7b88ac00000000', + address: 'qq8s9kmuyl9avm5ef7jlgsnv9x80ygj7scyzcr6vad', + scriptHex: '76a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688ac', + isCoinbase: null, + value: { + value: '10000', + }, + }, + { + oTxHash: + '1f92f48e5a61dfb616b34ebeefb2fce1480b6ecb3e4e8eeeb34fe89ee7a5df2e', + oIndex: 0, + oTxHex: + '0100000001c07daebf83cf9164494c63f26e399d25202c7f2407fd62a5050812feaf8ae461010000006b4830450221009d07e0e1b465d494d73e4deecda2fe3552d75bd28975f0f2c548c1d0e6616f0202205fd9afcb792a78470873fe224e642c86855a1e0d305590cdd5310fb8bd0e7cfb412103712c13f60c49c5211ebec518a17f4648112b4c0b2628a4fd787649002cdbe8b0000000000210270000000000001976a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688acea910d00000000001976a914f2b1d800f92299c107a366ff4ac62eb70ea597e488ac00000000', + address: 'qq8s9kmuyl9avm5ef7jlgsnv9x80ygj7scyzcr6vad', + scriptHex: '76a9140f02db7c27cbd66e994fa5f4426c298ef2225e8688ac', + isCoinbase: null, + value: { + value: '10000', + }, + }, + ]; + }, +})); + describe('private-key.signer', () => { let privateKey: string; let signer: PrivateKeySigner; diff --git a/packages/dogecoin/README.md b/packages/dogecoin/README.md index 7d3e3d02..0394f5c9 100644 --- a/packages/dogecoin/README.md +++ b/packages/dogecoin/README.md @@ -7,8 +7,6 @@ const dogecoinManifest = { rpcURL: 'https://blockstream.info', chainSymbol: 'DOGE', blockExplorerURL: 'https://blockchair.com/dogecoin', - dataProviderType: 'blockchair', - dataProviderURL: 'https://rpc-proxy.xdefi.services/blockchair/dogecoin', chainId: 'dogecoin', chain: 'dogecoin', decimals: 8, @@ -29,8 +27,3 @@ const dogecoinManifest = { - `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). - `decimals`: The number of decimal places used for representing token amounts on the Dogecoin blockchain. In this case, it is set to 8. - `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Dogecoin blockchain network. In this example, all fee levels are set to 1. - -UTXO Specifec fields: - -- `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair -- `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts index c0dbed4e..ac360096 100644 --- a/packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts +++ b/packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -1,12 +1,7 @@ import { gqlClient } from '@xdefi-tech/chains-core'; -import { - DogecoinGetTransactionByHashDocument, - UtxotransactionByHashV5, -} from '@xdefi-tech/chains-graphql'; +import { DogecoinGetTransactionByHashDocument } from '@xdefi-tech/chains-graphql'; -export const getTransactionByHash = async ( - txHash: string -): Promise | null> => { +export const getTransactionByHash = async (txHash: string) => { try { const response = await gqlClient.query({ query: DogecoinGetTransactionByHashDocument, diff --git a/packages/dogecoin/src/manifests.ts b/packages/dogecoin/src/manifests.ts index 5eec8907..2b8b5f6f 100644 --- a/packages/dogecoin/src/manifests.ts +++ b/packages/dogecoin/src/manifests.ts @@ -6,8 +6,6 @@ export const DOGECOIN_MANIFEST: UTXOManifest = { rpcURL: 'https://blockstream.info', chainSymbol: 'DOGE', blockExplorerURL: 'https://blockchair.com/dogecoin', - dataProviderType: 'blockchair', - dataProviderURL: 'https://rpc-proxy.xdefi.services/blockchair/dogecoin', chainId: 'dogecoin', chain: 'dogecoin', decimals: 8, diff --git a/packages/dogecoin/src/signers/ledger.signer.spec.ts b/packages/dogecoin/src/signers/ledger.signer.spec.ts index 418781e6..25b8af30 100644 --- a/packages/dogecoin/src/signers/ledger.signer.spec.ts +++ b/packages/dogecoin/src/signers/ledger.signer.spec.ts @@ -1,6 +1,5 @@ import { Msg } from '@xdefi-tech/chains-core'; import Transport from '@ledgerhq/hw-transport-webhid'; -import { BlockchairDataProvider } from '@xdefi-tech/chains-utxo'; import * as Dogecoin from 'bitcoinjs-lib'; import { DogecoinProvider } from '../chain.provider'; @@ -47,24 +46,22 @@ describe('ledger.signer', () => { let externalTransport: any; beforeAll(() => { - jest - .spyOn(BlockchairDataProvider.prototype, 'scanUTXOs') - .mockResolvedValue([ - { - hash: '16120787df8f4bf06c422fe362eabd48d0ef2383e567d624f748cd40f9882cad', + jest.spyOn(IndexerDataSource.prototype, 'scanUTXOs').mockResolvedValue([ + { + hash: '16120787df8f4bf06c422fe362eabd48d0ef2383e567d624f748cd40f9882cad', + value: 10000000, + index: 0, + witnessUtxo: { value: 10000000, - index: 0, - witnessUtxo: { - value: 10000000, - script: Buffer.from([ - 118, 169, 20, 198, 2, 220, 48, 138, 169, 74, 205, 117, 83, 119, - 87, 238, 202, 121, 29, 169, 87, 228, 241, 136, 172, - ]), - }, - txHex: - '010000000102a95e8c5a5ebefa6431867f1e1691e5dd9cad10b2d1e8efce9b15c48c86f68d000000006b483045022100f21d3cac7d1332fdea2b33b8dd9859743b923dfa42431b49512d8dbb81acce5702204d2a009e45657147acf1b23204bc01a0d338e86c8cad458a394d933e2b3f24f20121031db6a1e76aad4f63aaea779d05a15a5619749a808c8d5b6856ae449b503e1d58ffffffff0280969800000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac700c4c05000000001976a91447542a50d8d84ed278690657e36bdda110f0181688ac00000000', + script: Buffer.from([ + 118, 169, 20, 198, 2, 220, 48, 138, 169, 74, 205, 117, 83, 119, 87, + 238, 202, 121, 29, 169, 87, 228, 241, 136, 172, + ]), }, - ]); + txHex: + '010000000102a95e8c5a5ebefa6431867f1e1691e5dd9cad10b2d1e8efce9b15c48c86f68d000000006b483045022100f21d3cac7d1332fdea2b33b8dd9859743b923dfa42431b49512d8dbb81acce5702204d2a009e45657147acf1b23204bc01a0d338e86c8cad458a394d933e2b3f24f20121031db6a1e76aad4f63aaea779d05a15a5619749a808c8d5b6856ae449b503e1d58ffffffff0280969800000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac700c4c05000000001976a91447542a50d8d84ed278690657e36bdda110f0181688ac00000000', + }, + ]); jest .spyOn(Dogecoin.Psbt.prototype, 'addInput') diff --git a/packages/dogecoin/src/signers/private-key.signer.spec.ts b/packages/dogecoin/src/signers/private-key.signer.spec.ts index 3e95fcf9..c5647cb8 100644 --- a/packages/dogecoin/src/signers/private-key.signer.spec.ts +++ b/packages/dogecoin/src/signers/private-key.signer.spec.ts @@ -1,5 +1,4 @@ import { Msg } from '@xdefi-tech/chains-core'; -import { BlockchairDataProvider } from '@xdefi-tech/chains-utxo'; import { DogecoinProvider } from '../chain.provider'; import { IndexerDataSource } from '../datasource'; @@ -22,24 +21,22 @@ describe('private-key.signer', () => { let message: Msg; beforeAll(() => { - jest - .spyOn(BlockchairDataProvider.prototype, 'scanUTXOs') - .mockResolvedValue([ - { - hash: '16120787df8f4bf06c422fe362eabd48d0ef2383e567d624f748cd40f9882cad', + jest.spyOn(IndexerDataSource.prototype, 'scanUTXOs').mockResolvedValue([ + { + hash: '16120787df8f4bf06c422fe362eabd48d0ef2383e567d624f748cd40f9882cad', + value: 10000000, + index: 0, + witnessUtxo: { value: 10000000, - index: 0, - witnessUtxo: { - value: 10000000, - script: Buffer.from([ - 118, 169, 20, 198, 2, 220, 48, 138, 169, 74, 205, 117, 83, 119, - 87, 238, 202, 121, 29, 169, 87, 228, 241, 136, 172, - ]), - }, - txHex: - '010000000102a95e8c5a5ebefa6431867f1e1691e5dd9cad10b2d1e8efce9b15c48c86f68d000000006b483045022100f21d3cac7d1332fdea2b33b8dd9859743b923dfa42431b49512d8dbb81acce5702204d2a009e45657147acf1b23204bc01a0d338e86c8cad458a394d933e2b3f24f20121031db6a1e76aad4f63aaea779d05a15a5619749a808c8d5b6856ae449b503e1d58ffffffff0280969800000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac700c4c05000000001976a91447542a50d8d84ed278690657e36bdda110f0181688ac00000000', + script: Buffer.from([ + 118, 169, 20, 198, 2, 220, 48, 138, 169, 74, 205, 117, 83, 119, 87, + 238, 202, 121, 29, 169, 87, 228, 241, 136, 172, + ]), }, - ]); + txHex: + '010000000102a95e8c5a5ebefa6431867f1e1691e5dd9cad10b2d1e8efce9b15c48c86f68d000000006b483045022100f21d3cac7d1332fdea2b33b8dd9859743b923dfa42431b49512d8dbb81acce5702204d2a009e45657147acf1b23204bc01a0d338e86c8cad458a394d933e2b3f24f20121031db6a1e76aad4f63aaea779d05a15a5619749a808c8d5b6856ae449b503e1d58ffffffff0280969800000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac700c4c05000000001976a91447542a50d8d84ed278690657e36bdda110f0181688ac00000000', + }, + ]); }); beforeEach(() => { diff --git a/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts b/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts index fe5849bd..87041cb7 100644 --- a/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts +++ b/packages/dogecoin/src/signers/seed-phrase.signer.spec.ts @@ -1,9 +1,9 @@ import { Msg } from '@xdefi-tech/chains-core'; -import { BlockchairDataProvider } from '@xdefi-tech/chains-utxo'; import { DogecoinProvider } from '../chain.provider'; import { DOGECOIN_MANIFEST } from '../manifests'; import { ChainMsg, MsgBody } from '../msg'; +import { IndexerDataSource } from '../datasource'; import { SeedPhraseSigner } from './seed-phrase.signer'; @@ -23,24 +23,22 @@ describe('seed-phrase.signer', () => { let message: Msg; beforeAll(() => { - jest - .spyOn(BlockchairDataProvider.prototype, 'scanUTXOs') - .mockResolvedValue([ - { - hash: '16120787df8f4bf06c422fe362eabd48d0ef2383e567d624f748cd40f9882cad', + jest.spyOn(IndexerDataSource.prototype, 'scanUTXOs').mockResolvedValue([ + { + hash: '16120787df8f4bf06c422fe362eabd48d0ef2383e567d624f748cd40f9882cad', + value: 10000000, + index: 0, + witnessUtxo: { value: 10000000, - index: 0, - witnessUtxo: { - value: 10000000, - script: Buffer.from([ - 118, 169, 20, 198, 2, 220, 48, 138, 169, 74, 205, 117, 83, 119, - 87, 238, 202, 121, 29, 169, 87, 228, 241, 136, 172, - ]), - }, - txHex: - '010000000102a95e8c5a5ebefa6431867f1e1691e5dd9cad10b2d1e8efce9b15c48c86f68d000000006b483045022100f21d3cac7d1332fdea2b33b8dd9859743b923dfa42431b49512d8dbb81acce5702204d2a009e45657147acf1b23204bc01a0d338e86c8cad458a394d933e2b3f24f20121031db6a1e76aad4f63aaea779d05a15a5619749a808c8d5b6856ae449b503e1d58ffffffff0280969800000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac700c4c05000000001976a91447542a50d8d84ed278690657e36bdda110f0181688ac00000000', + script: Buffer.from([ + 118, 169, 20, 198, 2, 220, 48, 138, 169, 74, 205, 117, 83, 119, 87, + 238, 202, 121, 29, 169, 87, 228, 241, 136, 172, + ]), }, - ]); + txHex: + '010000000102a95e8c5a5ebefa6431867f1e1691e5dd9cad10b2d1e8efce9b15c48c86f68d000000006b483045022100f21d3cac7d1332fdea2b33b8dd9859743b923dfa42431b49512d8dbb81acce5702204d2a009e45657147acf1b23204bc01a0d338e86c8cad458a394d933e2b3f24f20121031db6a1e76aad4f63aaea779d05a15a5619749a808c8d5b6856ae449b503e1d58ffffffff0280969800000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac700c4c05000000001976a91447542a50d8d84ed278690657e36bdda110f0181688ac00000000', + }, + ]); }); beforeEach(() => { diff --git a/packages/dogecoin/src/signers/trezor.signer.spec.ts b/packages/dogecoin/src/signers/trezor.signer.spec.ts index f1501380..1c383709 100644 --- a/packages/dogecoin/src/signers/trezor.signer.spec.ts +++ b/packages/dogecoin/src/signers/trezor.signer.spec.ts @@ -4,11 +4,7 @@ import { Params, Success, } from '@trezor/connect-web'; -import { - BlockchairDataProvider, - ChainMsg, - MsgBody, -} from '@xdefi-tech/chains-utxo'; +import { ChainMsg, MsgBody } from '@xdefi-tech/chains-utxo'; import { DogecoinProvider } from '../chain.provider'; import { IndexerDataSource } from '../datasource'; @@ -57,24 +53,22 @@ describe('trezor.signer', () => { let message: ChainMsg; beforeAll(() => { - jest - .spyOn(BlockchairDataProvider.prototype, 'scanUTXOs') - .mockResolvedValue([ - { - hash: '16120787df8f4bf06c422fe362eabd48d0ef2383e567d624f748cd40f9882cad', + jest.spyOn(IndexerDataSource.prototype, 'scanUTXOs').mockResolvedValue([ + { + hash: '16120787df8f4bf06c422fe362eabd48d0ef2383e567d624f748cd40f9882cad', + value: 10000000, + index: 0, + witnessUtxo: { value: 10000000, - index: 0, - witnessUtxo: { - value: 10000000, - script: Buffer.from([ - 118, 169, 20, 198, 2, 220, 48, 138, 169, 74, 205, 117, 83, 119, - 87, 238, 202, 121, 29, 169, 87, 228, 241, 136, 172, - ]), - }, - txHex: - '010000000102a95e8c5a5ebefa6431867f1e1691e5dd9cad10b2d1e8efce9b15c48c86f68d000000006b483045022100f21d3cac7d1332fdea2b33b8dd9859743b923dfa42431b49512d8dbb81acce5702204d2a009e45657147acf1b23204bc01a0d338e86c8cad458a394d933e2b3f24f20121031db6a1e76aad4f63aaea779d05a15a5619749a808c8d5b6856ae449b503e1d58ffffffff0280969800000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac700c4c05000000001976a91447542a50d8d84ed278690657e36bdda110f0181688ac00000000', + script: Buffer.from([ + 118, 169, 20, 198, 2, 220, 48, 138, 169, 74, 205, 117, 83, 119, 87, + 238, 202, 121, 29, 169, 87, 228, 241, 136, 172, + ]), }, - ]); + txHex: + '010000000102a95e8c5a5ebefa6431867f1e1691e5dd9cad10b2d1e8efce9b15c48c86f68d000000006b483045022100f21d3cac7d1332fdea2b33b8dd9859743b923dfa42431b49512d8dbb81acce5702204d2a009e45657147acf1b23204bc01a0d338e86c8cad458a394d933e2b3f24f20121031db6a1e76aad4f63aaea779d05a15a5619749a808c8d5b6856ae449b503e1d58ffffffff0280969800000000001976a914c602dc308aa94acd75537757eeca791da957e4f188ac700c4c05000000001976a91447542a50d8d84ed278690657e36bdda110f0181688ac00000000', + }, + ]); }); beforeEach(() => { diff --git a/packages/litecoin/README.md b/packages/litecoin/README.md index 89f7eb84..a6f0cf3a 100644 --- a/packages/litecoin/README.md +++ b/packages/litecoin/README.md @@ -7,8 +7,6 @@ const litecoinManifest = { rpcURL: 'https://blockstream.info', chainSymbol: 'LTC', blockExplorerURL: 'https://blockchair.com/litecoin', - dataProviderType: 'blockchair', - dataProviderURL: 'https://rpc-proxy.xdefi.services/blockchair/litecoin', chainId: 'litecoin', chain: 'litecoin', decimals: 8, @@ -29,8 +27,3 @@ const litecoinManifest = { - `chain`: The name of the blockchain network. If you are using IndexerDataSource, it must be obtained from the [registry](https://github.com/XDeFi-tech/xdefi-registry/blob/main/chains.json). - `decimals`: The number of decimal places used for representing token amounts on the Litecoin blockchain. In this case, it is set to 8. - `feeGasStep`: An object specifying the gas steps for different fee levels (high, medium, and low) used for transactions on the Litecoin blockchain network. In this example, all fee levels are set to 1. - -UTXO Specifec fields: - -- `dataProviderType`: Specifies the type of data provider used for retrieving blockchain data: hascoin/blockchair -- `dataProviderURL`: The URL of the data provider used for retrieving blockchain data: scanUTXOs, getTransaction diff --git a/packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts index a61fd422..183753c8 100644 --- a/packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts +++ b/packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -1,12 +1,7 @@ import { gqlClient } from '@xdefi-tech/chains-core'; -import { - LitecoinGetTransactionByHashDocument, - UtxotransactionByHashV5, -} from '@xdefi-tech/chains-graphql'; +import { LitecoinGetTransactionByHashDocument } from '@xdefi-tech/chains-graphql'; -export const getTransactionByHash = async ( - txHash: string -): Promise | null> => { +export const getTransactionByHash = async (txHash: string) => { try { const response = await gqlClient.query({ query: LitecoinGetTransactionByHashDocument, diff --git a/packages/litecoin/src/manifests.ts b/packages/litecoin/src/manifests.ts index a2ae5b90..f043b792 100644 --- a/packages/litecoin/src/manifests.ts +++ b/packages/litecoin/src/manifests.ts @@ -6,8 +6,6 @@ export const LITECOIN_MANIFEST: UTXOManifest = { rpcURL: 'https://blockstream.info', chainSymbol: 'LTC', blockExplorerURL: 'https://blockchair.com/litecoin', - dataProviderType: 'blockchair', - dataProviderURL: 'https://rpc-proxy.xdefi.services/blockchair/litecoin', chainId: 'litecoin', chain: 'litecoin', decimals: 8, diff --git a/packages/utxo/src/chain.provider.ts b/packages/utxo/src/chain.provider.ts index d0ebe024..afe33357 100644 --- a/packages/utxo/src/chain.provider.ts +++ b/packages/utxo/src/chain.provider.ts @@ -16,21 +16,14 @@ import axios, { Axios } from 'axios'; import { ChainMsg, MsgBody } from './msg'; import { UTXOManifest } from './manifests'; -import { - HaskoinDataProvider, - UTXODataProvider, - BlockchairDataProvider, -} from './data-provider'; export interface UtxoProviderOptions extends Chain.IOptions { apiKey?: string; - customDataProvider?: UTXODataProvider; } export class UtxoProvider extends Chain.Provider { public rpcProvider = null; public rest: Axios; - public utxoDataSource: UTXODataProvider; constructor(dataSource: DataSource, options?: UtxoProviderOptions) { super(dataSource, options); @@ -38,22 +31,6 @@ export class UtxoProvider extends Chain.Provider { this.rest = axios.create({ baseURL: manifest.rpcURL, }); - - if (manifest.dataProviderType === 'haskoin') { - this.utxoDataSource = new HaskoinDataProvider(manifest.dataProviderURL); - } else if (manifest.dataProviderType === 'blockchair') { - this.utxoDataSource = new BlockchairDataProvider( - manifest.dataProviderURL, - options?.apiKey || '' - ); - } else if ( - manifest.dataProviderType === 'custom' && - options?.customDataProvider - ) { - this.utxoDataSource = options.customDataProvider; - } else { - throw new Error('Invalid data source type'); - } } createMsg( @@ -100,11 +77,15 @@ export class UtxoProvider extends Chain.Provider { } async broadcast(messages: ChainMsg[]): Promise { - return this.utxoDataSource.broadcast(messages); + return this.dataSource.broadcast(messages); } async getTransaction(txHash: string): Promise { - const tx = await this.utxoDataSource.getTransaction(txHash); + const tx = await this.dataSource.getTransaction(txHash); + if (!tx) { + return null; + } + return { hash: tx.hash, status: TransactionStatus.success, diff --git a/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts b/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts index 941305a8..917fdb93 100644 --- a/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts +++ b/packages/utxo/src/data-provider/haskoin/haskoin.data-provider.ts @@ -76,7 +76,7 @@ export class HaskoinDataProvider implements UTXODataProvider { this.api = axios.create({ baseURL }); } - broadcast(messages: ChainMsg[]): Promise[]> { + broadcast(_messages: ChainMsg[]): Promise[]> { throw new Error('Method not implemented.'); } diff --git a/packages/utxo/src/manifests.ts b/packages/utxo/src/manifests.ts index 27e7d8cf..f6618042 100644 --- a/packages/utxo/src/manifests.ts +++ b/packages/utxo/src/manifests.ts @@ -1,6 +1,6 @@ import { Chain } from '@xdefi-tech/chains-core'; export interface UTXOManifest extends Chain.Manifest { - dataProviderType: 'haskoin' | 'blockchair' | 'custom'; - dataProviderURL: string; + dataProviderType?: 'haskoin' | 'blockchair' | 'custom'; + dataProviderURL?: string; } diff --git a/packages/utxo/src/msg.ts b/packages/utxo/src/msg.ts index ca90b355..6eabd5cd 100644 --- a/packages/utxo/src/msg.ts +++ b/packages/utxo/src/msg.ts @@ -38,7 +38,7 @@ export class ChainMsg extends BaseMsg { async buildTx() { const msgData = this.toData(); - const utxos = await this.provider.utxoDataSource.scanUTXOs(this.data.from); + const utxos = await this.provider.dataSource.scanUTXOs(this.data.from); const { fee } = await this.getFee(); if (!fee) throw new Error('Fee estimation is required for building transaction'); From 7de45e16eaea3d71c419d0ce54d165e33b173f9f Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Wed, 1 May 2024 09:36:00 +0300 Subject: [PATCH 087/132] bump: version --- .changeset/calm-impalas-cross.md | 5 +++++ .changeset/spicy-carrots-give.md | 11 +++++++++++ 2 files changed, 16 insertions(+) create mode 100644 .changeset/calm-impalas-cross.md create mode 100644 .changeset/spicy-carrots-give.md diff --git a/.changeset/calm-impalas-cross.md b/.changeset/calm-impalas-cross.md new file mode 100644 index 00000000..131a3255 --- /dev/null +++ b/.changeset/calm-impalas-cross.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-evm': patch +--- + +Feat: make signatureType optional field diff --git a/.changeset/spicy-carrots-give.md b/.changeset/spicy-carrots-give.md new file mode 100644 index 00000000..35b1318f --- /dev/null +++ b/.changeset/spicy-carrots-give.md @@ -0,0 +1,11 @@ +--- +'@xdefi-tech/chains-graphql': patch +'@xdefi-tech/chains-bitcoincash': patch +'@xdefi-tech/chains-dogecoin': patch +'@xdefi-tech/chains-litecoin': patch +'@xdefi-tech/chains-bitcoin': patch +'@xdefi-tech/chains-core': patch +'@xdefi-tech/chains-utxo': patch +--- + +Feat: move dataprovider from haskoin & blockchair to indexer for all UTXO chains From c04f8b666a127d3a88761815cf21241c02c19e3c Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Wed, 1 May 2024 10:47:26 +0300 Subject: [PATCH 088/132] fix: dogecoin scanUTXOs typo --- .../src/datasource/indexer/queries/scanUTXOs.query.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/dogecoin/src/datasource/indexer/queries/scanUTXOs.query.ts b/packages/dogecoin/src/datasource/indexer/queries/scanUTXOs.query.ts index 64cf4fdb..ad3c5497 100644 --- a/packages/dogecoin/src/datasource/indexer/queries/scanUTXOs.query.ts +++ b/packages/dogecoin/src/datasource/indexer/queries/scanUTXOs.query.ts @@ -1,6 +1,6 @@ import { gqlClient } from '@xdefi-tech/chains-core'; import { - BitcoinScanUtxOsDocument, + DogecoinScanUtxOsDocument, UnspentTransactionOutputV5, } from '@xdefi-tech/chains-graphql'; @@ -8,12 +8,12 @@ export const scanUTXOs = async ( address: string ): Promise => { const response = await gqlClient.query({ - query: BitcoinScanUtxOsDocument, + query: DogecoinScanUtxOsDocument, variables: { address, page: 0, }, }); - return response.data.bitcoin.unspentTxOutputsV5; + return response.data.dogecoin.unspentTxOutputsV5; }; From 3b42f941235cd528bad82246e8918b1662fa272a Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Wed, 1 May 2024 11:11:03 +0300 Subject: [PATCH 089/132] feat: remove osmojs lib from cosmos chain --- .changeset/olive-apes-train.md | 5 + packages/cosmos/package.json | 1 - packages/cosmos/src/utils.ts | 3 - yarn.lock | 168 +-------------------------------- 4 files changed, 6 insertions(+), 171 deletions(-) create mode 100644 .changeset/olive-apes-train.md diff --git a/.changeset/olive-apes-train.md b/.changeset/olive-apes-train.md new file mode 100644 index 00000000..d8dfe8b3 --- /dev/null +++ b/.changeset/olive-apes-train.md @@ -0,0 +1,5 @@ +--- +'@xdefi-tech/chains-cosmos': patch +--- + +Feat: temporary remove osmojs lib diff --git a/packages/cosmos/package.json b/packages/cosmos/package.json index e6918d70..efb94a96 100644 --- a/packages/cosmos/package.json +++ b/packages/cosmos/package.json @@ -43,7 +43,6 @@ "ethers": "5.6.4", "lodash": "4.17.21", "os-browserify": "0.3.0", - "osmojs": "16.5.1", "reflect-metadata": "0.1.13", "rimraf": "4.4.0", "rxjs": "7.8.0", diff --git a/packages/cosmos/src/utils.ts b/packages/cosmos/src/utils.ts index a3f1d9d7..3945e3be 100644 --- a/packages/cosmos/src/utils.ts +++ b/packages/cosmos/src/utils.ts @@ -7,7 +7,6 @@ import { AminoTypes } from '@cosmjs/stargate/build/aminotypes'; import { toUtf8 } from '@cosmjs/encoding'; import { MsgExecuteContract } from 'cosmjs-types/cosmwasm/wasm/v1/tx'; import { Registry } from '@cosmjs/proto-signing'; -import { osmosisProtoRegistry, osmosisAminoConverters } from 'osmojs'; /** * The Amino JSON representation of [MsgExecuteContract]. @@ -30,12 +29,10 @@ export interface AminoMsgExecuteContract { export const STARGATE_CLIENT_OPTIONS = { registry: new Registry([ ...defaultRegistryTypes, - ...osmosisProtoRegistry, ['/cosmwasm.wasm.v1.MsgExecuteContract', MsgExecuteContract], ]), aminoTypes: new AminoTypes({ ...createDefaultAminoConverters(), - ...osmosisAminoConverters, '/cosmwasm.wasm.v1.MsgExecuteContract': { aminoType: 'wasm/MsgExecuteContract', toAmino: ({ diff --git a/yarn.lock b/yarn.lock index 8630a794..f6f867ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1737,16 +1737,6 @@ "@cosmjs/math" "0.27.1" "@cosmjs/utils" "0.27.1" -"@cosmjs/amino@0.29.3": - version "0.29.3" - resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.29.3.tgz#5aa338a301ea970a93e15522706615efea507c10" - integrity sha512-BFz1++ERerIggiFc7iGHhGe1CeV3rCv8BvkoBQTBN/ZwzHOaKvqQj8smDlRGlQxX3HWlTwgiLN2A+OB5yX4ZRw== - dependencies: - "@cosmjs/crypto" "^0.29.3" - "@cosmjs/encoding" "^0.29.3" - "@cosmjs/math" "^0.29.3" - "@cosmjs/utils" "^0.29.3" - "@cosmjs/amino@0.30.1", "@cosmjs/amino@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.30.1.tgz#7c18c14627361ba6c88e3495700ceea1f76baace" @@ -1757,16 +1747,6 @@ "@cosmjs/math" "^0.30.1" "@cosmjs/utils" "^0.30.1" -"@cosmjs/amino@^0.29.3", "@cosmjs/amino@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.29.5.tgz#053b4739a90b15b9e2b781ccd484faf64bd49aec" - integrity sha512-Qo8jpC0BiziTSUqpkNatBcwtKNhCovUnFul9SlT/74JUCdLYaeG5hxr3q1cssQt++l4LvlcpF+OUXL48XjNjLw== - dependencies: - "@cosmjs/crypto" "^0.29.5" - "@cosmjs/encoding" "^0.29.5" - "@cosmjs/math" "^0.29.5" - "@cosmjs/utils" "^0.29.5" - "@cosmjs/amino@^0.32.2": version "0.32.2" resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.32.2.tgz#ba3cf255e4e6b1ba67461f1ef7b0b8ad3f895da7" @@ -1793,19 +1773,6 @@ ripemd160 "^2.0.2" sha.js "^2.4.11" -"@cosmjs/crypto@^0.29.3", "@cosmjs/crypto@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.29.5.tgz#ab99fc382b93d8a8db075780cf07487a0f9519fd" - integrity sha512-2bKkaLGictaNL0UipQCL6C1afaisv6k8Wr/GCLx9FqiyFkh9ZgRHDyetD64ZsjnWV/N/D44s/esI+k6oPREaiQ== - dependencies: - "@cosmjs/encoding" "^0.29.5" - "@cosmjs/math" "^0.29.5" - "@cosmjs/utils" "^0.29.5" - "@noble/hashes" "^1" - bn.js "^5.2.0" - elliptic "^6.5.4" - libsodium-wrappers "^0.7.6" - "@cosmjs/crypto@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.30.1.tgz#21e94d5ca8f8ded16eee1389d2639cb5c43c3eb5" @@ -1850,15 +1817,6 @@ bech32 "^1.1.4" readonly-date "^1.0.0" -"@cosmjs/encoding@^0.29.3", "@cosmjs/encoding@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.29.5.tgz#009a4b1c596cdfd326f30ccfa79f5e56daa264f2" - integrity sha512-G4rGl/Jg4dMCw5u6PEZHZcoHnUBlukZODHbm/wcL4Uu91fkn5jVo5cXXZcvs4VCkArVGrEj/52eUgTZCmOBGWQ== - dependencies: - base64-js "^1.3.0" - bech32 "^1.1.4" - readonly-date "^1.0.0" - "@cosmjs/encoding@^0.32.2": version "0.32.2" resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.32.2.tgz#8c5c64481a85cd570740c34dccce69d024a29805" @@ -1868,14 +1826,6 @@ bech32 "^1.1.4" readonly-date "^1.0.0" -"@cosmjs/json-rpc@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.29.5.tgz#5e483a9bd98a6270f935adf0dfd8a1e7eb777fe4" - integrity sha512-C78+X06l+r9xwdM1yFWIpGl03LhB9NdM1xvZpQHwgCOl0Ir/WV8pw48y3Ez2awAoUBRfTeejPe4KvrE6NoIi/w== - dependencies: - "@cosmjs/stream" "^0.29.5" - xstream "^11.14.0" - "@cosmjs/json-rpc@^0.32.2": version "0.32.2" resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.32.2.tgz#f87fab0d6975ed1d1c7daafcf6f1f81e5e296912" @@ -1917,13 +1867,6 @@ dependencies: bn.js "^5.2.0" -"@cosmjs/math@^0.29.3", "@cosmjs/math@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.29.5.tgz#722c96e080d6c2b62215ce9f4c70da7625b241b6" - integrity sha512-2GjKcv+A9f86MAWYLUkjhw1/WpRl2R1BTb3m9qPG7lzMA7ioYff9jY5SPCfafKdxM4TIQGxXQlYGewQL16O68Q== - dependencies: - bn.js "^5.2.0" - "@cosmjs/math@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.30.1.tgz#8b816ef4de5d3afa66cb9fdfb5df2357a7845b8a" @@ -1938,19 +1881,6 @@ dependencies: bn.js "^5.2.0" -"@cosmjs/proto-signing@0.29.3": - version "0.29.3" - resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.29.3.tgz#fa5ed609ed2a0007d8d5eacbeb1f5a89ba1b77ff" - integrity sha512-Ai3l9THjMOrLJ4Ebn1Dgptwg6W5ZIRJqtnJjijHhGwTVC1WT0WdYU3aMZ7+PwubcA/cA1rH4ZTK7jrfYbra63g== - dependencies: - "@cosmjs/amino" "^0.29.3" - "@cosmjs/crypto" "^0.29.3" - "@cosmjs/encoding" "^0.29.3" - "@cosmjs/math" "^0.29.3" - "@cosmjs/utils" "^0.29.3" - cosmjs-types "^0.5.2" - long "^4.0.0" - "@cosmjs/proto-signing@0.32.2", "@cosmjs/proto-signing@^0.32.2": version "0.32.2" resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.32.2.tgz#26ed2675978ce24078981f4c15a06c5d6b808f44" @@ -1963,29 +1893,6 @@ "@cosmjs/utils" "^0.32.2" cosmjs-types "^0.9.0" -"@cosmjs/proto-signing@^0.29.3": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.29.5.tgz#af3b62a46c2c2f1d2327d678b13b7262db1fe87c" - integrity sha512-QRrS7CiKaoETdgIqvi/7JC2qCwCR7lnWaUsTzh/XfRy3McLkEd+cXbKAW3cygykv7IN0VAEIhZd2lyIfT8KwNA== - dependencies: - "@cosmjs/amino" "^0.29.5" - "@cosmjs/crypto" "^0.29.5" - "@cosmjs/encoding" "^0.29.5" - "@cosmjs/math" "^0.29.5" - "@cosmjs/utils" "^0.29.5" - cosmjs-types "^0.5.2" - long "^4.0.0" - -"@cosmjs/socket@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.29.5.tgz#a48df6b4c45dc6a6ef8e47232725dd4aa556ac2d" - integrity sha512-5VYDupIWbIXq3ftPV1LkS5Ya/T7Ol/AzWVhNxZ79hPe/mBfv1bGau/LqIYOm2zxGlgm9hBHOTmWGqNYDwr9LNQ== - dependencies: - "@cosmjs/stream" "^0.29.5" - isomorphic-ws "^4.0.1" - ws "^7" - xstream "^11.14.0" - "@cosmjs/socket@^0.32.2": version "0.32.2" resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.32.2.tgz#a66be3863d03bf2d8df0433af476df010ff10e8c" @@ -1996,24 +1903,6 @@ ws "^7" xstream "^11.14.0" -"@cosmjs/stargate@0.29.3": - version "0.29.3" - resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.29.3.tgz#9bd303bfd32a7399a233e662864e7cc32e2607af" - integrity sha512-455TgXStCi6E8KDjnhDAM8wt6aLSjobH4Dixvd7Up1DfCH6UB9NkC/G0fMJANNcNXMaM4wSX14niTXwD1d31BA== - dependencies: - "@confio/ics23" "^0.6.8" - "@cosmjs/amino" "^0.29.3" - "@cosmjs/encoding" "^0.29.3" - "@cosmjs/math" "^0.29.3" - "@cosmjs/proto-signing" "^0.29.3" - "@cosmjs/stream" "^0.29.3" - "@cosmjs/tendermint-rpc" "^0.29.3" - "@cosmjs/utils" "^0.29.3" - cosmjs-types "^0.5.2" - long "^4.0.0" - protobufjs "~6.11.3" - xstream "^11.14.0" - "@cosmjs/stargate@0.32.2": version "0.32.2" resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.32.2.tgz#73718c5c6a3ae138682ee9987333d911eca22a13" @@ -2030,13 +1919,6 @@ cosmjs-types "^0.9.0" xstream "^11.14.0" -"@cosmjs/stream@^0.29.3", "@cosmjs/stream@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.29.5.tgz#350981cac496d04939b92ee793b9b19f44bc1d4e" - integrity sha512-TToTDWyH1p05GBtF0Y8jFw2C+4783ueDCmDyxOMM6EU82IqpmIbfwcdMOCAm0JhnyMh+ocdebbFvnX/sGKzRAA== - dependencies: - xstream "^11.14.0" - "@cosmjs/stream@^0.32.2": version "0.32.2" resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.32.2.tgz#b1e8f977d25313d659f1aa89ad21614b5391cd93" @@ -2060,32 +1942,11 @@ readonly-date "^1.0.0" xstream "^11.14.0" -"@cosmjs/tendermint-rpc@^0.29.3": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.29.5.tgz#f205c10464212bdf843f91bb2e4a093b618cb5c2" - integrity sha512-ar80twieuAxsy0x2za/aO3kBr2DFPAXDmk2ikDbmkda+qqfXgl35l9CVAAjKRqd9d+cRvbQyb5M4wy6XQpEV6w== - dependencies: - "@cosmjs/crypto" "^0.29.5" - "@cosmjs/encoding" "^0.29.5" - "@cosmjs/json-rpc" "^0.29.5" - "@cosmjs/math" "^0.29.5" - "@cosmjs/socket" "^0.29.5" - "@cosmjs/stream" "^0.29.5" - "@cosmjs/utils" "^0.29.5" - axios "^0.21.2" - readonly-date "^1.0.0" - xstream "^11.14.0" - "@cosmjs/utils@0.27.1": version "0.27.1" resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.27.1.tgz#1c8efde17256346ef142a3bd15158ee4055470e2" integrity sha512-VG7QPDiMUzVPxRdJahDV8PXxVdnuAHiIuG56hldV4yPnOz/si/DLNd7VAUUA5923b6jS1Hhev0Hr6AhEkcxBMg== -"@cosmjs/utils@^0.29.3", "@cosmjs/utils@^0.29.5": - version "0.29.5" - resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.29.5.tgz#3fed1b3528ae8c5f1eb5d29b68755bebfd3294ee" - integrity sha512-m7h+RXDUxOzEOGt4P+3OVPX7PuakZT3GBmaM/Y2u+abN3xZkziykD/NvedYFvvCCdQo714XcGl33bwifS9FZPQ== - "@cosmjs/utils@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.30.1.tgz#6d92582341be3c2ec8d82090253cfa4b7f959edb" @@ -2096,14 +1957,6 @@ resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.32.2.tgz#324304aa85bfa6f10561cc17781d824d02130897" integrity sha512-Gg5t+eR7vPJMAmhkFt6CZrzPd0EKpAslWwk5rFVYZpJsM8JG5KT9XQ99hgNM3Ov6ScNoIWbXkpX27F6A9cXR4Q== -"@cosmology/lcd@^0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@cosmology/lcd/-/lcd-0.12.0.tgz#a6594fc00a8c84c7341e90840627e62a7e63fd1b" - integrity sha512-f2mcySYO1xdislAhuWtNFmg4q/bzY3Aem2UkDzYzI0ZELVev5i2Pi0bQrYUNTeNg1isAo0Kyrdqj/4YPqEwjGA== - dependencies: - "@babel/runtime" "^7.21.0" - axios "0.27.2" - "@cosmos-client/core@0.47.1": version "0.47.1" resolved "https://registry.yarnpkg.com/@cosmos-client/core/-/core-0.47.1.tgz#f362ffbb26f98dc0f52aeaf5d5c1b9d342a9eafe" @@ -9146,14 +8999,6 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -cosmjs-types@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.5.2.tgz#2d42b354946f330dfb5c90a87fdc2a36f97b965d" - integrity sha512-zxCtIJj8v3Di7s39uN4LNcN3HIE1z0B9Z0SPE8ZNQR0oSzsuSe1ACgxoFkvhkS7WBasCAFcglS11G2hyfd5tPg== - dependencies: - long "^4.0.0" - protobufjs "~6.11.2" - cosmjs-types@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.9.0.tgz#c3bc482d28c7dfa25d1445093fdb2d9da1f6cfcc" @@ -15077,17 +14922,6 @@ osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -osmojs@16.5.1: - version "16.5.1" - resolved "https://registry.yarnpkg.com/osmojs/-/osmojs-16.5.1.tgz#38f2fe3cd65dbd4e4b415e9f22f387a24b634155" - integrity sha512-V2Q2yMt7Paax6i+S5Q1l29Km0As/waXKmSVRe8gtd9he42kcbkpwwk/QUCvgS98XsL7Qz+vas2Tca016uBQHTQ== - dependencies: - "@cosmjs/amino" "0.29.3" - "@cosmjs/proto-signing" "0.29.3" - "@cosmjs/stargate" "0.29.3" - "@cosmjs/tendermint-rpc" "^0.29.3" - "@cosmology/lcd" "^0.12.0" - outdent@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" @@ -15584,7 +15418,7 @@ protobufjs@7.2.4: "@types/node" ">=13.7.0" long "^5.0.0" -protobufjs@^6.11.3, protobufjs@^6.8.8, protobufjs@~6.11.2, protobufjs@~6.11.3: +protobufjs@^6.11.3, protobufjs@^6.8.8, protobufjs@~6.11.2: version "6.11.4" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== From 4ec3a48fad9ffb3fded0c6a4c207ae138a19c47b Mon Sep 17 00:00:00 2001 From: dp <25910069+davidp94@users.noreply.github.com> Date: Wed, 1 May 2024 11:12:33 +0300 Subject: [PATCH 090/132] Update packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../datasource/indexer/queries/getTransactionByHash.query.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts index e13e18e9..7aaacefc 100644 --- a/packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts +++ b/packages/bitcoincash/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -12,7 +12,7 @@ export const getTransactionByHash = async (txHash: string) => { return response.data.bitcoincash.getTransactionByHashV5 || null; } catch (error) { - console.error('Error fetching transaction by hash', error); + console.error(`Error fetching transaction by hash for ${txHash}:`, error); return null; } }; From 960ff5bd6218aa66e890920ad6848f80a192fc0c Mon Sep 17 00:00:00 2001 From: dp <25910069+davidp94@users.noreply.github.com> Date: Wed, 1 May 2024 11:12:41 +0300 Subject: [PATCH 091/132] Update packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../datasource/indexer/queries/getTransactionByHash.query.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts index 183753c8..eb9131ee 100644 --- a/packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts +++ b/packages/litecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -12,7 +12,7 @@ export const getTransactionByHash = async (txHash: string) => { return response.data.litecoin.getTransactionByHashV5 || null; } catch (error) { - console.error('Error fetching transaction by hash', error); + console.error(`Error fetching transaction by hash for ${txHash}:`, error); return null; } }; From 451536fedf2faf0c43054d525de2e3b5efdf8ea3 Mon Sep 17 00:00:00 2001 From: dp <25910069+davidp94@users.noreply.github.com> Date: Wed, 1 May 2024 11:13:01 +0300 Subject: [PATCH 092/132] Update packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../datasource/indexer/queries/getTransactionByHash.query.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts index ac360096..8a7a63fc 100644 --- a/packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts +++ b/packages/dogecoin/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -12,7 +12,7 @@ export const getTransactionByHash = async (txHash: string) => { return response.data.dogecoin.getTransactionByHashV5 || null; } catch (error) { - console.error('Error fetching transaction by hash', error); + console.error(`Error fetching transaction by hash for ${txHash}:`, error); return null; } }; From 695f3fb182354eabb079a190a388f68dfd0dce43 Mon Sep 17 00:00:00 2001 From: dp <25910069+davidp94@users.noreply.github.com> Date: Wed, 1 May 2024 11:22:25 +0300 Subject: [PATCH 093/132] Update packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../datasource/indexer/queries/getTransactionByHash.query.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts b/packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts index 41e6c30c..4d7a9c08 100644 --- a/packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts +++ b/packages/bitcoin/src/datasource/indexer/queries/getTransactionByHash.query.ts @@ -12,7 +12,7 @@ export const getTransactionByHash = async (txHash: string) => { return response.data.bitcoin.getTransactionByHashV5 || null; } catch (error) { - console.error('Error fetching transaction by hash', error); + console.error(`Error fetching transaction by hash for ${txHash}:`, error); return null; } }; From ab9ecd7f3660a96e62d9bffd9924ab8ceabd516c Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Wed, 1 May 2024 11:32:36 +0300 Subject: [PATCH 094/132] fix: update cosmjs deps --- packages/cosmos/package.json | 12 +- yarn.lock | 214 ++++++++++++++--------------------- 2 files changed, 91 insertions(+), 135 deletions(-) diff --git a/packages/cosmos/package.json b/packages/cosmos/package.json index efb94a96..52f55998 100644 --- a/packages/cosmos/package.json +++ b/packages/cosmos/package.json @@ -21,13 +21,13 @@ "typescript": "4.8.3" }, "dependencies": { - "@cosmjs/amino": "0.30.1", - "@cosmjs/encoding": "0.30.1", + "@cosmjs/amino": "0.32.3", + "@cosmjs/encoding": "0.32.3", "@cosmjs/launchpad": "0.27.1", - "@cosmjs/ledger-amino": "0.30.1", - "@cosmjs/proto-signing": "0.32.2", - "@cosmjs/stargate": "0.32.2", - "@cosmjs/tendermint-rpc": "0.32.2", + "@cosmjs/ledger-amino": "0.32.3", + "@cosmjs/proto-signing": "0.32.3", + "@cosmjs/stargate": "0.32.3", + "@cosmjs/tendermint-rpc": "0.32.3", "@cosmos-client/core": "0.47.1", "@ledgerhq/hw-transport": "6.30.3", "@ledgerhq/hw-transport-webhid": "6.28.3", diff --git a/yarn.lock b/yarn.lock index f6f867ec..ac6c6af3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1737,25 +1737,15 @@ "@cosmjs/math" "0.27.1" "@cosmjs/utils" "0.27.1" -"@cosmjs/amino@0.30.1", "@cosmjs/amino@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.30.1.tgz#7c18c14627361ba6c88e3495700ceea1f76baace" - integrity sha512-yNHnzmvAlkETDYIpeCTdVqgvrdt1qgkOXwuRVi8s27UKI5hfqyE9fJ/fuunXE6ZZPnKkjIecDznmuUOMrMvw4w== - dependencies: - "@cosmjs/crypto" "^0.30.1" - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/utils" "^0.30.1" - -"@cosmjs/amino@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.32.2.tgz#ba3cf255e4e6b1ba67461f1ef7b0b8ad3f895da7" - integrity sha512-lcK5RCVm4OfdAooxKcF2+NwaDVVpghOq6o/A40c2mHXDUzUoRZ33VAHjVJ9Me6vOFxshrw/XEFn1f4KObntjYA== - dependencies: - "@cosmjs/crypto" "^0.32.2" - "@cosmjs/encoding" "^0.32.2" - "@cosmjs/math" "^0.32.2" - "@cosmjs/utils" "^0.32.2" +"@cosmjs/amino@0.32.3", "@cosmjs/amino@^0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.32.3.tgz#b81d4a2b8d61568431a1afcd871e1344a19d97ff" + integrity sha512-G4zXl+dJbqrz1sSJ56H/25l5NJEk/pAPIr8piAHgbXYw88OdAOlpA26PQvk2IbSN/rRgVbvlLTNgX2tzz1dyUA== + dependencies: + "@cosmjs/crypto" "^0.32.3" + "@cosmjs/encoding" "^0.32.3" + "@cosmjs/math" "^0.32.3" + "@cosmjs/utils" "^0.32.3" "@cosmjs/crypto@0.27.1": version "0.27.1" @@ -1773,27 +1763,14 @@ ripemd160 "^2.0.2" sha.js "^2.4.11" -"@cosmjs/crypto@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.30.1.tgz#21e94d5ca8f8ded16eee1389d2639cb5c43c3eb5" - integrity sha512-rAljUlake3MSXs9xAm87mu34GfBLN0h/1uPPV6jEwClWjNkAMotzjC0ab9MARy5FFAvYHL3lWb57bhkbt2GtzQ== +"@cosmjs/crypto@^0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.32.3.tgz#787f8e659709678722068ee1ddf379f65051a25e" + integrity sha512-niQOWJHUtlJm2GG4F00yGT7sGPKxfUwz+2qQ30uO/E3p58gOusTcH2qjiJNVxb8vScYJhFYFqpm/OA/mVqoUGQ== dependencies: - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/utils" "^0.30.1" - "@noble/hashes" "^1" - bn.js "^5.2.0" - elliptic "^6.5.4" - libsodium-wrappers "^0.7.6" - -"@cosmjs/crypto@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.32.2.tgz#8ed255d3d1c1c4d916a1586f8cbc33eaab82f511" - integrity sha512-RuxrYKzhrPF9g6NmU7VEq++Hn1vZJjqqJpZ9Tmw9lOYOV8BUsv+j/0BE86kmWi7xVJ7EwxiuxYsKuM8IR18CIA== - dependencies: - "@cosmjs/encoding" "^0.32.2" - "@cosmjs/math" "^0.32.2" - "@cosmjs/utils" "^0.32.2" + "@cosmjs/encoding" "^0.32.3" + "@cosmjs/math" "^0.32.3" + "@cosmjs/utils" "^0.32.3" "@noble/hashes" "^1" bn.js "^5.2.0" elliptic "^6.5.4" @@ -1808,30 +1785,21 @@ bech32 "^1.1.4" readonly-date "^1.0.0" -"@cosmjs/encoding@0.30.1", "@cosmjs/encoding@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.30.1.tgz#b5c4e0ef7ceb1f2753688eb96400ed70f35c6058" - integrity sha512-rXmrTbgqwihORwJ3xYhIgQFfMSrwLu1s43RIK9I8EBudPx3KmnmyAKzMOVsRDo9edLFNuZ9GIvysUCwQfq3WlQ== +"@cosmjs/encoding@0.32.3", "@cosmjs/encoding@^0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.32.3.tgz#e245ff511fe4a0df7ba427b5187aab69e3468e5b" + integrity sha512-p4KF7hhv8jBQX3MkB3Defuhz/W0l3PwWVYU2vkVuBJ13bJcXyhU9nJjiMkaIv+XP+W2QgRceqNNgFUC5chNR7w== dependencies: base64-js "^1.3.0" bech32 "^1.1.4" readonly-date "^1.0.0" -"@cosmjs/encoding@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.32.2.tgz#8c5c64481a85cd570740c34dccce69d024a29805" - integrity sha512-WX7m1wLpA9V/zH0zRcz4EmgZdAv1F44g4dbXOgNj1eXZw1PIGR12p58OEkLN51Ha3S4DKRtCv5CkhK1KHEvQtg== +"@cosmjs/json-rpc@^0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.32.3.tgz#ccffdd7f722cecfab6daaa7463843b92f5d25355" + integrity sha512-JwFRWZa+Y95KrAG8CuEbPVOSnXO2uMSEBcaAB/FBU3Mo4jQnDoUjXvt3vwtFWxfAytrWCn1I4YDFaOAinnEG/Q== dependencies: - base64-js "^1.3.0" - bech32 "^1.1.4" - readonly-date "^1.0.0" - -"@cosmjs/json-rpc@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.32.2.tgz#f87fab0d6975ed1d1c7daafcf6f1f81e5e296912" - integrity sha512-lan2lOgmz4yVE/HR8eCOSiII/1OudIulk8836koyIDCsPEpt6eKBuctnAD168vABGArKccLAo7Mr2gy9nrKrOQ== - dependencies: - "@cosmjs/stream" "^0.32.2" + "@cosmjs/stream" "^0.32.3" xstream "^11.14.0" "@cosmjs/launchpad@0.27.1": @@ -1847,18 +1815,18 @@ axios "^0.21.2" fast-deep-equal "^3.1.3" -"@cosmjs/ledger-amino@0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/ledger-amino/-/ledger-amino-0.30.1.tgz#e9b785668ead0015ca9643ad2b55478d6b76b266" - integrity sha512-2btQa9JpAShzMZ5Qr7jWsHFeNRkI3/slT/F7XYUpIf/VUU/uVY7mbMEpkOpGxSals9X/+HiGS1FWVZUn3QDOHg== +"@cosmjs/ledger-amino@0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/ledger-amino/-/ledger-amino-0.32.3.tgz#92d1eba7f831c0ba1093d6c27445c243ac5742df" + integrity sha512-qmbfv+y1NmZYEgVO33vKNctgGUGUrB5toeUidsRaHKLu4jvBd2w9wRKw3W7hSmyIR+Oi5VMQBx1J/YCcqXHcaQ== dependencies: - "@cosmjs/amino" "^0.30.1" - "@cosmjs/crypto" "^0.30.1" - "@cosmjs/encoding" "^0.30.1" - "@cosmjs/math" "^0.30.1" - "@cosmjs/utils" "^0.30.1" + "@cosmjs/amino" "^0.32.3" + "@cosmjs/crypto" "^0.32.3" + "@cosmjs/encoding" "^0.32.3" + "@cosmjs/math" "^0.32.3" + "@cosmjs/utils" "^0.32.3" ledger-cosmos-js "^2.1.8" - semver "^7.3.2" + semver "^7.5.2" "@cosmjs/math@0.27.1": version "0.27.1" @@ -1867,77 +1835,70 @@ dependencies: bn.js "^5.2.0" -"@cosmjs/math@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.30.1.tgz#8b816ef4de5d3afa66cb9fdfb5df2357a7845b8a" - integrity sha512-yaoeI23pin9ZiPHIisa6qqLngfnBR/25tSaWpkTm8Cy10MX70UF5oN4+/t1heLaM6SSmRrhk3psRkV4+7mH51Q== +"@cosmjs/math@^0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.32.3.tgz#16e4256f4da507b9352327da12ae64056a2ba6c9" + integrity sha512-amumUtZs8hCCnV+lSBaJIiZkGabQm22QGg/IotYrhcmoOEOjt82n7hMNlNXRs7V6WLMidGrGYcswB5zcmp0Meg== dependencies: bn.js "^5.2.0" -"@cosmjs/math@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.32.2.tgz#4522312769197e132679e4960862bcec0eed4cb8" - integrity sha512-b8+ruAAY8aKtVKWSft2IvtCVCUH1LigIlf9ALIiY8n9jtM4kMASiaRbQ/27etnSAInV88IaezKK9rQZrtxTjcw== +"@cosmjs/proto-signing@0.32.3", "@cosmjs/proto-signing@^0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.32.3.tgz#91ae149b747d18666a6ccc924165b306431f7c0d" + integrity sha512-kSZ0ZUY0DwcRT0NcIn2HkadH4NKlwjfZgbLj1ABwh/4l0RgeT84QCscZCu63tJYq3K6auwqTiZSZERwlO4/nbg== dependencies: - bn.js "^5.2.0" - -"@cosmjs/proto-signing@0.32.2", "@cosmjs/proto-signing@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.32.2.tgz#26ed2675978ce24078981f4c15a06c5d6b808f44" - integrity sha512-UV4WwkE3W3G3s7wwU9rizNcUEz2g0W8jQZS5J6/3fiN0mRPwtPKQ6EinPN9ASqcAJ7/VQH4/9EPOw7d6XQGnqw== - dependencies: - "@cosmjs/amino" "^0.32.2" - "@cosmjs/crypto" "^0.32.2" - "@cosmjs/encoding" "^0.32.2" - "@cosmjs/math" "^0.32.2" - "@cosmjs/utils" "^0.32.2" + "@cosmjs/amino" "^0.32.3" + "@cosmjs/crypto" "^0.32.3" + "@cosmjs/encoding" "^0.32.3" + "@cosmjs/math" "^0.32.3" + "@cosmjs/utils" "^0.32.3" cosmjs-types "^0.9.0" -"@cosmjs/socket@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.32.2.tgz#a66be3863d03bf2d8df0433af476df010ff10e8c" - integrity sha512-Qc8jaw4uSBJm09UwPgkqe3g9TBFx4ZR9HkXpwT6Z9I+6kbLerXPR0Gy3NSJFSUgxIfTpO8O1yqoWAyf0Ay17Mw== +"@cosmjs/socket@^0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.32.3.tgz#fa5c36bf58e87c0ad865d6318ecb0f8d9c89a28a" + integrity sha512-F2WwNmaUPdZ4SsH6Uyreq3wQk7jpaEkb3wfOP951f5Jt6HCW/PxbxhKzHkAAf6+Sqks6SPhkbWoE8XaZpjL2KA== dependencies: - "@cosmjs/stream" "^0.32.2" + "@cosmjs/stream" "^0.32.3" isomorphic-ws "^4.0.1" ws "^7" xstream "^11.14.0" -"@cosmjs/stargate@0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.32.2.tgz#73718c5c6a3ae138682ee9987333d911eca22a13" - integrity sha512-AsJa29fT7Jd4xt9Ai+HMqhyj7UQu7fyYKdXj/8+/9PD74xe6lZSYhQPcitUmMLJ1ckKPgXSk5Dd2LbsQT0IhZg== +"@cosmjs/stargate@0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.32.3.tgz#5a92b222ada960ebecea72cc9f366370763f4b66" + integrity sha512-OQWzO9YWKerUinPIxrO1MARbe84XkeXJAW0lyMIjXIEikajuXZ+PwftiKA5yA+8OyditVmHVLtPud6Pjna2s5w== dependencies: "@confio/ics23" "^0.6.8" - "@cosmjs/amino" "^0.32.2" - "@cosmjs/encoding" "^0.32.2" - "@cosmjs/math" "^0.32.2" - "@cosmjs/proto-signing" "^0.32.2" - "@cosmjs/stream" "^0.32.2" - "@cosmjs/tendermint-rpc" "^0.32.2" - "@cosmjs/utils" "^0.32.2" + "@cosmjs/amino" "^0.32.3" + "@cosmjs/encoding" "^0.32.3" + "@cosmjs/math" "^0.32.3" + "@cosmjs/proto-signing" "^0.32.3" + "@cosmjs/stream" "^0.32.3" + "@cosmjs/tendermint-rpc" "^0.32.3" + "@cosmjs/utils" "^0.32.3" cosmjs-types "^0.9.0" xstream "^11.14.0" -"@cosmjs/stream@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.32.2.tgz#b1e8f977d25313d659f1aa89ad21614b5391cd93" - integrity sha512-gpCufLfHAD8Zp1ZKge7AHbDf4RA0TZp66wZY6JaQR5bSiEF2Drjtp4mwXZPGejtaUMnaAgff3LrUzPJfKYdQwg== +"@cosmjs/stream@^0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.32.3.tgz#7522579aaf18025d322c2f33d6fb7573220395d6" + integrity sha512-J2zVWDojkynYifAUcRmVczzmp6STEpyiAARq0rSsviqjreGIfspfuws/8rmkPa6qQBZvpQOBQCm2HyZZwYplIw== dependencies: xstream "^11.14.0" -"@cosmjs/tendermint-rpc@0.32.2", "@cosmjs/tendermint-rpc@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.2.tgz#c5607b8d472e5bf9fd58d5453db7194f500ccc62" - integrity sha512-DXyJHDmcAfCix4H/7/dKR0UMdshP01KxJOXHdHxBCbLIpck94BsWD3B2ZTXwfA6sv98so9wOzhp7qGQa5malxg== - dependencies: - "@cosmjs/crypto" "^0.32.2" - "@cosmjs/encoding" "^0.32.2" - "@cosmjs/json-rpc" "^0.32.2" - "@cosmjs/math" "^0.32.2" - "@cosmjs/socket" "^0.32.2" - "@cosmjs/stream" "^0.32.2" - "@cosmjs/utils" "^0.32.2" +"@cosmjs/tendermint-rpc@0.32.3", "@cosmjs/tendermint-rpc@^0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.3.tgz#f0406b9f0233e588fb924dca8c614972f9038aff" + integrity sha512-xeprW+VR9xKGstqZg0H/KBZoUp8/FfFyS9ljIUTLM/UINjP2MhiwncANPS2KScfJVepGufUKk0/phHUeIBSEkw== + dependencies: + "@cosmjs/crypto" "^0.32.3" + "@cosmjs/encoding" "^0.32.3" + "@cosmjs/json-rpc" "^0.32.3" + "@cosmjs/math" "^0.32.3" + "@cosmjs/socket" "^0.32.3" + "@cosmjs/stream" "^0.32.3" + "@cosmjs/utils" "^0.32.3" axios "^1.6.0" readonly-date "^1.0.0" xstream "^11.14.0" @@ -1947,15 +1908,10 @@ resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.27.1.tgz#1c8efde17256346ef142a3bd15158ee4055470e2" integrity sha512-VG7QPDiMUzVPxRdJahDV8PXxVdnuAHiIuG56hldV4yPnOz/si/DLNd7VAUUA5923b6jS1Hhev0Hr6AhEkcxBMg== -"@cosmjs/utils@^0.30.1": - version "0.30.1" - resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.30.1.tgz#6d92582341be3c2ec8d82090253cfa4b7f959edb" - integrity sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g== - -"@cosmjs/utils@^0.32.2": - version "0.32.2" - resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.32.2.tgz#324304aa85bfa6f10561cc17781d824d02130897" - integrity sha512-Gg5t+eR7vPJMAmhkFt6CZrzPd0EKpAslWwk5rFVYZpJsM8JG5KT9XQ99hgNM3Ov6ScNoIWbXkpX27F6A9cXR4Q== +"@cosmjs/utils@^0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.32.3.tgz#5dcaee6dd7cc846cdc073e9a7a7f63242f5f7e31" + integrity sha512-WCZK4yksj2hBDz4w7xFZQTRZQ/RJhBX26uFHmmQFIcNUUVAihrLO+RerqJgk0dZqC42wstM9pEUQGtPmLcIYvg== "@cosmos-client/core@0.47.1": version "0.47.1" @@ -16417,7 +16373,7 @@ semver@7.3.2: resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3: +semver@7.x, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3: version "7.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== From c55e75799fdc22eec060c227c49f33a93403823c Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Wed, 1 May 2024 11:45:34 +0300 Subject: [PATCH 095/132] fix: sequence type for amino tx --- packages/cosmos/src/datasource/chain/chain.data-source.ts | 2 +- packages/cosmos/src/datasource/indexer/indexer.data-source.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/cosmos/src/datasource/chain/chain.data-source.ts b/packages/cosmos/src/datasource/chain/chain.data-source.ts index 196d7a76..92852d9c 100644 --- a/packages/cosmos/src/datasource/chain/chain.data-source.ts +++ b/packages/cosmos/src/datasource/chain/chain.data-source.ts @@ -220,7 +220,7 @@ export class ChainDataSource extends DataSource { }, multi: void 0, }, - sequence: account.sequence.toString(), + sequence: BigInt(account.sequence), }), ], fee: Fee.fromPartial({ diff --git a/packages/cosmos/src/datasource/indexer/indexer.data-source.ts b/packages/cosmos/src/datasource/indexer/indexer.data-source.ts index 24b41494..29717684 100644 --- a/packages/cosmos/src/datasource/indexer/indexer.data-source.ts +++ b/packages/cosmos/src/datasource/indexer/indexer.data-source.ts @@ -173,7 +173,7 @@ export class IndexerDataSource extends DataSource { }, multi: void 0, }, - sequence: account.sequence.toString(), + sequence: BigInt(account.sequence), }), ], fee: Fee.fromPartial({ From f5e5fd25e301b724fe02bac6c8dd5970b61bb3f2 Mon Sep 17 00:00:00 2001 From: cicd Date: Wed, 1 May 2024 09:09:03 +0000 Subject: [PATCH 096/132] Version packages --- .changeset/olive-apes-train.md | 5 ----- packages/cosmos/CHANGELOG.md | 6 ++++++ packages/cosmos/package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/olive-apes-train.md diff --git a/.changeset/olive-apes-train.md b/.changeset/olive-apes-train.md deleted file mode 100644 index d8dfe8b3..00000000 --- a/.changeset/olive-apes-train.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-cosmos': patch ---- - -Feat: temporary remove osmojs lib diff --git a/packages/cosmos/CHANGELOG.md b/packages/cosmos/CHANGELOG.md index 649095a8..4687793d 100644 --- a/packages/cosmos/CHANGELOG.md +++ b/packages/cosmos/CHANGELOG.md @@ -1,5 +1,11 @@ # @xdefi-tech/chains-cosmos +## 2.0.10 + +### Patch Changes + +- 3b42f94: Feat: temporary remove osmojs lib + ## 2.0.9 ### Patch Changes diff --git a/packages/cosmos/package.json b/packages/cosmos/package.json index 52f55998..ec500ed3 100644 --- a/packages/cosmos/package.json +++ b/packages/cosmos/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-cosmos", - "version": "2.0.9", + "version": "2.0.10", "main": "./dist/index.js", "types": "./dist/index.d.ts", "license": "MIT", From 19d62d1b781c620cf4173fe458a82e994672b01c Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Wed, 1 May 2024 14:14:55 +0300 Subject: [PATCH 097/132] feat: remove scanUTXOs method from core, make it only for UTXO provider --- packages/bitcoin/src/chain.provider.ts | 6 +++++ .../indexer/queries/broadcast.query.ts | 6 ++--- packages/bitcoin/src/msg.ts | 4 +-- packages/bitcoincash/src/chain.provider.ts | 6 +++++ packages/bitcoincash/src/msg.ts | 2 +- .../src/core/datasource/base.data-source.ts | 21 +++++++++++---- packages/dogecoin/src/chain.provider.ts | 6 +++++ .../indexer/queries/broadcast.query.ts | 6 ++--- packages/dogecoin/src/msg.ts | 2 +- packages/litecoin/src/chain.provider.ts | 6 +++++ packages/litecoin/src/msg.ts | 2 +- packages/utxo/src/chain.provider.ts | 26 ++++++++++--------- packages/utxo/src/msg.ts | 2 +- 13 files changed, 65 insertions(+), 30 deletions(-) diff --git a/packages/bitcoin/src/chain.provider.ts b/packages/bitcoin/src/chain.provider.ts index 01121b94..562486d2 100644 --- a/packages/bitcoin/src/chain.provider.ts +++ b/packages/bitcoin/src/chain.provider.ts @@ -16,6 +16,8 @@ import { ChainMsg, MsgBody } from './msg'; features: [Chain.ChainFeatures.TOKENS], }) export class BitcoinProvider extends UtxoProvider { + declare dataSource: IndexerDataSource; + static get dataSourceList() { return { IndexerDataSource: IndexerDataSource, @@ -36,4 +38,8 @@ export class BitcoinProvider extends UtxoProvider { async getTransaction(txHash: string): Promise { return this.dataSource.getTransaction(txHash); } + + public async scanUTXOs(address: string) { + return this.dataSource.scanUTXOs(address); + } } diff --git a/packages/bitcoin/src/datasource/indexer/queries/broadcast.query.ts b/packages/bitcoin/src/datasource/indexer/queries/broadcast.query.ts index 2049fe7b..a0ac6724 100644 --- a/packages/bitcoin/src/datasource/indexer/queries/broadcast.query.ts +++ b/packages/bitcoin/src/datasource/indexer/queries/broadcast.query.ts @@ -1,13 +1,13 @@ import { gqlClient } from '@xdefi-tech/chains-core'; -import { DogecoinBroadcastTransactionDocument } from '@xdefi-tech/chains-graphql'; +import { BitcoinBroadcastTransactionDocument } from '@xdefi-tech/chains-graphql'; export const broadcast = async (rawHex: string): Promise => { const response = await gqlClient.query({ - query: DogecoinBroadcastTransactionDocument, + query: BitcoinBroadcastTransactionDocument, variables: { rawHex, }, }); - return response.data.dogecoin.broadcastTransaction; + return response.data.bitcoin.broadcastTransaction; }; diff --git a/packages/bitcoin/src/msg.ts b/packages/bitcoin/src/msg.ts index 94bb9772..c2a58dd5 100644 --- a/packages/bitcoin/src/msg.ts +++ b/packages/bitcoin/src/msg.ts @@ -40,9 +40,7 @@ export class ChainMsg extends BaseMsg { async buildTx() { const msgData = this.toData(); - let utxos: UTXO[] = await this.provider.dataSource.scanUTXOs( - this.data.from - ); + let utxos: UTXO[] = await this.provider.scanUTXOs(this.data.from); // check is the user has ordinals to erase them from utxos let ordinals: any[] = []; try { diff --git a/packages/bitcoincash/src/chain.provider.ts b/packages/bitcoincash/src/chain.provider.ts index 08ca2e63..6cb26dc2 100644 --- a/packages/bitcoincash/src/chain.provider.ts +++ b/packages/bitcoincash/src/chain.provider.ts @@ -16,6 +16,8 @@ import { ChainMsg } from './msg'; features: [Chain.ChainFeatures.TOKENS], }) export class BitcoinCashProvider extends UtxoProvider { + declare dataSource: IndexerDataSource; + createMsg( data: MsgBody, encoding: MsgEncoding = MsgEncoding.object @@ -36,4 +38,8 @@ export class BitcoinCashProvider extends UtxoProvider { async getTransaction(txHash: string): Promise { return this.dataSource.getTransaction(txHash); } + + public async scanUTXOs(address: string) { + return this.dataSource.scanUTXOs(address); + } } diff --git a/packages/bitcoincash/src/msg.ts b/packages/bitcoincash/src/msg.ts index e3c8af03..1f593b31 100644 --- a/packages/bitcoincash/src/msg.ts +++ b/packages/bitcoincash/src/msg.ts @@ -37,7 +37,7 @@ export class ChainMsg extends BaseMsg { async buildTx() { const msgData = this.toData(); - const utxos = await this.provider.dataSource.scanUTXOs(this.data.from); + const utxos = await this.provider.scanUTXOs(this.data.from); const { fee } = await this.getFee(); if (!fee) throw new Error('Fee estimation is required for building transaction'); diff --git a/packages/core/src/core/datasource/base.data-source.ts b/packages/core/src/core/datasource/base.data-source.ts index fbf5e79f..bb58a2d4 100644 --- a/packages/core/src/core/datasource/base.data-source.ts +++ b/packages/core/src/core/datasource/base.data-source.ts @@ -68,15 +68,26 @@ export abstract class DataSource { return; } + /** + * Broadcasts a list of messages. Subclasses should override this method to implement + * specific logic for broadcasting messages based on the underlying blockchain technology. + * + * @param {Msg[]} _msgs Array of messages to be broadcasted. + * @returns {Promise} A promise that resolves to an array of transactions. + * @throws {Error} Will throw an error if the method is not implemented. + */ public async broadcast(_msgs: Msg[]): Promise { throw new Error('Method not implemented.'); } - // Only for UTXO chains - public async scanUTXOs(_address: string): Promise { - throw new Error('Method not implemented.'); - } - + /** + * Retrieves transaction data based on the transaction hash. + * This method should be overridden in subclasses to provide specific implementation details. + * + * @param {string} _txHash - The hash of the transaction to retrieve. + * @returns {Promise} The transaction data or null if not found. + * @throws {Error} Throws an error if the method is not implemented. + */ public async getTransaction(_txHash: string): Promise { throw new Error('Method not implemented.'); } diff --git a/packages/dogecoin/src/chain.provider.ts b/packages/dogecoin/src/chain.provider.ts index 6c318336..0f43667f 100644 --- a/packages/dogecoin/src/chain.provider.ts +++ b/packages/dogecoin/src/chain.provider.ts @@ -16,6 +16,8 @@ import { ChainMsg } from './msg'; features: [Chain.ChainFeatures.TOKENS], }) export class DogecoinProvider extends UtxoProvider { + declare dataSource: IndexerDataSource; + createMsg( data: MsgBody, encoding: MsgEncoding = MsgEncoding.object @@ -36,4 +38,8 @@ export class DogecoinProvider extends UtxoProvider { async getTransaction(txHash: string): Promise { return this.dataSource.getTransaction(txHash); } + + public async scanUTXOs(address: string) { + return this.dataSource.scanUTXOs(address); + } } diff --git a/packages/dogecoin/src/datasource/indexer/queries/broadcast.query.ts b/packages/dogecoin/src/datasource/indexer/queries/broadcast.query.ts index a0ac6724..2049fe7b 100644 --- a/packages/dogecoin/src/datasource/indexer/queries/broadcast.query.ts +++ b/packages/dogecoin/src/datasource/indexer/queries/broadcast.query.ts @@ -1,13 +1,13 @@ import { gqlClient } from '@xdefi-tech/chains-core'; -import { BitcoinBroadcastTransactionDocument } from '@xdefi-tech/chains-graphql'; +import { DogecoinBroadcastTransactionDocument } from '@xdefi-tech/chains-graphql'; export const broadcast = async (rawHex: string): Promise => { const response = await gqlClient.query({ - query: BitcoinBroadcastTransactionDocument, + query: DogecoinBroadcastTransactionDocument, variables: { rawHex, }, }); - return response.data.bitcoin.broadcastTransaction; + return response.data.dogecoin.broadcastTransaction; }; diff --git a/packages/dogecoin/src/msg.ts b/packages/dogecoin/src/msg.ts index 97f8045f..e4bfa368 100644 --- a/packages/dogecoin/src/msg.ts +++ b/packages/dogecoin/src/msg.ts @@ -39,7 +39,7 @@ export class ChainMsg extends BaseMsg { async buildTx() { const msgData = this.toData(); - const utxos = await this.provider.dataSource.scanUTXOs(this.data.from); + const utxos = await this.provider.scanUTXOs(this.data.from); const { fee } = await this.getFee(); if (!fee) throw new Error('Fee estimation is required for building transaction'); diff --git a/packages/litecoin/src/chain.provider.ts b/packages/litecoin/src/chain.provider.ts index 4c6ea497..97265129 100644 --- a/packages/litecoin/src/chain.provider.ts +++ b/packages/litecoin/src/chain.provider.ts @@ -16,6 +16,8 @@ import { ChainMsg } from './msg'; features: [Chain.ChainFeatures.TOKENS], }) export class LitecoinProvider extends UtxoProvider { + declare dataSource: IndexerDataSource; + createMsg( data: MsgBody, encoding: MsgEncoding = MsgEncoding.object @@ -36,4 +38,8 @@ export class LitecoinProvider extends UtxoProvider { async getTransaction(txHash: string): Promise { return this.dataSource.getTransaction(txHash); } + + public async scanUTXOs(address: string) { + return this.dataSource.scanUTXOs(address); + } } diff --git a/packages/litecoin/src/msg.ts b/packages/litecoin/src/msg.ts index a4a16716..9703050f 100644 --- a/packages/litecoin/src/msg.ts +++ b/packages/litecoin/src/msg.ts @@ -37,7 +37,7 @@ export class ChainMsg extends BaseMsg { async buildTx() { const msgData = this.toData(); - const utxos = await this.provider.dataSource.scanUTXOs(this.data.from); + const utxos = await this.provider.scanUTXOs(this.data.from); const { fee } = await this.getFee(); if (!fee) throw new Error('Fee estimation is required for building transaction'); diff --git a/packages/utxo/src/chain.provider.ts b/packages/utxo/src/chain.provider.ts index afe33357..4c0e2c2a 100644 --- a/packages/utxo/src/chain.provider.ts +++ b/packages/utxo/src/chain.provider.ts @@ -10,12 +10,12 @@ import { Response, Transaction, TransactionData, - TransactionStatus, } from '@xdefi-tech/chains-core'; import axios, { Axios } from 'axios'; import { ChainMsg, MsgBody } from './msg'; import { UTXOManifest } from './manifests'; +import { UTXO } from './data-provider'; export interface UtxoProviderOptions extends Chain.IOptions { apiKey?: string; @@ -81,20 +81,22 @@ export class UtxoProvider extends Chain.Provider { } async getTransaction(txHash: string): Promise { - const tx = await this.dataSource.getTransaction(txHash); - if (!tx) { - return null; - } - - return { - hash: tx.hash, - status: TransactionStatus.success, - from: '', - to: tx.outputs[0].address, - }; + return this.dataSource.getTransaction(txHash); } public get manifest(): UTXOManifest { return this.dataSource.manifest as UTXOManifest; } + + /** + * Scans for UTXOs associated with a given address. This method should be overridden in subclasses + * that handle UTXO-based chains, providing a specific implementation for scanning UTXOs. + * + * @param {string} _address The address for which to scan UTXOs. + * @returns A promise that resolves to the scanned UTXOs. + * @throws {Error} Throws an error if the method is not implemented. + */ + public async scanUTXOs(_address: string): Promise { + throw new Error('Method not implemented.'); + } } diff --git a/packages/utxo/src/msg.ts b/packages/utxo/src/msg.ts index 6eabd5cd..3d3d6e1b 100644 --- a/packages/utxo/src/msg.ts +++ b/packages/utxo/src/msg.ts @@ -38,7 +38,7 @@ export class ChainMsg extends BaseMsg { async buildTx() { const msgData = this.toData(); - const utxos = await this.provider.dataSource.scanUTXOs(this.data.from); + const utxos = await this.provider.scanUTXOs(this.data.from); const { fee } = await this.getFee(); if (!fee) throw new Error('Fee estimation is required for building transaction'); From edfbc263e401cef8a395584fe53a5abaa31eb4c9 Mon Sep 17 00:00:00 2001 From: cicd Date: Wed, 1 May 2024 12:22:08 +0000 Subject: [PATCH 098/132] Version packages --- .changeset/calm-impalas-cross.md | 5 ----- .changeset/spicy-carrots-give.md | 11 ----------- packages/bitcoin/CHANGELOG.md | 10 ++++++++++ packages/bitcoin/package.json | 2 +- packages/bitcoincash/CHANGELOG.md | 10 ++++++++++ packages/bitcoincash/package.json | 2 +- packages/core/CHANGELOG.md | 6 ++++++ packages/core/package.json | 2 +- packages/dogecoin/CHANGELOG.md | 10 ++++++++++ packages/dogecoin/package.json | 2 +- packages/evm/CHANGELOG.md | 9 +++++++++ packages/evm/package.json | 2 +- packages/litecoin/CHANGELOG.md | 10 ++++++++++ packages/litecoin/package.json | 2 +- packages/utxo/CHANGELOG.md | 8 ++++++++ packages/utxo/package.json | 2 +- utility-packages/graphql/CHANGELOG.md | 8 ++++++++ utility-packages/graphql/package.json | 2 +- 18 files changed, 79 insertions(+), 24 deletions(-) delete mode 100644 .changeset/calm-impalas-cross.md delete mode 100644 .changeset/spicy-carrots-give.md diff --git a/.changeset/calm-impalas-cross.md b/.changeset/calm-impalas-cross.md deleted file mode 100644 index 131a3255..00000000 --- a/.changeset/calm-impalas-cross.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@xdefi-tech/chains-evm': patch ---- - -Feat: make signatureType optional field diff --git a/.changeset/spicy-carrots-give.md b/.changeset/spicy-carrots-give.md deleted file mode 100644 index 35b1318f..00000000 --- a/.changeset/spicy-carrots-give.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@xdefi-tech/chains-graphql': patch -'@xdefi-tech/chains-bitcoincash': patch -'@xdefi-tech/chains-dogecoin': patch -'@xdefi-tech/chains-litecoin': patch -'@xdefi-tech/chains-bitcoin': patch -'@xdefi-tech/chains-core': patch -'@xdefi-tech/chains-utxo': patch ---- - -Feat: move dataprovider from haskoin & blockchair to indexer for all UTXO chains diff --git a/packages/bitcoin/CHANGELOG.md b/packages/bitcoin/CHANGELOG.md index 6b476eb6..1a650c46 100644 --- a/packages/bitcoin/CHANGELOG.md +++ b/packages/bitcoin/CHANGELOG.md @@ -1,5 +1,15 @@ # @xdefi-tech/chains-bitcoin +## 2.0.11 + +### Patch Changes + +- 7de45e1: Feat: move dataprovider from haskoin & blockchair to indexer for all UTXO chains +- Updated dependencies [7de45e1] + - @xdefi-tech/chains-graphql@1.2.11 + - @xdefi-tech/chains-core@2.0.9 + - @xdefi-tech/chains-utxo@2.0.7 + ## 2.0.10 ### Patch Changes diff --git a/packages/bitcoin/package.json b/packages/bitcoin/package.json index e485ea90..c75693cb 100644 --- a/packages/bitcoin/package.json +++ b/packages/bitcoin/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-bitcoin", - "version": "2.0.10", + "version": "2.0.11", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/bitcoincash/CHANGELOG.md b/packages/bitcoincash/CHANGELOG.md index 590f7313..7ba91def 100644 --- a/packages/bitcoincash/CHANGELOG.md +++ b/packages/bitcoincash/CHANGELOG.md @@ -1,5 +1,15 @@ # @xdefi-tech/chains-bitcoincash +## 2.0.13 + +### Patch Changes + +- 7de45e1: Feat: move dataprovider from haskoin & blockchair to indexer for all UTXO chains +- Updated dependencies [7de45e1] + - @xdefi-tech/chains-graphql@1.2.11 + - @xdefi-tech/chains-core@2.0.9 + - @xdefi-tech/chains-utxo@2.0.7 + ## 2.0.12 ### Patch Changes diff --git a/packages/bitcoincash/package.json b/packages/bitcoincash/package.json index 1f3edb8e..b02ba12a 100644 --- a/packages/bitcoincash/package.json +++ b/packages/bitcoincash/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-bitcoincash", - "version": "2.0.12", + "version": "2.0.13", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index a8ed890f..2223a5a9 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,11 @@ # @xdefi-tech/chains-core +## 2.0.9 + +### Patch Changes + +- 7de45e1: Feat: move dataprovider from haskoin & blockchair to indexer for all UTXO chains + ## 2.0.8 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index 00cf08f7..c305fe98 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-core", - "version": "2.0.8", + "version": "2.0.9", "main": "./dist/index.js", "types": "./dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/dogecoin/CHANGELOG.md b/packages/dogecoin/CHANGELOG.md index 19aa7161..a96eb613 100644 --- a/packages/dogecoin/CHANGELOG.md +++ b/packages/dogecoin/CHANGELOG.md @@ -1,5 +1,15 @@ # @xdefi-tech/chains-dogecoin +## 2.0.12 + +### Patch Changes + +- 7de45e1: Feat: move dataprovider from haskoin & blockchair to indexer for all UTXO chains +- Updated dependencies [7de45e1] + - @xdefi-tech/chains-graphql@1.2.11 + - @xdefi-tech/chains-core@2.0.9 + - @xdefi-tech/chains-utxo@2.0.7 + ## 2.0.11 ### Patch Changes diff --git a/packages/dogecoin/package.json b/packages/dogecoin/package.json index 17485290..700b52b4 100644 --- a/packages/dogecoin/package.json +++ b/packages/dogecoin/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-dogecoin", - "version": "2.0.11", + "version": "2.0.12", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/evm/CHANGELOG.md b/packages/evm/CHANGELOG.md index 617e36d0..bbd2c117 100644 --- a/packages/evm/CHANGELOG.md +++ b/packages/evm/CHANGELOG.md @@ -1,5 +1,14 @@ # @xdefi-tech/chains-evm +## 2.0.15 + +### Patch Changes + +- 7de45e1: Feat: make signatureType optional field +- Updated dependencies [7de45e1] + - @xdefi-tech/chains-graphql@1.2.11 + - @xdefi-tech/chains-core@2.0.9 + ## 2.0.14 ### Patch Changes diff --git a/packages/evm/package.json b/packages/evm/package.json index ba51202b..f8ef71ea 100644 --- a/packages/evm/package.json +++ b/packages/evm/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-evm", - "version": "2.0.14", + "version": "2.0.15", "main": "./dist/index.js", "types": "./dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/litecoin/CHANGELOG.md b/packages/litecoin/CHANGELOG.md index 71c13704..3f88e18a 100644 --- a/packages/litecoin/CHANGELOG.md +++ b/packages/litecoin/CHANGELOG.md @@ -1,5 +1,15 @@ # @xdefi-tech/chains-litecoin +## 2.0.11 + +### Patch Changes + +- 7de45e1: Feat: move dataprovider from haskoin & blockchair to indexer for all UTXO chains +- Updated dependencies [7de45e1] + - @xdefi-tech/chains-graphql@1.2.11 + - @xdefi-tech/chains-core@2.0.9 + - @xdefi-tech/chains-utxo@2.0.7 + ## 2.0.10 ### Patch Changes diff --git a/packages/litecoin/package.json b/packages/litecoin/package.json index 062e8f85..9f6b8153 100644 --- a/packages/litecoin/package.json +++ b/packages/litecoin/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-litecoin", - "version": "2.0.10", + "version": "2.0.11", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/packages/utxo/CHANGELOG.md b/packages/utxo/CHANGELOG.md index 89a33a1e..feda645f 100644 --- a/packages/utxo/CHANGELOG.md +++ b/packages/utxo/CHANGELOG.md @@ -1,5 +1,13 @@ # @xdefi-tech/chains-utxo +## 2.0.7 + +### Patch Changes + +- 7de45e1: Feat: move dataprovider from haskoin & blockchair to indexer for all UTXO chains +- Updated dependencies [7de45e1] + - @xdefi-tech/chains-core@2.0.9 + ## 2.0.6 ### Patch Changes diff --git a/packages/utxo/package.json b/packages/utxo/package.json index 680c9a3c..0b8af116 100644 --- a/packages/utxo/package.json +++ b/packages/utxo/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-utxo", - "version": "2.0.6", + "version": "2.0.7", "main": "dist/index.js", "types": "dist/index.d.ts", "repository": "https://github.com/XDeFi-tech/chains/", diff --git a/utility-packages/graphql/CHANGELOG.md b/utility-packages/graphql/CHANGELOG.md index b0b3498f..f50f19af 100644 --- a/utility-packages/graphql/CHANGELOG.md +++ b/utility-packages/graphql/CHANGELOG.md @@ -1,5 +1,13 @@ # @xdefi-tech/chains-graphql +## 1.2.11 + +### Patch Changes + +- 7de45e1: Feat: move dataprovider from haskoin & blockchair to indexer for all UTXO chains +- Updated dependencies [7de45e1] + - @xdefi-tech/chains-core@2.0.9 + ## 1.2.10 ### Patch Changes diff --git a/utility-packages/graphql/package.json b/utility-packages/graphql/package.json index cfd37780..87bb5a7c 100644 --- a/utility-packages/graphql/package.json +++ b/utility-packages/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@xdefi-tech/chains-graphql", - "version": "1.2.10", + "version": "1.2.11", "license": "MIT", "repository": "https://github.com/XDeFi-tech/chains/", "main": "dist/index.js", From 841acec26a60a25bf810cb220327c0db6d6876c6 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Thu, 2 May 2024 15:48:31 +0700 Subject: [PATCH 099/132] base: add verifyMessage for ledger --- .../cosmos/src/signers/ledger.signer.spec.ts | 43 +++++++++++++++++++ packages/cosmos/src/signers/ledger.signer.ts | 23 ++++++++++ yarn.lock | 2 +- 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/packages/cosmos/src/signers/ledger.signer.spec.ts b/packages/cosmos/src/signers/ledger.signer.spec.ts index 6ae150b7..69789779 100644 --- a/packages/cosmos/src/signers/ledger.signer.spec.ts +++ b/packages/cosmos/src/signers/ledger.signer.spec.ts @@ -1,5 +1,8 @@ import { Msg } from '@xdefi-tech/chains-core'; import Transport from '@ledgerhq/hw-transport-webhid'; +import { bech32 } from 'bech32'; +import { Hash, PrivKeySecp256k1 } from '@keplr-wallet/crypto'; +import { makeADR36AminoSignDoc, serializeSignDoc } from '@keplr-wallet/cosmos'; import { CosmosProvider } from '../chain.provider'; import { IndexerDataSource } from '../datasource'; @@ -108,4 +111,44 @@ describe('cosmos::ledger.signer', () => { it('should fail if private key is requested', async () => { expect(signer.getPrivateKey(derivationPath)).rejects.toThrowError(); }); + + it('should return status of verify message', async () => { + // Define test data + const privKey = PrivKeySecp256k1.generateRandomKey(); + const pubKey = privKey.getPubKey(); + + const sign = bech32.encode('cosmos', bech32.toWords(pubKey.toBytes())); + + const signDoc = makeADR36AminoSignDoc(sign, 'test'); + const msg = serializeSignDoc(signDoc); + const signature = privKey.signDigest32(Hash.sha256(msg)); + + const result = await signer.verifyMessage( + sign, + 'test', + pubKey.toBytes(), + new Uint8Array([...signature.r, ...signature.s]) + ); + expect(result); + }); + + it('should return false when unmatched/invalid signer', async () => { + // Define test data + const privKey = PrivKeySecp256k1.generateRandomKey(); + const pubKey = privKey.getPubKey(); + + const sign = 'osmo1ymk637a7wljvt4w7q9lnrw95mg9sr37yatxd9h'; // unmatched signer + + const signDoc = makeADR36AminoSignDoc(sign, 'test'); + const msg = serializeSignDoc(signDoc); + const signature = privKey.signDigest32(Hash.sha256(msg)); + + const result = await signer.verifyMessage( + sign, + 'test', + pubKey.toBytes(), + new Uint8Array([...signature.r, ...signature.s]) + ); + expect(result).toBe(false); + }); }); diff --git a/packages/cosmos/src/signers/ledger.signer.ts b/packages/cosmos/src/signers/ledger.signer.ts index 3b187d60..103ed893 100644 --- a/packages/cosmos/src/signers/ledger.signer.ts +++ b/packages/cosmos/src/signers/ledger.signer.ts @@ -5,6 +5,8 @@ import Transport from '@ledgerhq/hw-transport'; import { Signer, SignerDecorator } from '@xdefi-tech/chains-core'; import { TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; import { SigningStargateClient } from '@cosmjs/stargate'; +import { bech32 } from 'bech32'; +import { verifyADR36Amino } from '@keplr-wallet/cosmos'; import { ChainMsg } from '../msg'; import { STARGATE_CLIENT_OPTIONS } from '../utils'; @@ -77,6 +79,27 @@ export class LedgerSigner extends Signer.Provider { const rawTx = Buffer.from(txBytes).toString('base64'); msg.sign(rawTx); } + + async verifyMessage( + signer: string, + data: Uint8Array | string, + pubKey: Uint8Array, + signature: Uint8Array + ): Promise { + try { + const isVerified = verifyADR36Amino( + bech32.decode(signer).prefix, // prefix + signer, // signer + data, // data sign message + pubKey, // pubKeyBuffer + signature // signature + ); + + return isVerified; + } catch (err) { + return false; + } + } } export default LedgerSigner; diff --git a/yarn.lock b/yarn.lock index c752dd4b..9de513d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15455,7 +15455,7 @@ protobufjs@7.2.4: "@types/node" ">=13.7.0" long "^5.0.0" -protobufjs@^6.11.2, protobufjs@^6.11.3, protobufjs@^6.8.8, protobufjs@~6.11.2, protobufjs@~6.11.3: +protobufjs@^6.11.2, protobufjs@^6.11.3, protobufjs@^6.8.8, protobufjs@~6.11.2: version "6.11.4" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== From 449e51c537bf8b2d50c64a0307e41baf6e6f2839 Mon Sep 17 00:00:00 2001 From: HoangVD2 Date: Thu, 2 May 2024 16:35:34 +0700 Subject: [PATCH 100/132] chore: fix comment --- packages/thor/src/datasource/chain/chain.data-source.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/thor/src/datasource/chain/chain.data-source.ts b/packages/thor/src/datasource/chain/chain.data-source.ts index 3356fc1a..c5108422 100644 --- a/packages/thor/src/datasource/chain/chain.data-source.ts +++ b/packages/thor/src/datasource/chain/chain.data-source.ts @@ -52,9 +52,14 @@ export class ChainDataSource extends DataSource { `/cosmos/bank/v1beta1/balances/${address}` ); + const chain = + this.manifest.chain === 'thorchain' + ? ('THORChain' as AddressChain) + : ('MAYAChain' as AddressChain); + const cryptoAssetsInput = resp.balances.map( ({ denom }) => ({ - chain: this.manifest.chain as AddressChain, + chain: chain, contract: this.manifest.denom === denom ? null : denom, }) ); From aafb120200a1ffaeb5a13b3a5aa91410235803e4 Mon Sep 17 00:00:00 2001 From: Danil Kuchmenko Date: Wed, 24 Apr 2024 00:50:45 +0300 Subject: [PATCH 101/132] feat: prepare setup for reproduce solana metaplex issue on mobile device --- examples/expo-example/App.js | 60 +++++++++--------------------------- 1 file changed, 15 insertions(+), 45 deletions(-) diff --git a/examples/expo-example/App.js b/examples/expo-example/App.js index 795acc24..5df4ee51 100644 --- a/examples/expo-example/App.js +++ b/examples/expo-example/App.js @@ -1,57 +1,26 @@ -import "@ethersproject/shims"; -import { useCallback } from "react"; import { View, Button } from "react-native"; - -import { Chain } from "@xdefi-tech/chains-core"; import { - EVM_MANIFESTS, - EvmProvider, - IndexerDataSource as EvmDataSource, -} from "@xdefi-tech/chains-evm"; -import { ethers } from "ethers"; -import { ChainController } from "@xdefi-tech/chains-controller"; -import { TrustWalletSigner } from "./trust-wallet.signer"; - -// const provider = new ethers.providers.StaticJsonRpcProvider( -// "https://polygon-rpc.com" -// ); - -// const somweting = async () => { -// // const balance = await provider.getBalance( -// // "0xd0972E2312518Ca15A2304D56ff9cc0b7ea0Ea37" -// // ); -// // const result = await evmProvider.getTransactions( -// // "0xb4D24357404C35A62b8B9228155FE9e77BDE4F53" -// // ); -// // const txs = await result.getData(); -// // console.log(txs); -// chains.addProvider(evmProvider); -// // fetch("https://jsonplaceholder.typicode.com/todos/1") -// // .then((response) => response.json()) -// // .then((json) => console.log(json)); -// }; -// somweting(); + SOLANA_MANIFEST, + SolanaProvider, +} from '@xdefi-tech/chains-solana'; +import { SeedPhraseSigner } from "@xdefi-tech/chains-solana/dist/signers/react-native"; function App() { - const evmDatasource = new EvmDataSource(EVM_MANIFESTS.polygon); - const evmProvider = new EvmProvider(evmDatasource, { - providerId: "polygon", - signers: [TrustWalletSigner], + const dataSource = new SolanaProvider.dataSourceList.IndexerDataSource(SOLANA_MANIFEST); + const provider = new SolanaProvider(dataSource, { + providerId: "solana", }); - const msg = evmProvider.createMsg({ - from: '0xD669fd4484d2C1fB2032B57a4C42AB4Cfb9395ff', - to: '0xD669fd4484d2C1fB2032B57a4C42AB4Cfb9395ff', - amount: 0.00001, + const derivationPath = "m/44'/501'/0'/0'"; + const msg = provider.createMsg({ + from: 'YOUR_ADDRESS', + to: 'YOUR_ADDRESS', + amount: 0.001, }) - console.log('msg', msg); + const signer = new SeedPhraseSigner('YOUR_SEED_PHRASE'); - const signers = evmProvider.getSigners(); - console.log('signers', signers[0]); - const trustWalletSigner = new signers[0](); - - trustWalletSigner.sign('', msg).then(() => { + signer.sign(msg, derivationPath).then(() => { console.log('msg.hasSignature', msg.hasSignature) }) @@ -60,6 +29,7 @@ function App() { .then((response) => response.json()) .then((json) => console.log(json)); }, []); + return (