@orderly.network/default-evm-adapter
Version:
1 lines • 19.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/version.ts","../src/walletAdapter.ts","../src/helper.ts"],"sourcesContent":["declare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@orderly.network/default-evm-adapter\"] = \"2.8.12\";\n}\n\nexport default \"2.8.12\";\n","import * as ed from \"@noble/ed25519\";\nimport { encode as bs58encode, decode as bs58Decode } from \"bs58\";\nimport {\n AddOrderlyKeyInputs,\n BaseWalletAdapter,\n IContract,\n Message,\n RegisterAccountInputs,\n SettleInputs,\n SignatureDomain,\n InternalTransferInputs,\n WithdrawInputs,\n DexRequestInputs,\n} from \"@orderly.network/core\";\nimport { API, ChainNamespace } from \"@orderly.network/types\";\nimport {\n addOrderlyKeyMessage,\n registerAccountMessage,\n settleMessage,\n internalTransferMessage,\n withdrawMessage,\n dexRequestMessage,\n} from \"./helper\";\nimport type { Web3Provider } from \"./provider/web3Provider.interface\";\nimport { EVMAdapterOptions } from \"./types\";\n\nclass DefaultEVMWalletAdapter extends BaseWalletAdapter<EVMAdapterOptions> {\n chainNamespace: ChainNamespace = ChainNamespace.evm;\n private _address!: string;\n private _chainId!: number;\n private contractManager!: IContract;\n\n constructor(private readonly web3Provider: Web3Provider) {\n super();\n }\n\n get address(): string {\n return this._address;\n }\n\n get chainId(): number {\n return this._chainId;\n }\n\n set chainId(chainId: number) {\n this._chainId = chainId;\n }\n\n private setConfig(config: EVMAdapterOptions): void {\n this._address = config.address;\n this._chainId = config.chain.id;\n\n if (config.provider) {\n this.web3Provider.provider = config.provider;\n }\n\n if (config.contractManager) {\n this.contractManager = config.contractManager;\n } else {\n throw new Error(\"Please provide contract manager class\");\n }\n }\n\n active(config: EVMAdapterOptions): void {\n this.setConfig(config);\n this.lifecycleName(\"active\", config);\n }\n\n deactivate(): void {\n this.lifecycleName(\"deactivate\", {});\n }\n\n update(config: EVMAdapterOptions): void {\n this.lifecycleName(\"update\", config);\n this.setConfig(config);\n }\n\n generateSecretKey(): string {\n let privKey, secretKey;\n do {\n privKey = ed.utils.randomPrivateKey();\n secretKey = bs58encode(privKey);\n } while (secretKey.length !== 44);\n\n return secretKey;\n }\n\n private lifecycleName(name: string, data: any) {\n console.log(\"lifecycle\", name, data);\n }\n\n private async signTypedData(toSignatureMessage: Record<string, any>) {\n console.log(\"toSignatureMessage\", this.address);\n return await this.web3Provider.signTypedData(\n // address,\n this.address,\n // toSignatureMessage\n JSON.stringify(toSignatureMessage),\n );\n }\n\n async generateRegisterAccountMessage(\n inputs: RegisterAccountInputs,\n ): Promise<Message> {\n const [message, toSignatureMessage] = await registerAccountMessage({\n ...inputs,\n\n chainId: this.chainId,\n domain: this.getDomain(),\n });\n\n const signedMessage = await this.signTypedData(toSignatureMessage);\n\n return {\n message: {\n ...message,\n chainType: \"EVM\",\n },\n signatured: signedMessage,\n };\n }\n\n async generateAddOrderlyKeyMessage(\n inputs: AddOrderlyKeyInputs,\n ): Promise<Message> {\n const [message, toSignatureMessage] = await addOrderlyKeyMessage({\n ...inputs,\n chainId: this.chainId,\n domain: this.getDomain(),\n });\n\n const signedMessage = await this.signTypedData(toSignatureMessage);\n\n return {\n message: {\n ...message,\n chainType: \"EVM\",\n },\n signatured: signedMessage,\n };\n }\n\n async generateWithdrawMessage(inputs: WithdrawInputs): Promise<\n Message & {\n domain: SignatureDomain;\n }\n > {\n // const { chainId, receiver, token, amount, nonce, brokerId, timestamp } = inputs;\n const domain = this.getDomain(true);\n\n const [message, toSignatureMessage] = await withdrawMessage({\n ...inputs,\n chainId: this.chainId,\n domain,\n });\n\n const signedMessage = await this.signTypedData(toSignatureMessage);\n\n return {\n message: {\n ...message,\n chainType: \"EVM\",\n },\n signatured: signedMessage,\n domain,\n };\n }\n\n async generateInternalTransferMessage(\n inputs: InternalTransferInputs,\n ): Promise<\n Message & {\n domain: SignatureDomain;\n }\n > {\n const domain = this.getDomain(true);\n\n const [message, toSignatureMessage] = await internalTransferMessage({\n ...inputs,\n chainId: this.chainId,\n domain,\n });\n\n const signedMessage = await this.signTypedData(toSignatureMessage);\n\n return {\n message: {\n ...message,\n chainType: \"EVM\",\n },\n signatured: signedMessage,\n domain,\n };\n }\n\n async generateSettleMessage(inputs: SettleInputs): Promise<\n Message & {\n domain: SignatureDomain;\n }\n > {\n const domain = this.getDomain(true);\n const [message, toSignatureMessage] = await settleMessage({\n ...inputs,\n chainId: this.chainId,\n domain,\n });\n\n const signedMessage = await this.signTypedData(toSignatureMessage);\n\n return {\n message: {\n ...message,\n chainType: \"EVM\",\n },\n signatured: signedMessage,\n domain,\n };\n }\n\n async generateDexRequestMessage(inputs: DexRequestInputs): Promise<\n Message & {\n domain: SignatureDomain;\n }\n > {\n const [message, toSignatureMessage] = await dexRequestMessage({\n ...inputs,\n chainId: this.chainId,\n });\n\n const signedMessage = await this.signTypedData(toSignatureMessage);\n\n return {\n message: {\n ...message,\n chainType: \"EVM\",\n },\n signatured: signedMessage,\n domain: inputs.domain,\n };\n }\n\n getBalance(): Promise<bigint> {\n return this.web3Provider.getBalance(this.address);\n }\n\n call(\n address: string,\n method: string,\n params: any[],\n options?: { abi: any },\n ): Promise<any> {\n return this.web3Provider.call(address, method, params, options);\n }\n\n sendTransaction(\n contractAddress: string,\n method: string,\n payload: {\n from: string;\n to?: string;\n data: any[];\n value?: bigint;\n },\n options: {\n abi: any;\n },\n ): Promise<any> {\n return this.web3Provider.sendTransaction(\n contractAddress,\n method,\n payload,\n options,\n );\n }\n\n callOnChain(\n chain: API.NetworkInfos,\n address: string,\n method: string,\n params: any[],\n options: { abi: any },\n ): Promise<any> {\n return this.web3Provider.callOnChain(\n chain,\n address,\n method,\n params,\n options,\n );\n }\n\n getDomain(onChainDomain?: boolean): SignatureDomain {\n if (!this.web3Provider) {\n throw new Error(\"web3Provider is undefined\");\n }\n const chainId = this.chainId;\n\n // const {verifyContractAddress} = this.contract.getContractInfoByEnv();\n return {\n name: \"Orderly\",\n version: \"1\",\n chainId,\n verifyingContract: onChainDomain\n ? this.contractManager.getContractInfoByEnv().verifyContractAddress\n : \"0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC\",\n };\n }\n\n pollTransactionReceiptWithBackoff(\n txHash: string,\n baseInterval?: number,\n maxInterval?: number,\n maxRetries?: number,\n ): Promise<any> {\n return this.web3Provider.pollTransactionReceiptWithBackoff(\n txHash,\n baseInterval,\n maxInterval,\n maxRetries,\n );\n }\n}\n\nexport { DefaultEVMWalletAdapter };\n","import type {\n AddOrderlyKeyInputs,\n RegisterAccountInputs,\n SettleInputs,\n SignatureDomain,\n WithdrawInputs,\n DexRequestInputs,\n InternalTransferInputs,\n} from \"@orderly.network/core\";\nimport { DEFAUL_ORDERLY_KEY_SCOPE, definedTypes } from \"@orderly.network/types\";\n\nexport async function withdrawMessage(\n inputs: WithdrawInputs & {\n domain: SignatureDomain;\n chainId: number;\n },\n) {\n const { chainId, receiver, token, amount, nonce, brokerId, domain } = inputs;\n // const domain = getDomain(chainId,true);\n\n const primaryType = \"Withdraw\";\n const timestamp = Date.now();\n\n const typeDefinition = {\n EIP712Domain: definedTypes.EIP712Domain,\n [primaryType]: definedTypes[primaryType],\n };\n\n const message = {\n brokerId,\n chainId,\n receiver,\n token,\n amount,\n timestamp,\n withdrawNonce: nonce,\n };\n\n const toSignatureMessage = {\n domain,\n message,\n primaryType,\n types: typeDefinition,\n };\n\n return [message, toSignatureMessage] as const;\n}\n\nexport async function internalTransferMessage(\n inputs: InternalTransferInputs & {\n domain: SignatureDomain;\n chainId: number;\n },\n) {\n const { chainId, receiver, token, amount, nonce, domain } = inputs;\n\n const primaryType = \"InternalTransfer\";\n\n const typeDefinition = {\n EIP712Domain: definedTypes.EIP712Domain,\n [primaryType]: definedTypes[primaryType],\n };\n\n const message = {\n chainId,\n receiver,\n token,\n amount,\n transferNonce: nonce,\n };\n\n const toSignatureMessage = {\n domain,\n message,\n primaryType,\n types: typeDefinition,\n };\n\n return [message, toSignatureMessage] as const;\n}\n\nexport async function addOrderlyKeyMessage(\n inputs: AddOrderlyKeyInputs & {\n domain: SignatureDomain;\n chainId: number;\n // chainType: ChainType;\n },\n) {\n const {\n publicKey,\n chainId,\n // primaryType,\n brokerId,\n expiration = 365,\n timestamp = Date.now(),\n scope,\n tag,\n domain,\n subAccountId,\n } = inputs;\n // const now = Date.now();\n // message;\n // const chainId = this.chainId;\n const primaryType = \"AddOrderlyKey\";\n const message = {\n brokerId,\n orderlyKey: publicKey,\n scope: scope || DEFAUL_ORDERLY_KEY_SCOPE,\n chainId,\n timestamp,\n // chainType,\n expiration: timestamp + 1000 * 60 * 60 * 24 * expiration,\n ...(typeof tag !== \"undefined\" ? { tag } : {}),\n ...(typeof subAccountId !== \"undefined\" ? { subAccountId } : {}),\n };\n\n const typeDefinition = {\n EIP712Domain: definedTypes.EIP712Domain,\n [primaryType]: definedTypes[primaryType],\n };\n\n const toSignatureMessage = {\n domain,\n message,\n primaryType,\n types: typeDefinition,\n };\n\n return [message, toSignatureMessage] as const;\n}\n\n/**\n * generate `registerAccount` data and to be signed message structure\n */\n\nexport async function registerAccountMessage(\n inputs: RegisterAccountInputs & {\n domain: SignatureDomain;\n chainId: number;\n },\n) {\n const { chainId, domain, registrationNonce, brokerId, timestamp } = inputs;\n // const chainId = this.chainId;\n // const now = Date.now();\n const primaryType = \"Registration\";\n const message = {\n brokerId,\n chainId,\n timestamp,\n registrationNonce,\n };\n\n const typeDefinition = {\n EIP712Domain: definedTypes.EIP712Domain,\n [primaryType]: definedTypes[primaryType],\n };\n\n const toSignatureMessage = {\n domain,\n message,\n primaryType,\n types: typeDefinition,\n };\n\n return [message, toSignatureMessage] as const;\n}\n\nexport async function settleMessage(\n inputs: SettleInputs & {\n domain: SignatureDomain;\n chainId: number;\n },\n) {\n const { settlePnlNonce, brokerId, chainId, timestamp, domain } = inputs;\n\n const primaryType = \"SettlePnl\";\n\n const typeDefinition = {\n EIP712Domain: definedTypes.EIP712Domain,\n [primaryType]: definedTypes[primaryType],\n };\n\n const message = {\n brokerId,\n chainId: chainId,\n timestamp: timestamp,\n settleNonce: settlePnlNonce,\n };\n\n const toSignatureMessage = {\n domain,\n message,\n primaryType,\n types: typeDefinition,\n };\n\n return [message, toSignatureMessage] as const;\n}\n\nexport async function dexRequestMessage(\n inputs: DexRequestInputs & {\n domain: SignatureDomain;\n chainId: number;\n },\n) {\n const {\n payloadType,\n nonce,\n receiver,\n amount,\n vaultId,\n token,\n dexBrokerId,\n domain,\n } = inputs;\n\n const primaryType = \"DexRequest\";\n\n const typeDefinition = {\n EIP712Domain: definedTypes.EIP712Domain,\n [primaryType]: definedTypes[primaryType],\n };\n\n const message = {\n payloadType,\n nonce,\n receiver,\n amount,\n vaultId,\n token,\n dexBrokerId,\n };\n\n const toSignatureMessage = {\n domain,\n message,\n primaryType,\n types: typeDefinition,\n };\n\n return [message, toSignatureMessage] as const;\n}\n"],"mappings":"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","names":[]}