@rango-dev/provider-binance 0.0.0-experimental-82bcc5d9-20260608
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/mod.d.ts +3 -0
- package/dist/mod.d.ts.map +1 -0
- package/dist/mod.js +2 -0
- package/dist/mod.js.map +7 -0
- package/dist/namespaces/evm.d.ts +4 -0
- package/dist/namespaces/evm.d.ts.map +1 -0
- package/dist/provider-binance.build.json +1 -0
- package/dist/provider.d.ts +3 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/signer.d.ts +4 -0
- package/dist/signer.d.ts.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils.d.ts +15 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +35 -0
- package/readme.md +40 -0
- package/src/constants.ts +64 -0
- package/src/mod.ts +8 -0
- package/src/namespaces/evm.ts +57 -0
- package/src/provider.ts +20 -0
- package/src/signer.ts +21 -0
- package/src/types.ts +10 -0
- package/src/utils.ts +71 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# [0.3.0](https://github.com/rango-exchange/rango-client/compare/provider-binance@0.2.1...provider-binance@0.3.0) (2026-05-31)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## [0.2.1](https://github.com/rango-exchange/rango-client/compare/provider-binance@0.2.0...provider-binance@0.2.1) (2026-05-02)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# [0.2.0](https://github.com/rango-exchange/rango-client/compare/provider-binance@0.1.0...provider-binance@0.2.0) (2026-04-29)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# 0.1.0 (2025-12-30)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* integrate binance wallet ([ead71f4](https://github.com/rango-exchange/rango-client/commit/ead71f4fff37338faaab23c0b9ce6d0408daa433))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ProviderMetadata } from '@hub3js/core';
|
|
2
|
+
import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
|
|
3
|
+
export declare const WALLET_ID = "binance";
|
|
4
|
+
export declare const EVM_SUPPORTED_CHAINS: LegacyNetworks[];
|
|
5
|
+
export declare const metadata: ProviderMetadata;
|
|
6
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAMhE,eAAO,MAAM,SAAS,YAAY,CAAC;AACnC,eAAO,MAAM,oBAAoB,kBAiBhC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,gBAmCtB,CAAC"}
|
package/dist/mod.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../src/mod.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,QAAQ,uHAC8C,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/mod.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var v=Object.defineProperty;var n=(e,t)=>v(e,"name",{value:t,configurable:!0});import{defineVersions as _}from"@hub3js/core/utils";import{ProviderBuilder as R}from"@hub3js/core";import{LegacyNetworks as o}from"@rango-dev/wallets-core/legacy";import"rango-types";import{LegacyNetworks as A}from"@rango-dev/wallets-core/legacy";import{dynamicImportWithRefinedError as I,getNetworkInstance as y}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as S,TransactionType as P}from"rango-types";async function m(e){let t=y(e,A.ETHEREUM),r=new S,{DefaultEvmSigner:E}=await I(async()=>await import("@rango-dev/signer-evm"));return r.registerSigner(P.EVM,new E(t)),r}n(m,"getSigners");import"@hub3js/evm";import{LegacyNetworks as l}from"@rango-dev/wallets-core/legacy";function i(){let{binancew3w:e}=window;if(!e)return null;let t=new Map;return e.ethereum&&t.set(l.ETHEREUM,e.ethereum),t.size===0?null:t}n(i,"binance");function p(){let e=i();if(!e)throw new Error("Binance Wallet is not injected. Please check your wallet.");return e}n(p,"getInstanceOrThrow");function c(){let t=i()?.get(l.ETHEREUM);if(!t)throw new Error("Binance not injected or EVM not enabled. Please check your wallet.");return t}n(c,"evmBinance");async function u(e){let[t]=await e.request({method:"eth_requestAccounts"}),r=await e.request({method:"eth_chainId"});return{accounts:[t],chainId:r}}n(u,"getEvmAccounts");var a="binance",T=[o.OPTIMISM,o.ETHEREUM,o.LINEA,o.METIS,o.BLAST,o.CELO,o.FANTOM,o.MONAD,o.SONIC,o.BERACHAIN,o.BASE,o.ZETA_CHAIN,o.ARBITRUM,o.BSC,o.SCROLL,o.AVAX_CCHAIN],f={name:"Binance Wallet",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/binance/icon.svg",extensions:{chrome:"https://chromewebstore.google.com/detail/binance-wallet/cadiboklkpojfamcoggejbbdjcoiljjk",brave:"https://chromewebstore.google.com/detail/binance-wallet/cadiboklkpojfamcoggejbbdjcoiljjk",homepage:"https://www.binance.com/binancewallet"},properties:[{name:"namespaces",value:{selection:"multiple",data:[{label:"EVM",value:"EVM",id:"ETH",getSupportedChains:e=>e.filter(t=>T.includes(t.name))}]}},{name:"signers",value:{getSigners:async()=>m(p())}}]};import{NamespaceBuilder as M}from"@hub3js/core";import{actions as d,builders as s,utils as k}from"@hub3js/evm";import*as g from"@hub3js/std/builders";import{standardizeAndThrowError as N}from"@hub3js/std/operators";var[j,w]=s.changeAccountSubscriber(c).format(async(e,t)=>{let r=await e.request({method:"eth_chainId"});return k.formatAccountsToCAIP([t[0]],r)}).build(),B=s.connect().action(d.connect(c,{getAccounts:u})).before(j).or(w).or(N).build(),C=g.disconnect().after(w).build(),L=s.canSwitchNetwork().action(d.canSwitchNetwork()).build(),x=s.getChainId().action(d.getChainId(c)).build(),h=new M("EVM",a).action(B).action(C).action(L).action(x).build();var b=n(()=>new R(a).init(function(e){let[,t]=e.state();i()&&(t("installed",!0),console.debug("[binance-wallet] instance detected.",e))}).config("metadata",f).add("evm",h).build(),"buildProvider");var pe=n(()=>_().version("1.0.0",b()).build(),"versions");export{pe as versions};
|
|
2
|
+
//# sourceMappingURL=mod.js.map
|
package/dist/mod.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/mod.ts", "../src/provider.ts", "../src/constants.ts", "../src/signer.ts", "../src/utils.ts", "../src/namespaces/evm.ts"],
|
|
4
|
+
"sourcesContent": ["import { defineVersions } from '@hub3js/core/utils';\n\nimport { buildProvider } from './provider.js';\n\nconst versions = () =>\n defineVersions().version('1.0.0', buildProvider()).build();\n\nexport { versions };\n", "import { ProviderBuilder } from '@hub3js/core';\n\nimport { metadata, WALLET_ID } from './constants.js';\nimport { evm } from './namespaces/evm.js';\nimport { binance as binanceInstance } from './utils.js';\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context) {\n const [, setState] = context.state();\n if (binanceInstance()) {\n setState('installed', true);\n console.debug('[binance-wallet] instance detected.', context);\n }\n })\n .config('metadata', metadata)\n .add('evm', evm)\n .build();\n\nexport { buildProvider };\n", "import type { ProviderMetadata } from '@hub3js/core';\n\nimport { LegacyNetworks } from '@rango-dev/wallets-core/legacy';\nimport { type BlockchainMeta } from 'rango-types';\n\nimport getSigners from './signer.js';\nimport { getInstanceOrThrow } from './utils.js';\n\nexport const WALLET_ID = 'binance';\nexport const EVM_SUPPORTED_CHAINS = [\n LegacyNetworks.OPTIMISM,\n LegacyNetworks.ETHEREUM,\n LegacyNetworks.LINEA,\n LegacyNetworks.METIS,\n LegacyNetworks.BLAST,\n LegacyNetworks.CELO,\n LegacyNetworks.FANTOM,\n LegacyNetworks.MONAD,\n LegacyNetworks.SONIC,\n LegacyNetworks.BERACHAIN,\n LegacyNetworks.BASE,\n LegacyNetworks.ZETA_CHAIN,\n LegacyNetworks.ARBITRUM,\n LegacyNetworks.BSC,\n LegacyNetworks.SCROLL,\n LegacyNetworks.AVAX_CCHAIN,\n];\n\nexport const metadata: ProviderMetadata = {\n name: 'Binance Wallet',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/binance/icon.svg',\n extensions: {\n chrome:\n 'https://chromewebstore.google.com/detail/binance-wallet/cadiboklkpojfamcoggejbbdjcoiljjk',\n brave:\n 'https://chromewebstore.google.com/detail/binance-wallet/cadiboklkpojfamcoggejbbdjcoiljjk',\n homepage: 'https://www.binance.com/binancewallet',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'multiple',\n data: [\n {\n label: 'EVM',\n value: 'EVM',\n id: 'ETH',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter((blockchainMeta) =>\n EVM_SUPPORTED_CHAINS.includes(\n blockchainMeta.name as LegacyNetworks\n )\n ),\n },\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners(getInstanceOrThrow()) },\n },\n ],\n};\n", "import type { Provider } from './types.js';\nimport type { SignerFactory } from 'rango-types';\n\nimport { LegacyNetworks as Networks } from '@rango-dev/wallets-core/legacy';\nimport {\n dynamicImportWithRefinedError,\n getNetworkInstance,\n} from '@rango-dev/wallets-shared';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nexport default async function getSigners(\n provider: Provider\n): Promise<SignerFactory> {\n const evmProvider = getNetworkInstance(provider, Networks.ETHEREUM);\n const signers = new DefaultSignerFactory();\n const { DefaultEvmSigner } = await dynamicImportWithRefinedError(\n async () => await import('@rango-dev/signer-evm')\n );\n signers.registerSigner(TxType.EVM, new DefaultEvmSigner(evmProvider));\n return signers;\n}\n", "import type { Provider } from './types.js';\n\nimport { type ProviderAPI as EvmProviderApi } from '@hub3js/evm';\nimport { LegacyNetworks } from '@rango-dev/wallets-core/legacy';\n\nexport function binance(): Provider | null {\n const { binancew3w } = window;\n\n if (!binancew3w) {\n return null;\n }\n\n const instances = new Map();\n if (binancew3w.ethereum) {\n instances.set(LegacyNetworks.ETHEREUM, binancew3w.ethereum);\n }\n\n if (instances.size === 0) {\n return null;\n }\n\n return instances;\n}\n\nexport function getInstanceOrThrow(): Provider {\n const instances = binance();\n\n if (!instances) {\n throw new Error(\n 'Binance Wallet is not injected. Please check your wallet.'\n );\n }\n\n return instances;\n}\n\nexport function evmBinance(): EvmProviderApi {\n const instances = binance();\n\n const evmInstance = instances?.get(LegacyNetworks.ETHEREUM);\n\n if (!evmInstance) {\n throw new Error(\n 'Binance not injected or EVM not enabled. Please check your wallet.'\n );\n }\n\n return evmInstance;\n}\n/**\n * * WORKAROUND 1: Binance Wallet Race Condition\n * Simultaneous calls to 'eth_chainId' and 'eth_requestAccounts' fail to return\n * a chainId. These must be executed sequentially to ensure both values resolve.\n */\nexport async function getEvmAccounts(provider: EvmProviderApi) {\n /**\n * * WORKAROUND 2: Account Indexing Consistency\n * Binance Wallet's `connect` returns a list where the currently selected account\n * is always the first item. We're directly taking this first item as the active account.\n *\n */\n const [account] = await provider.request({\n method: 'eth_requestAccounts',\n });\n const chainId = await provider.request({ method: 'eth_chainId' });\n\n return {\n accounts: [account],\n chainId,\n };\n}\n", "import type { EvmActions } from '@hub3js/evm';\n\nimport { NamespaceBuilder } from '@hub3js/core';\nimport { actions, builders, utils } from '@hub3js/evm';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\n\nimport { WALLET_ID } from '../constants.js';\nimport { evmBinance, getEvmAccounts } from '../utils.js';\n\nconst [changeAccountSubscriber, changeAccountCleanup] = builders\n .changeAccountSubscriber(evmBinance)\n /*\n * Binance returns an array of connected accounts with the active one first.\n * Since we only need the active account, we take the first element as a workaround.\n */\n .format(async (instance, accounts) => {\n const chainId = await instance.request({ method: 'eth_chainId' });\n return utils.formatAccountsToCAIP([accounts[0]], chainId);\n })\n .build();\n\nconst connect = builders\n .connect()\n .action(\n actions.connect(evmBinance, {\n getAccounts: getEvmAccounts,\n })\n )\n .before(changeAccountSubscriber)\n .or(changeAccountCleanup)\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders\n .disconnect<EvmActions>()\n .after(changeAccountCleanup)\n .build();\n\nconst canSwitchNetwork = builders\n .canSwitchNetwork()\n .action(actions.canSwitchNetwork())\n .build();\n\nconst getChainId = builders\n .getChainId()\n .action(actions.getChainId(evmBinance))\n .build();\n\nconst evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(canSwitchNetwork)\n .action(getChainId)\n .build();\n\nexport { evm };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["defineVersions", "ProviderBuilder", "LegacyNetworks", "Networks", "dynamicImportWithRefinedError", "getNetworkInstance", "DefaultSignerFactory", "TxType", "getSigners", "provider", "evmProvider", "getNetworkInstance", "Networks", "signers", "DefaultSignerFactory", "DefaultEvmSigner", "dynamicImportWithRefinedError", "TxType", "__name", "LegacyNetworks", "binance", "binancew3w", "instances", "LegacyNetworks", "__name", "getInstanceOrThrow", "evmBinance", "evmInstance", "getEvmAccounts", "provider", "account", "chainId", "WALLET_ID", "EVM_SUPPORTED_CHAINS", "LegacyNetworks", "metadata", "allBlockchains", "blockchainMeta", "getSigners", "getInstanceOrThrow", "NamespaceBuilder", "actions", "builders", "utils", "commonBuilders", "standardizeAndThrowError", "changeAccountSubscriber", "changeAccountCleanup", "builders", "evmBinance", "instance", "accounts", "chainId", "utils", "connect", "actions", "getEvmAccounts", "standardizeAndThrowError", "disconnect", "canSwitchNetwork", "getChainId", "evm", "NamespaceBuilder", "WALLET_ID", "buildProvider", "__name", "ProviderBuilder", "WALLET_ID", "context", "setState", "binance", "metadata", "evm", "versions", "__name", "defineVersions", "buildProvider"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../src/namespaces/evm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiD9C,QAAA,MAAM,GAAG,qDAKC,CAAC;AAEX,OAAO,EAAE,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"src/signer.ts":{"bytes":780,"imports":[{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils.ts":{"bytes":1762,"imports":[{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/constants.ts":{"bytes":1826,"imports":[{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signer.ts","kind":"import-statement","original":"./signer.js"},{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"}],"format":"esm"},"src/namespaces/evm.ts":{"bytes":1587,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"}],"format":"esm"},"src/provider.ts":{"bytes":590,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"./constants.js"},{"path":"src/namespaces/evm.ts","kind":"import-statement","original":"./namespaces/evm.js"},{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/mod.ts":{"bytes":209,"imports":[{"path":"@hub3js/core/utils","kind":"import-statement","external":true},{"path":"src/provider.ts","kind":"import-statement","original":"./provider.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/mod.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":11204},"dist/mod.js":{"imports":[{"path":"@hub3js/core/utils","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/signer-evm","kind":"dynamic-import","external":true},{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/legacy","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true}],"exports":["versions"],"entryPoint":"src/mod.ts","inputs":{"src/mod.ts":{"bytesInOutput":110},"src/provider.ts":{"bytesInOutput":244},"src/constants.ts":{"bytesInOutput":840},"src/signer.ts":{"bytesInOutput":421},"src/utils.ts":{"bytesInOutput":705},"src/namespaces/evm.ts":{"bytesInOutput":658}},"bytes":3113}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,aAAa,wFAWP,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/signer.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AASjD,wBAA8B,UAAU,CACtC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,aAAa,CAAC,CAQxB"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ProviderAPI as EvmProviderApi } from '@hub3js/evm';
|
|
2
|
+
import type { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
|
|
3
|
+
export type ProviderObject = {
|
|
4
|
+
[LegacyNetworks.ETHEREUM]: EvmProviderApi;
|
|
5
|
+
};
|
|
6
|
+
export type Provider = Map<keyof ProviderObject, ProviderObject[keyof ProviderObject]>;
|
|
7
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3C,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,GAAG,CACxB,MAAM,cAAc,EACpB,cAAc,CAAC,MAAM,cAAc,CAAC,CACrC,CAAC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Provider } from './types.js';
|
|
2
|
+
import { type ProviderAPI as EvmProviderApi } from '@hub3js/evm';
|
|
3
|
+
export declare function binance(): Provider | null;
|
|
4
|
+
export declare function getInstanceOrThrow(): Provider;
|
|
5
|
+
export declare function evmBinance(): EvmProviderApi;
|
|
6
|
+
/**
|
|
7
|
+
* * WORKAROUND 1: Binance Wallet Race Condition
|
|
8
|
+
* Simultaneous calls to 'eth_chainId' and 'eth_requestAccounts' fail to return
|
|
9
|
+
* a chainId. These must be executed sequentially to ensure both values resolve.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getEvmAccounts(provider: EvmProviderApi): Promise<{
|
|
12
|
+
accounts: `0x${string}`[];
|
|
13
|
+
chainId: `0x${string}`;
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,KAAK,WAAW,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AAGjE,wBAAgB,OAAO,IAAI,QAAQ,GAAG,IAAI,CAiBzC;AAED,wBAAgB,kBAAkB,IAAI,QAAQ,CAU7C;AAED,wBAAgB,UAAU,IAAI,cAAc,CAY3C;AACD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,cAAc;;;GAgB5D"}
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rango-dev/provider-binance",
|
|
3
|
+
"version": "0.0.0-experimental-82bcc5d9-20260608",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"source": "./src/mod.ts",
|
|
7
|
+
"main": "./dist/mod.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": "./dist/mod.js"
|
|
10
|
+
},
|
|
11
|
+
"typings": "dist/mod.d.ts",
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"src"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "node ../../scripts/build/command.mjs --path wallets/provider-binance --inputs src/mod.ts",
|
|
18
|
+
"ts-check": "tsc --declaration --emitDeclarationOnly -p ./tsconfig.json",
|
|
19
|
+
"clean": "rimraf dist",
|
|
20
|
+
"format": "prettier --write '{.,src}/**/*.{ts,tsx}'",
|
|
21
|
+
"lint": "eslint \"**/*.{ts,tsx}\""
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@hub3js/core": "^0.60.1",
|
|
25
|
+
"@hub3js/evm": "^0.2.1",
|
|
26
|
+
"@hub3js/std": "^0.1.1",
|
|
27
|
+
"@rango-dev/signer-evm": "^0.42.0",
|
|
28
|
+
"@rango-dev/wallets-core": "^0.0.0-experimental-82bcc5d9-20260608",
|
|
29
|
+
"@rango-dev/wallets-shared": "^0.0.0-experimental-82bcc5d9-20260608",
|
|
30
|
+
"rango-types": "^0.5.0"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
}
|
|
35
|
+
}
|
package/readme.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Binance Wallet
|
|
2
|
+
Binance Wallet integration for hub.
|
|
3
|
+
[Homepage](https://www.binance.com/en/binancewallet) | [Docs](https://developers.binance.com/docs/binance-w3w/introduction)
|
|
4
|
+
|
|
5
|
+
More about implementation status can be found [here](../readme.md).
|
|
6
|
+
|
|
7
|
+
## Implementation notes/limitations
|
|
8
|
+
|
|
9
|
+
### Group
|
|
10
|
+
|
|
11
|
+
#### EVM
|
|
12
|
+
Binance Wallet supports following EVM chains:
|
|
13
|
+
|
|
14
|
+
- `ETHEREUM`
|
|
15
|
+
- `OPTIMISM`
|
|
16
|
+
- `LINEA`
|
|
17
|
+
- `METIS`
|
|
18
|
+
- `BLAST`
|
|
19
|
+
- `CELO`
|
|
20
|
+
- `FANTOM`
|
|
21
|
+
- `MONAD`
|
|
22
|
+
- `SONIC`
|
|
23
|
+
- `BERACHAIN`
|
|
24
|
+
- `BASE`
|
|
25
|
+
- `ZETA_CHAIN`
|
|
26
|
+
- `ARBITRUM`
|
|
27
|
+
- `BSC`
|
|
28
|
+
- `SCROLL`
|
|
29
|
+
- `AVAX_CCHAIN`
|
|
30
|
+
|
|
31
|
+
### Feature
|
|
32
|
+
|
|
33
|
+
#### ❌ Auto Connect
|
|
34
|
+
Binance Wallet does **not provide a functional eager-connect (silent connect) mechanism**.
|
|
35
|
+
|
|
36
|
+
All other supported features—connect, switch account, signing, and network handling—work without known issues.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
More wallet information can be found in [readme.md](../readme.md).
|
package/src/constants.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ProviderMetadata } from '@hub3js/core';
|
|
2
|
+
|
|
3
|
+
import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
|
|
4
|
+
import { type BlockchainMeta } from 'rango-types';
|
|
5
|
+
|
|
6
|
+
import getSigners from './signer.js';
|
|
7
|
+
import { getInstanceOrThrow } from './utils.js';
|
|
8
|
+
|
|
9
|
+
export const WALLET_ID = 'binance';
|
|
10
|
+
export const EVM_SUPPORTED_CHAINS = [
|
|
11
|
+
LegacyNetworks.OPTIMISM,
|
|
12
|
+
LegacyNetworks.ETHEREUM,
|
|
13
|
+
LegacyNetworks.LINEA,
|
|
14
|
+
LegacyNetworks.METIS,
|
|
15
|
+
LegacyNetworks.BLAST,
|
|
16
|
+
LegacyNetworks.CELO,
|
|
17
|
+
LegacyNetworks.FANTOM,
|
|
18
|
+
LegacyNetworks.MONAD,
|
|
19
|
+
LegacyNetworks.SONIC,
|
|
20
|
+
LegacyNetworks.BERACHAIN,
|
|
21
|
+
LegacyNetworks.BASE,
|
|
22
|
+
LegacyNetworks.ZETA_CHAIN,
|
|
23
|
+
LegacyNetworks.ARBITRUM,
|
|
24
|
+
LegacyNetworks.BSC,
|
|
25
|
+
LegacyNetworks.SCROLL,
|
|
26
|
+
LegacyNetworks.AVAX_CCHAIN,
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
export const metadata: ProviderMetadata = {
|
|
30
|
+
name: 'Binance Wallet',
|
|
31
|
+
icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/binance/icon.svg',
|
|
32
|
+
extensions: {
|
|
33
|
+
chrome:
|
|
34
|
+
'https://chromewebstore.google.com/detail/binance-wallet/cadiboklkpojfamcoggejbbdjcoiljjk',
|
|
35
|
+
brave:
|
|
36
|
+
'https://chromewebstore.google.com/detail/binance-wallet/cadiboklkpojfamcoggejbbdjcoiljjk',
|
|
37
|
+
homepage: 'https://www.binance.com/binancewallet',
|
|
38
|
+
},
|
|
39
|
+
properties: [
|
|
40
|
+
{
|
|
41
|
+
name: 'namespaces',
|
|
42
|
+
value: {
|
|
43
|
+
selection: 'multiple',
|
|
44
|
+
data: [
|
|
45
|
+
{
|
|
46
|
+
label: 'EVM',
|
|
47
|
+
value: 'EVM',
|
|
48
|
+
id: 'ETH',
|
|
49
|
+
getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
|
|
50
|
+
allBlockchains.filter((blockchainMeta) =>
|
|
51
|
+
EVM_SUPPORTED_CHAINS.includes(
|
|
52
|
+
blockchainMeta.name as LegacyNetworks
|
|
53
|
+
)
|
|
54
|
+
),
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'signers',
|
|
61
|
+
value: { getSigners: async () => getSigners(getInstanceOrThrow()) },
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
};
|
package/src/mod.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { EvmActions } from '@hub3js/evm';
|
|
2
|
+
|
|
3
|
+
import { NamespaceBuilder } from '@hub3js/core';
|
|
4
|
+
import { actions, builders, utils } from '@hub3js/evm';
|
|
5
|
+
import * as commonBuilders from '@hub3js/std/builders';
|
|
6
|
+
import { standardizeAndThrowError } from '@hub3js/std/operators';
|
|
7
|
+
|
|
8
|
+
import { WALLET_ID } from '../constants.js';
|
|
9
|
+
import { evmBinance, getEvmAccounts } from '../utils.js';
|
|
10
|
+
|
|
11
|
+
const [changeAccountSubscriber, changeAccountCleanup] = builders
|
|
12
|
+
.changeAccountSubscriber(evmBinance)
|
|
13
|
+
/*
|
|
14
|
+
* Binance returns an array of connected accounts with the active one first.
|
|
15
|
+
* Since we only need the active account, we take the first element as a workaround.
|
|
16
|
+
*/
|
|
17
|
+
.format(async (instance, accounts) => {
|
|
18
|
+
const chainId = await instance.request({ method: 'eth_chainId' });
|
|
19
|
+
return utils.formatAccountsToCAIP([accounts[0]], chainId);
|
|
20
|
+
})
|
|
21
|
+
.build();
|
|
22
|
+
|
|
23
|
+
const connect = builders
|
|
24
|
+
.connect()
|
|
25
|
+
.action(
|
|
26
|
+
actions.connect(evmBinance, {
|
|
27
|
+
getAccounts: getEvmAccounts,
|
|
28
|
+
})
|
|
29
|
+
)
|
|
30
|
+
.before(changeAccountSubscriber)
|
|
31
|
+
.or(changeAccountCleanup)
|
|
32
|
+
.or(standardizeAndThrowError)
|
|
33
|
+
.build();
|
|
34
|
+
|
|
35
|
+
const disconnect = commonBuilders
|
|
36
|
+
.disconnect<EvmActions>()
|
|
37
|
+
.after(changeAccountCleanup)
|
|
38
|
+
.build();
|
|
39
|
+
|
|
40
|
+
const canSwitchNetwork = builders
|
|
41
|
+
.canSwitchNetwork()
|
|
42
|
+
.action(actions.canSwitchNetwork())
|
|
43
|
+
.build();
|
|
44
|
+
|
|
45
|
+
const getChainId = builders
|
|
46
|
+
.getChainId()
|
|
47
|
+
.action(actions.getChainId(evmBinance))
|
|
48
|
+
.build();
|
|
49
|
+
|
|
50
|
+
const evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)
|
|
51
|
+
.action(connect)
|
|
52
|
+
.action(disconnect)
|
|
53
|
+
.action(canSwitchNetwork)
|
|
54
|
+
.action(getChainId)
|
|
55
|
+
.build();
|
|
56
|
+
|
|
57
|
+
export { evm };
|
package/src/provider.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ProviderBuilder } from '@hub3js/core';
|
|
2
|
+
|
|
3
|
+
import { metadata, WALLET_ID } from './constants.js';
|
|
4
|
+
import { evm } from './namespaces/evm.js';
|
|
5
|
+
import { binance as binanceInstance } from './utils.js';
|
|
6
|
+
|
|
7
|
+
const buildProvider = () =>
|
|
8
|
+
new ProviderBuilder(WALLET_ID)
|
|
9
|
+
.init(function (context) {
|
|
10
|
+
const [, setState] = context.state();
|
|
11
|
+
if (binanceInstance()) {
|
|
12
|
+
setState('installed', true);
|
|
13
|
+
console.debug('[binance-wallet] instance detected.', context);
|
|
14
|
+
}
|
|
15
|
+
})
|
|
16
|
+
.config('metadata', metadata)
|
|
17
|
+
.add('evm', evm)
|
|
18
|
+
.build();
|
|
19
|
+
|
|
20
|
+
export { buildProvider };
|
package/src/signer.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Provider } from './types.js';
|
|
2
|
+
import type { SignerFactory } from 'rango-types';
|
|
3
|
+
|
|
4
|
+
import { LegacyNetworks as Networks } from '@rango-dev/wallets-core/legacy';
|
|
5
|
+
import {
|
|
6
|
+
dynamicImportWithRefinedError,
|
|
7
|
+
getNetworkInstance,
|
|
8
|
+
} from '@rango-dev/wallets-shared';
|
|
9
|
+
import { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';
|
|
10
|
+
|
|
11
|
+
export default async function getSigners(
|
|
12
|
+
provider: Provider
|
|
13
|
+
): Promise<SignerFactory> {
|
|
14
|
+
const evmProvider = getNetworkInstance(provider, Networks.ETHEREUM);
|
|
15
|
+
const signers = new DefaultSignerFactory();
|
|
16
|
+
const { DefaultEvmSigner } = await dynamicImportWithRefinedError(
|
|
17
|
+
async () => await import('@rango-dev/signer-evm')
|
|
18
|
+
);
|
|
19
|
+
signers.registerSigner(TxType.EVM, new DefaultEvmSigner(evmProvider));
|
|
20
|
+
return signers;
|
|
21
|
+
}
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ProviderAPI as EvmProviderApi } from '@hub3js/evm';
|
|
2
|
+
import type { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
|
|
3
|
+
|
|
4
|
+
export type ProviderObject = {
|
|
5
|
+
[LegacyNetworks.ETHEREUM]: EvmProviderApi;
|
|
6
|
+
};
|
|
7
|
+
export type Provider = Map<
|
|
8
|
+
keyof ProviderObject,
|
|
9
|
+
ProviderObject[keyof ProviderObject]
|
|
10
|
+
>;
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Provider } from './types.js';
|
|
2
|
+
|
|
3
|
+
import { type ProviderAPI as EvmProviderApi } from '@hub3js/evm';
|
|
4
|
+
import { LegacyNetworks } from '@rango-dev/wallets-core/legacy';
|
|
5
|
+
|
|
6
|
+
export function binance(): Provider | null {
|
|
7
|
+
const { binancew3w } = window;
|
|
8
|
+
|
|
9
|
+
if (!binancew3w) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const instances = new Map();
|
|
14
|
+
if (binancew3w.ethereum) {
|
|
15
|
+
instances.set(LegacyNetworks.ETHEREUM, binancew3w.ethereum);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (instances.size === 0) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return instances;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function getInstanceOrThrow(): Provider {
|
|
26
|
+
const instances = binance();
|
|
27
|
+
|
|
28
|
+
if (!instances) {
|
|
29
|
+
throw new Error(
|
|
30
|
+
'Binance Wallet is not injected. Please check your wallet.'
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return instances;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function evmBinance(): EvmProviderApi {
|
|
38
|
+
const instances = binance();
|
|
39
|
+
|
|
40
|
+
const evmInstance = instances?.get(LegacyNetworks.ETHEREUM);
|
|
41
|
+
|
|
42
|
+
if (!evmInstance) {
|
|
43
|
+
throw new Error(
|
|
44
|
+
'Binance not injected or EVM not enabled. Please check your wallet.'
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return evmInstance;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* * WORKAROUND 1: Binance Wallet Race Condition
|
|
52
|
+
* Simultaneous calls to 'eth_chainId' and 'eth_requestAccounts' fail to return
|
|
53
|
+
* a chainId. These must be executed sequentially to ensure both values resolve.
|
|
54
|
+
*/
|
|
55
|
+
export async function getEvmAccounts(provider: EvmProviderApi) {
|
|
56
|
+
/**
|
|
57
|
+
* * WORKAROUND 2: Account Indexing Consistency
|
|
58
|
+
* Binance Wallet's `connect` returns a list where the currently selected account
|
|
59
|
+
* is always the first item. We're directly taking this first item as the active account.
|
|
60
|
+
*
|
|
61
|
+
*/
|
|
62
|
+
const [account] = await provider.request({
|
|
63
|
+
method: 'eth_requestAccounts',
|
|
64
|
+
});
|
|
65
|
+
const chainId = await provider.request({ method: 'eth_chainId' });
|
|
66
|
+
|
|
67
|
+
return {
|
|
68
|
+
accounts: [account],
|
|
69
|
+
chainId,
|
|
70
|
+
};
|
|
71
|
+
}
|