diff --git a/examples/sandbox/package.json b/examples/sandbox/package.json index f09917d17..5de09807a 100644 --- a/examples/sandbox/package.json +++ b/examples/sandbox/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-sandbox", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "private": true, "browserslist": "> 0.5%, last 2 versions, not dead", @@ -12,24 +12,24 @@ "dependencies": { "@esm2cjs/p-queue": "^7.3.0", "@metamask/eth-sig-util": "^7.0.0", - "@shapeshiftoss/hdwallet-coinbase": "1.62.29", - "@shapeshiftoss/hdwallet-core": "1.62.29", - "@shapeshiftoss/hdwallet-keepkey": "1.62.29", - "@shapeshiftoss/hdwallet-keepkey-tcp": "1.62.29", - "@shapeshiftoss/hdwallet-keepkey-webusb": "1.62.29", - "@shapeshiftoss/hdwallet-keplr": "1.62.29", - "@shapeshiftoss/hdwallet-ledger": "1.62.29", - "@shapeshiftoss/hdwallet-ledger-webhid": "1.62.29", - "@shapeshiftoss/hdwallet-ledger-webusb": "1.62.29", - "@shapeshiftoss/hdwallet-metamask-multichain": "1.62.29", - "@shapeshiftoss/hdwallet-native": "1.62.29", - "@shapeshiftoss/hdwallet-phantom": "1.62.29", - "@shapeshiftoss/hdwallet-portis": "1.62.29", - "@shapeshiftoss/hdwallet-trezor": "1.62.29", - "@shapeshiftoss/hdwallet-trezor-connect": "1.62.29", - "@shapeshiftoss/hdwallet-vultisig": "1.62.29", - "@shapeshiftoss/hdwallet-walletconnect": "1.62.29", - "@shapeshiftoss/hdwallet-walletconnectv2": "1.62.29", + "@shapeshiftoss/hdwallet-coinbase": "1.62.30", + "@shapeshiftoss/hdwallet-core": "1.62.30", + "@shapeshiftoss/hdwallet-keepkey": "1.62.30", + "@shapeshiftoss/hdwallet-keepkey-tcp": "1.62.30", + "@shapeshiftoss/hdwallet-keepkey-webusb": "1.62.30", + "@shapeshiftoss/hdwallet-keplr": "1.62.30", + "@shapeshiftoss/hdwallet-ledger": "1.62.30", + "@shapeshiftoss/hdwallet-ledger-webhid": "1.62.30", + "@shapeshiftoss/hdwallet-ledger-webusb": "1.62.30", + "@shapeshiftoss/hdwallet-metamask-multichain": "1.62.30", + "@shapeshiftoss/hdwallet-native": "1.62.30", + "@shapeshiftoss/hdwallet-phantom": "1.62.30", + "@shapeshiftoss/hdwallet-portis": "1.62.30", + "@shapeshiftoss/hdwallet-trezor": "1.62.30", + "@shapeshiftoss/hdwallet-trezor-connect": "1.62.30", + "@shapeshiftoss/hdwallet-vultisig": "1.62.30", + "@shapeshiftoss/hdwallet-walletconnect": "1.62.30", + "@shapeshiftoss/hdwallet-walletconnectv2": "1.62.30", "bip32": "^2.0.4", "eip-712": "^1.0.0", "jquery": "^3.7.1", diff --git a/integration/package.json b/integration/package.json index 0d375092b..0940cac16 100644 --- a/integration/package.json +++ b/integration/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/integration", - "version": "1.62.29", + "version": "1.62.30", "main": "index.js", "license": "MIT", "private": true, @@ -12,16 +12,16 @@ "dependencies": { "@bitcoinerlab/secp256k1": "^1.1.1", "@bitgo/utxo-lib": "^11.18.0", - "@shapeshiftoss/hdwallet-core": "1.62.29", - "@shapeshiftoss/hdwallet-keepkey": "1.62.29", - "@shapeshiftoss/hdwallet-keepkey-nodewebusb": "1.62.29", - "@shapeshiftoss/hdwallet-keepkey-tcp": "1.62.29", - "@shapeshiftoss/hdwallet-ledger": "1.62.29", - "@shapeshiftoss/hdwallet-metamask-multichain": "1.62.29", - "@shapeshiftoss/hdwallet-native": "1.62.29", - "@shapeshiftoss/hdwallet-portis": "1.62.29", - "@shapeshiftoss/hdwallet-trezor": "1.62.29", - "@shapeshiftoss/hdwallet-vultisig": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", + "@shapeshiftoss/hdwallet-keepkey": "1.62.30", + "@shapeshiftoss/hdwallet-keepkey-nodewebusb": "1.62.30", + "@shapeshiftoss/hdwallet-keepkey-tcp": "1.62.30", + "@shapeshiftoss/hdwallet-ledger": "1.62.30", + "@shapeshiftoss/hdwallet-metamask-multichain": "1.62.30", + "@shapeshiftoss/hdwallet-native": "1.62.30", + "@shapeshiftoss/hdwallet-portis": "1.62.30", + "@shapeshiftoss/hdwallet-trezor": "1.62.30", + "@shapeshiftoss/hdwallet-vultisig": "1.62.30", "fast-json-stable-stringify": "^2.1.0", "msw": "^0.27.1", "whatwg-fetch": "^3.6.2" diff --git a/lerna.json b/lerna.json index 969180e5c..2e5df998f 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "5.2.0", - "version": "1.62.29", + "version": "1.62.30", "npmClient": "yarn", "useWorkspaces": true, "command": { diff --git a/packages/hdwallet-coinbase/package.json b/packages/hdwallet-coinbase/package.json index e51a4e81d..4c7838595 100644 --- a/packages/hdwallet-coinbase/package.json +++ b/packages/hdwallet-coinbase/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-coinbase", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -15,7 +15,7 @@ }, "dependencies": { "@coinbase/wallet-sdk": "^3.6.6", - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "eth-rpc-errors": "^4.0.3", "lodash": "^4.17.21" }, diff --git a/packages/hdwallet-core/package.json b/packages/hdwallet-core/package.json index b4195ffde..c2c4ac51d 100644 --- a/packages/hdwallet-core/package.json +++ b/packages/hdwallet-core/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-core", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" diff --git a/packages/hdwallet-core/src/sui.ts b/packages/hdwallet-core/src/sui.ts index 226ec2ca6..32a84d748 100644 --- a/packages/hdwallet-core/src/sui.ts +++ b/packages/hdwallet-core/src/sui.ts @@ -10,6 +10,8 @@ export interface SuiSignTx { addressNList: BIP32Path; /** Intent message bytes to sign (intent scope + version + app id + tx bytes) */ intentMessageBytes: Uint8Array; + /** Transaction JSON string for wallet signing */ + transactionJson: string; } export interface SuiSignedTx { diff --git a/packages/hdwallet-gridplus/package.json b/packages/hdwallet-gridplus/package.json index b7ac860c2..31e858673 100644 --- a/packages/hdwallet-gridplus/package.json +++ b/packages/hdwallet-gridplus/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-gridplus", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -20,7 +20,7 @@ "@ethereumjs/rlp": "5.0.2", "@ethereumjs/tx": "5.4.0", "@metamask/eth-sig-util": "^7.0.0", - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "bech32": "^1.1.4", "bs58": "^5.0.0", "bs58check": "^4.0.0", diff --git a/packages/hdwallet-keepkey-chromeusb/package.json b/packages/hdwallet-keepkey-chromeusb/package.json index 0badc6d11..15f5341d9 100644 --- a/packages/hdwallet-keepkey-chromeusb/package.json +++ b/packages/hdwallet-keepkey-chromeusb/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-keepkey-chromeusb", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -14,7 +14,7 @@ "prepublishOnly": "yarn clean && yarn build" }, "dependencies": { - "@shapeshiftoss/hdwallet-core": "1.62.29", - "@shapeshiftoss/hdwallet-keepkey": "1.62.29" + "@shapeshiftoss/hdwallet-core": "1.62.30", + "@shapeshiftoss/hdwallet-keepkey": "1.62.30" } } diff --git a/packages/hdwallet-keepkey-electron/package.json b/packages/hdwallet-keepkey-electron/package.json index 18c20bde2..39dd69cdd 100644 --- a/packages/hdwallet-keepkey-electron/package.json +++ b/packages/hdwallet-keepkey-electron/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-keepkey-electron", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -14,7 +14,7 @@ "prepublishOnly": "yarn clean && yarn build" }, "dependencies": { - "@shapeshiftoss/hdwallet-keepkey": "1.62.29", + "@shapeshiftoss/hdwallet-keepkey": "1.62.30", "uuid": "^8.3.2" }, "peerDependencies": { diff --git a/packages/hdwallet-keepkey-nodehid/package.json b/packages/hdwallet-keepkey-nodehid/package.json index 733a6df31..657fe4831 100644 --- a/packages/hdwallet-keepkey-nodehid/package.json +++ b/packages/hdwallet-keepkey-nodehid/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-keepkey-nodehid", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -14,7 +14,7 @@ "prepublishOnly": "yarn clean && yarn build" }, "dependencies": { - "@shapeshiftoss/hdwallet-keepkey": "1.62.29" + "@shapeshiftoss/hdwallet-keepkey": "1.62.30" }, "peerDependencies": { "node-hid": "^2.1.1" diff --git a/packages/hdwallet-keepkey-nodewebusb/package.json b/packages/hdwallet-keepkey-nodewebusb/package.json index 142e27e2c..b5a0694c9 100644 --- a/packages/hdwallet-keepkey-nodewebusb/package.json +++ b/packages/hdwallet-keepkey-nodewebusb/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-keepkey-nodewebusb", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -14,8 +14,8 @@ "prepublishOnly": "yarn clean && yarn build" }, "dependencies": { - "@shapeshiftoss/hdwallet-core": "1.62.29", - "@shapeshiftoss/hdwallet-keepkey": "1.62.29" + "@shapeshiftoss/hdwallet-core": "1.62.30", + "@shapeshiftoss/hdwallet-keepkey": "1.62.30" }, "peerDependencies": { "usb": "^2.3.1" diff --git a/packages/hdwallet-keepkey-tcp/package.json b/packages/hdwallet-keepkey-tcp/package.json index 51e07ca56..4bfa831b0 100644 --- a/packages/hdwallet-keepkey-tcp/package.json +++ b/packages/hdwallet-keepkey-tcp/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-keepkey-tcp", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -14,8 +14,8 @@ "prepublishOnly": "yarn clean && yarn build" }, "dependencies": { - "@shapeshiftoss/hdwallet-core": "1.62.29", - "@shapeshiftoss/hdwallet-keepkey": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", + "@shapeshiftoss/hdwallet-keepkey": "1.62.30", "axios": "^0.21.1" } } diff --git a/packages/hdwallet-keepkey-webusb/package.json b/packages/hdwallet-keepkey-webusb/package.json index aa28ec191..0057a2807 100644 --- a/packages/hdwallet-keepkey-webusb/package.json +++ b/packages/hdwallet-keepkey-webusb/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-keepkey-webusb", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -14,8 +14,8 @@ "prepublishOnly": "yarn clean && yarn build" }, "dependencies": { - "@shapeshiftoss/hdwallet-core": "1.62.29", - "@shapeshiftoss/hdwallet-keepkey": "1.62.29" + "@shapeshiftoss/hdwallet-core": "1.62.30", + "@shapeshiftoss/hdwallet-keepkey": "1.62.30" }, "devDependencies": { "@types/w3c-web-usb": "^1.0.4" diff --git a/packages/hdwallet-keepkey/package.json b/packages/hdwallet-keepkey/package.json index b7020e37f..94a9d29ef 100644 --- a/packages/hdwallet-keepkey/package.json +++ b/packages/hdwallet-keepkey/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-keepkey", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -21,7 +21,7 @@ "@keepkey/device-protocol": "7.13.4", "@metamask/eth-sig-util": "^7.0.0", "@shapeshiftoss/bitcoinjs-lib": "7.0.0-shapeshift.2", - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "@shapeshiftoss/proto-tx-builder": "0.10.0", "bignumber.js": "^9.0.1", "bnb-javascript-sdk-nobroadcast": "2.16.15", diff --git a/packages/hdwallet-keplr/package.json b/packages/hdwallet-keplr/package.json index 6ab63c6a3..1cf4e8eb4 100644 --- a/packages/hdwallet-keplr/package.json +++ b/packages/hdwallet-keplr/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-keplr", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -17,7 +17,7 @@ "@cosmjs/amino": "^0.28.13", "@cosmjs/stargate": "^0.28.13", "@shapeshiftoss/caip": "8.15.0", - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "@shapeshiftoss/proto-tx-builder": "0.10.0", "@shapeshiftoss/types": "3.1.3", "base64-js": "^1.5.1", diff --git a/packages/hdwallet-ledger-webhid/package.json b/packages/hdwallet-ledger-webhid/package.json index aa3a93f0a..c7d177c2c 100644 --- a/packages/hdwallet-ledger-webhid/package.json +++ b/packages/hdwallet-ledger-webhid/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-ledger-webhid", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -18,8 +18,8 @@ "@ledgerhq/hw-app-eth": "7.0.0", "@ledgerhq/hw-transport": "6.31.13", "@ledgerhq/hw-transport-webhid": "6.30.6", - "@shapeshiftoss/hdwallet-core": "1.62.29", - "@shapeshiftoss/hdwallet-ledger": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", + "@shapeshiftoss/hdwallet-ledger": "1.62.30", "@types/w3c-web-hid": "^1.0.2" } } diff --git a/packages/hdwallet-ledger-webusb/package.json b/packages/hdwallet-ledger-webusb/package.json index 5782f457d..ae306bb6b 100644 --- a/packages/hdwallet-ledger-webusb/package.json +++ b/packages/hdwallet-ledger-webusb/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-ledger-webusb", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -20,8 +20,8 @@ "@ledgerhq/hw-app-solana": "7.6.0", "@ledgerhq/hw-transport": "6.31.13", "@ledgerhq/hw-transport-webusb": "6.29.13", - "@shapeshiftoss/hdwallet-core": "1.62.29", - "@shapeshiftoss/hdwallet-ledger": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", + "@shapeshiftoss/hdwallet-ledger": "1.62.30", "@types/w3c-web-usb": "^1.0.4", "p-queue": "^7.4.1" }, diff --git a/packages/hdwallet-ledger/package.json b/packages/hdwallet-ledger/package.json index 53fd85cc5..53ce9a9ae 100644 --- a/packages/hdwallet-ledger/package.json +++ b/packages/hdwallet-ledger/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-ledger", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -28,7 +28,7 @@ "@ledgerhq/logs": "6.13.0", "@mysten/ledgerjs-hw-app-sui": "^0.7.0", "@shapeshiftoss/bitcoinjs-lib": "7.0.0-shapeshift.2", - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "@solana/web3.js": "1.95.8", "base64-js": "^1.5.1", "bchaddrjs": "^0.4.4", diff --git a/packages/hdwallet-metamask-multichain/package.json b/packages/hdwallet-metamask-multichain/package.json index 98785a809..17689d80e 100644 --- a/packages/hdwallet-metamask-multichain/package.json +++ b/packages/hdwallet-metamask-multichain/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-metamask-multichain", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -17,7 +17,7 @@ "@metamask/detect-provider": "^1.2.0", "@metamask/onboarding": "^1.0.1", "@shapeshiftoss/common-api": "^9.3.0", - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "@shapeshiftoss/metamask-snaps-adapter": "^1.0.12", "@shapeshiftoss/metamask-snaps-types": "^1.0.12", "eth-rpc-errors": "^4.0.3", diff --git a/packages/hdwallet-native-vault/package.json b/packages/hdwallet-native-vault/package.json index ce3ffc0ee..c2e3c07a9 100644 --- a/packages/hdwallet-native-vault/package.json +++ b/packages/hdwallet-native-vault/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-native-vault", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -15,7 +15,7 @@ }, "dependencies": { "@bitcoinerlab/secp256k1": "^1.1.1", - "@shapeshiftoss/hdwallet-native": "1.62.29", + "@shapeshiftoss/hdwallet-native": "1.62.30", "bip39": "^3.0.4", "hash-wasm": "^4.11.0", "idb-keyval": "^6.0.3", diff --git a/packages/hdwallet-native/package.json b/packages/hdwallet-native/package.json index e2b02eefe..d8e49a94d 100644 --- a/packages/hdwallet-native/package.json +++ b/packages/hdwallet-native/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-native", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -17,7 +17,7 @@ "@bitcoinerlab/secp256k1": "^1.1.1", "@noble/curves": "^1.4.0", "@shapeshiftoss/bitcoinjs-lib": "7.0.0-shapeshift.2", - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "@shapeshiftoss/proto-tx-builder": "0.10.0", "@zxing/text-encoding": "^0.9.0", "bchaddrjs": "^0.4.9", diff --git a/packages/hdwallet-native/src/__tests__/sui.test.ts b/packages/hdwallet-native/src/__tests__/sui.test.ts index 29484c708..03fbd2abb 100644 --- a/packages/hdwallet-native/src/__tests__/sui.test.ts +++ b/packages/hdwallet-native/src/__tests__/sui.test.ts @@ -49,6 +49,7 @@ describe("NativeHDWallet SUI", () => { const signedTx = await wallet.suiSignTx({ addressNList: core.suiGetAccountPaths({ accountIdx: 0 })[0].addressNList, intentMessageBytes: mockIntentMessage, + transactionJson: '{"mock": "transaction"}', }); expect(signedTx).toBeTruthy(); diff --git a/packages/hdwallet-phantom/package.json b/packages/hdwallet-phantom/package.json index 7e963baab..a1daed664 100644 --- a/packages/hdwallet-phantom/package.json +++ b/packages/hdwallet-phantom/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-phantom", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -15,7 +15,7 @@ }, "dependencies": { "@shapeshiftoss/bitcoinjs-lib": "7.0.0-shapeshift.2", - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "@solana/web3.js": "1.95.8", "base64-js": "^1.5.1", "bitcoinjs-message": "^2.0.0", diff --git a/packages/hdwallet-phantom/src/adapter.ts b/packages/hdwallet-phantom/src/adapter.ts index ebdd9b067..3a5dfa289 100644 --- a/packages/hdwallet-phantom/src/adapter.ts +++ b/packages/hdwallet-phantom/src/adapter.ts @@ -1,7 +1,7 @@ import * as core from "@shapeshiftoss/hdwallet-core"; import { PhantomHDWallet } from "./phantom"; -import { PhantomEvmProvider, PhantomSolanaProvider, PhantomUtxoProvider } from "./types"; +import { PhantomEvmProvider, PhantomSolanaProvider, PhantomSuiProvider, PhantomUtxoProvider } from "./types"; declare global { interface Window { @@ -9,6 +9,7 @@ declare global { ethereum?: PhantomEvmProvider; bitcoin?: PhantomUtxoProvider; solana?: PhantomSolanaProvider; + sui?: PhantomSuiProvider; }; } } @@ -32,6 +33,7 @@ export class PhantomAdapter { const evmProvider = window.phantom?.ethereum; const bitcoinProvider = window.phantom?.bitcoin; const solanaProvider = window.phantom?.solana; + const suiProvider = window.phantom?.sui; if (!evmProvider || !bitcoinProvider || !solanaProvider) { window.open("https://phantom.app/", "_blank"); @@ -43,7 +45,7 @@ export class PhantomAdapter { // Note, we don't try and get EVM accounts below just yet - we only use the Solana account as a deviceID await solanaProvider.connect(); - const wallet = new PhantomHDWallet(evmProvider, bitcoinProvider, solanaProvider); + const wallet = new PhantomHDWallet(evmProvider, bitcoinProvider, solanaProvider, suiProvider); await wallet.initialize(); const deviceID = await wallet.getDeviceID(); this.keyring.add(wallet, deviceID); diff --git a/packages/hdwallet-phantom/src/index.ts b/packages/hdwallet-phantom/src/index.ts index ee1fe48d8..0f2ceb1ca 100644 --- a/packages/hdwallet-phantom/src/index.ts +++ b/packages/hdwallet-phantom/src/index.ts @@ -1,2 +1,3 @@ export * from "./adapter"; export * from "./phantom"; +export * from "./sui"; diff --git a/packages/hdwallet-phantom/src/phantom.ts b/packages/hdwallet-phantom/src/phantom.ts index 17dc995b5..e667c8a3c 100644 --- a/packages/hdwallet-phantom/src/phantom.ts +++ b/packages/hdwallet-phantom/src/phantom.ts @@ -8,18 +8,20 @@ import isObject from "lodash/isObject"; import * as btc from "./bitcoin"; import * as eth from "./ethereum"; import { solanaSendTx, solanaSignTx } from "./solana"; -import { PhantomEvmProvider, PhantomSolanaProvider, PhantomUtxoProvider } from "./types"; +import * as sui from "./sui"; +import { PhantomEvmProvider, PhantomSolanaProvider, PhantomSuiProvider, PhantomUtxoProvider } from "./types"; export function isPhantom(wallet: core.HDWallet): wallet is PhantomHDWallet { return isObject(wallet) && (wallet as any)._isPhantom; } export class PhantomHDWalletInfo - implements core.HDWalletInfo, core.BTCWalletInfo, core.ETHWalletInfo, core.SolanaWalletInfo + implements core.HDWalletInfo, core.BTCWalletInfo, core.ETHWalletInfo, core.SolanaWalletInfo, core.SuiWalletInfo { readonly _supportsBTCInfo = true; readonly _supportsETHInfo = true; readonly _supportsSolanaInfo = true; + readonly _supportsSuiInfo = true; evmProvider: PhantomEvmProvider; @@ -169,47 +171,63 @@ export class PhantomHDWalletInfo public solanaNextAccountPath(msg: core.SolanaAccountPath): core.SolanaAccountPath | undefined { throw new Error("Method not implemented"); } + + /** Sui */ + + public suiGetAccountPaths(msg: core.SuiGetAccountPaths): Array { + return core.suiGetAccountPaths(msg); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public suiNextAccountPath(msg: core.SuiAccountPath): core.SuiAccountPath | undefined { + return undefined; + } } export class PhantomHDWallet extends PhantomHDWalletInfo - implements core.HDWallet, core.BTCWallet, core.ETHWallet, core.SolanaWallet + implements core.HDWallet, core.BTCWallet, core.ETHWallet, core.SolanaWallet, core.SuiWallet { readonly _supportsBTC = true; readonly _supportsETH = true; - readonly _supportsEthSwitchChain = false; + readonly _supportsEthSwitchChain = true; readonly _supportsAvalanche = false; readonly _supportsOptimism = false; - // Polygon is technically supported but is acting up on the Phantom side of things atm - // https://github.com/orgs/phantom/discussions/294 - readonly _supportsPolygon = false; + readonly _supportsPolygon = true; readonly _supportsGnosis = false; readonly _supportsArbitrum = false; readonly _supportsArbitrumNova = false; readonly _supportsBase = true; - readonly _supportsMonad = false; + readonly _supportsMonad = true; readonly _supportsPlasma = false; - readonly _supportsHyperEvm = false; + readonly _supportsHyperEvm = true; readonly _supportsBSC = false; readonly _supportsSolana = true; + readonly _supportsSui = true; readonly _isPhantom = true; evmProvider: PhantomEvmProvider; bitcoinProvider: PhantomUtxoProvider; solanaProvider: PhantomSolanaProvider; + suiProvider?: PhantomSuiProvider; ethAddress?: Address | null; + btcAddress?: string | null; + solanaAddress?: string | null; + suiAddress?: string | null; constructor( evmProvider: PhantomEvmProvider, bitcoinProvider: PhantomUtxoProvider, - solanaProvider: PhantomSolanaProvider + solanaProvider: PhantomSolanaProvider, + suiProvider?: PhantomSuiProvider ) { super(evmProvider); this.evmProvider = evmProvider; this.bitcoinProvider = bitcoinProvider; this.solanaProvider = solanaProvider; + this.suiProvider = suiProvider; } public async getDeviceID(): Promise { @@ -297,19 +315,17 @@ export class PhantomHDWallet // eslint-disable-next-line @typescript-eslint/no-unused-vars public async ethGetAddress(_msg: core.ETHGetAddress): Promise { - if (this.ethAddress) { - return this.ethAddress; - } + if (this.ethAddress) return this.ethAddress; const address = await eth.ethGetAddress(this.evmProvider); if (address) { this.ethAddress = address; return address; - } else { - this.ethAddress = null; - return null; } + + this.ethAddress = null; + return null; } // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -339,9 +355,34 @@ export class PhantomHDWallet return recoverAddress(digest, msg.signature) === msg.address; } + public async ethGetChainId(): Promise { + try { + const chainIdHex = await this.evmProvider.request({ method: "eth_chainId" }); + return parseInt(chainIdHex, 16); + } catch (error) { + console.error("Failed to get chain ID from Phantom:", error); + return null; + } + } + + public async ethSwitchChain(params: core.AddEthereumChainParameter): Promise { + const parsedChainId = parseInt(params.chainId, 16); + const currentChainId = await this.ethGetChainId(); + + if (currentChainId === parsedChainId) return; + + await this.evmProvider.request({ + method: "wallet_switchEthereumChain", + params: [{ chainId: params.chainId }], + }); + } + /** Bitcoin */ public async btcGetAddress(msg: core.BTCGetAddress): Promise { + // Use cached address if available to prevent rate limiting + if (this.btcAddress !== undefined) return this.btcAddress; + const value = await (async () => { switch (msg.coin) { case "Bitcoin": { @@ -354,8 +395,12 @@ export class PhantomHDWallet return null; } })(); - if (!value || typeof value !== "string") return null; + if (!value || typeof value !== "string") { + this.btcAddress = null; + return null; + } + this.btcAddress = value; return value; } @@ -393,8 +438,13 @@ export class PhantomHDWallet /** Solana */ public async solanaGetAddress(): Promise { + // Use cached address if available to prevent rate limiting + if (this.solanaAddress !== undefined) return this.solanaAddress; + const { publicKey } = await this.solanaProvider.connect(); - return publicKey.toString(); + const address = publicKey.toString(); + this.solanaAddress = address; + return address; } public async solanaSignTx(msg: core.SolanaSignTx): Promise { @@ -406,4 +456,23 @@ export class PhantomHDWallet const address = await this.solanaGetAddress(); return address ? solanaSendTx(msg, this.solanaProvider, address) : null; } + + /** Sui */ + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public async suiGetAddress(_msg: core.SuiGetAddress): Promise { + if (!this.suiProvider) return null; + + // Use cached address if available to prevent rate limiting + if (this.suiAddress !== undefined) return this.suiAddress; + + const address = await sui.suiGetAddress(this.suiProvider); + this.suiAddress = address; + return address; + } + + public async suiSignTx(msg: core.SuiSignTx): Promise { + if (!this.suiProvider) return null; + return sui.suiSignTx(msg, this.suiProvider); + } } diff --git a/packages/hdwallet-phantom/src/sui.ts b/packages/hdwallet-phantom/src/sui.ts new file mode 100644 index 000000000..3c7de1997 --- /dev/null +++ b/packages/hdwallet-phantom/src/sui.ts @@ -0,0 +1,44 @@ +import * as core from "@shapeshiftoss/hdwallet-core"; + +import { PhantomSuiProvider } from "./types"; + +export async function suiGetAddress(provider: PhantomSuiProvider): Promise { + const account = await provider.requestAccount(); + + if (account && account.address) return account.address; + + return null; +} + +export async function suiSignTx(msg: core.SuiSignTx, provider: PhantomSuiProvider): Promise { + const account = await provider.requestAccount(); + + const result = await provider.signTransaction({ + transaction: msg.transactionJson, + address: account.address, + networkID: "sui:mainnet", + }); + + const fullSignatureBuffer = Buffer.from(result.signature, "base64"); + + // Phantom returns a 97-byte signature: 1 byte flag + 64 bytes signature + 32 bytes public key + if (fullSignatureBuffer.length !== 97) { + throw new Error(`Unexpected signature length: ${fullSignatureBuffer.length} bytes (expected 97)`); + } + + const signatureBytes = fullSignatureBuffer.slice(1, 65); + const publicKeyBytes = fullSignatureBuffer.slice(65, 97); + + const signatureHex = signatureBytes.toString("hex"); + const publicKeyHex = publicKeyBytes.toString("hex"); + + return { + signature: signatureHex, + publicKey: publicKeyHex, + }; +} + +export async function suiSignMessage(message: Uint8Array, provider: PhantomSuiProvider): Promise { + const result = await provider.signMessage(message); + return result.signature; +} diff --git a/packages/hdwallet-phantom/src/types.ts b/packages/hdwallet-phantom/src/types.ts index 974df4904..b54eb1761 100644 --- a/packages/hdwallet-phantom/src/types.ts +++ b/packages/hdwallet-phantom/src/types.ts @@ -8,6 +8,7 @@ export type PhantomEvmProvider = providers.ExternalProvider & { _metamask: { isUnlocked: () => boolean; }; + request: (args: { method: string; params?: unknown[] | object }) => Promise; }; export type PhantomUtxoProvider = providers.ExternalProvider & { @@ -30,3 +31,9 @@ export type PhantomSolanaProvider = providers.ExternalProvider & { signTransaction(transaction: VersionedTransaction): Promise; signAndSendTransaction(transaction: VersionedTransaction): Promise<{ signature: TransactionSignature }>; }; + +export type PhantomSuiProvider = { + requestAccount(): Promise<{ address: string; publicKey: Uint8Array }>; + signMessage(message: Uint8Array, encoding?: string): Promise<{ signature: string }>; + signTransaction(params: { transaction: string; address: string; networkID: string }): Promise<{ signature: string }>; +}; diff --git a/packages/hdwallet-portis/package.json b/packages/hdwallet-portis/package.json index d37e2bc55..46a8d0ad6 100644 --- a/packages/hdwallet-portis/package.json +++ b/packages/hdwallet-portis/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-portis", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -16,7 +16,7 @@ "dependencies": { "@portis/web3": "3.0.10", "@shapeshiftoss/bitcoinjs-lib": "7.0.0-shapeshift.2", - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "base64-js": "^1.5.1", "bip32": "^2.0.4", "bitcoinjs-message": "^2.1.0", diff --git a/packages/hdwallet-trezor-connect/package.json b/packages/hdwallet-trezor-connect/package.json index c05101c6c..16e274f13 100644 --- a/packages/hdwallet-trezor-connect/package.json +++ b/packages/hdwallet-trezor-connect/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-trezor-connect", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -14,8 +14,8 @@ "prepublishOnly": "yarn clean && yarn build" }, "dependencies": { - "@shapeshiftoss/hdwallet-core": "1.62.29", - "@shapeshiftoss/hdwallet-trezor": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", + "@shapeshiftoss/hdwallet-trezor": "1.62.30", "@trezor/connect-web": "^9.6.4" } } diff --git a/packages/hdwallet-trezor/package.json b/packages/hdwallet-trezor/package.json index 2a338b9ab..a8a8b728b 100644 --- a/packages/hdwallet-trezor/package.json +++ b/packages/hdwallet-trezor/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-trezor", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -17,7 +17,7 @@ "dependencies": { "@ethereumjs/common": "3.2.0", "@ethereumjs/tx": "4.2.0", - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "base64-js": "^1.5.1", "bchaddrjs": "^0.4.4", "lodash": "^4.17.21" diff --git a/packages/hdwallet-vultisig/package.json b/packages/hdwallet-vultisig/package.json index d6248b57f..939f8dd89 100644 --- a/packages/hdwallet-vultisig/package.json +++ b/packages/hdwallet-vultisig/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-vultisig", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -17,7 +17,7 @@ "@cosmjs/amino": "^0.28.13", "@cosmjs/stargate": "^0.28.13", "@shapeshiftoss/bitcoinjs-lib": "7.0.0-shapeshift.2", - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "@solana/web3.js": "1.95.8", "base64-js": "^1.5.1", "bitcoinjs-message": "^2.0.0", diff --git a/packages/hdwallet-walletconnect/package.json b/packages/hdwallet-walletconnect/package.json index 937b531a1..0ebd4dcea 100644 --- a/packages/hdwallet-walletconnect/package.json +++ b/packages/hdwallet-walletconnect/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-walletconnect", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -15,7 +15,7 @@ "prepublishOnly": "yarn clean && yarn build" }, "dependencies": { - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "@walletconnect/qrcode-modal": "^1.7.8", "@walletconnect/web3-provider": "^1.7.8", "ethers": "^5.6.5" diff --git a/packages/hdwallet-walletconnectV2/package.json b/packages/hdwallet-walletconnectV2/package.json index fbab52243..941f8c11c 100644 --- a/packages/hdwallet-walletconnectV2/package.json +++ b/packages/hdwallet-walletconnectV2/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/hdwallet-walletconnectv2", - "version": "1.62.29", + "version": "1.62.30", "license": "MIT", "publishConfig": { "access": "public" @@ -15,7 +15,7 @@ "prepublishOnly": "yarn clean && yarn build" }, "dependencies": { - "@shapeshiftoss/hdwallet-core": "1.62.29", + "@shapeshiftoss/hdwallet-core": "1.62.30", "@walletconnect/ethereum-provider": "^2.20.2", "@walletconnect/modal": "^2.6.2", "ethers": "^5.6.5"