@roochnetwork/rooch-sdk-kit
Version:
Rooch SDK Kit
136 lines (132 loc) • 5.05 kB
JavaScript
// src/wallet/okx.ts
import { BitcoinAddress as BitcoinAddress2, str, bytes } from "@roochnetwork/rooch-sdk";
// src/wallet/wallet.ts
import { Signer } from "@roochnetwork/rooch-sdk";
var Wallet = class extends Signer {
/**
* Checks if the wallet is installed.
* @returns A promise that resolves to true if the wallet is installed, otherwise false.
*/
async checkInstalled() {
for (let i = 1; i < 10 && !this.getTarget(); i += 1) {
await new Promise((resolve) => setTimeout(resolve, 100 * i));
}
return Promise.resolve(this.getTarget() !== void 0);
}
};
// src/wallet/bitcoin.ts
import {
Authenticator,
BitcoinSignMessage,
Secp256k1PublicKey,
fromHEX
} from "@roochnetwork/rooch-sdk";
var BitcoinWallet = class extends Wallet {
async signTransaction(input) {
const message = new BitcoinSignMessage(input.hashData(), input.getInfo() || "");
return Authenticator.bitcoin(message, this, "raw");
}
getPublicKey() {
if (!this.publicKey) {
throw Error("Please connect your wallet first");
}
return new Secp256k1PublicKey(fromHEX(this.publicKey));
}
getRoochAddress() {
if (!this.currentAddress) {
throw Error("Please connect your wallet first");
}
return this.currentAddress.genRoochAddress();
}
getBitcoinAddress() {
if (!this.currentAddress) {
throw Error("Please connect your wallet first");
}
return this.currentAddress;
}
getKeyScheme() {
return "Secp256k1";
}
normalize_recovery_id(v) {
let normalizeV = v - 27 - 4;
if (normalizeV < 0) {
normalizeV = normalizeV + 4;
}
return normalizeV;
}
switchAccount() {
throw new Error("Method not implemented.");
}
getChain() {
return "bitcoin";
}
};
// src/wallet/okx.ts
var OkxWallet = class extends BitcoinWallet {
getName() {
return "OKX";
}
getIcon(_) {
return "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIGlkPSJhIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNTAgMTUwIj48ZGVmcz48c3R5bGU+LmV7ZmlsbDpub25lO308L3N0eWxlPjwvZGVmcz48ZyBpZD0iYiI+PGcgaWQ9ImMiPjxwYXRoIGlkPSJkIiBjbGFzcz0iZSIgZD0iTTAsMEgxNTBWMTUwSDBWMFoiLz48L2c+PC9nPjxwYXRoIGQ9Ik0xMy44MSwxMy41N3YxMjMuOThoMTIzLjk4VjEzLjU3SDEzLjgxWm0yNi44MiwyOC42NGMwLS44NywuNzEtMS41OCwxLjU4LTEuNThoMjAuM2MuODcsMCwxLjU4LC43MSwxLjU4LDEuNTh2MjAuM2MwLC44OC0uNzEsMS41OS0xLjU4LDEuNTloLTIwLjNjLS44NywwLTEuNTgtLjcxLTEuNTgtMS41OXYtMjAuM1ptMjMuNDYsNjYuN2MwLC44Ny0uNzEsMS41OC0xLjU4LDEuNThoLTIwLjNjLS44NywwLTEuNTgtLjcxLTEuNTgtMS41OHYtMjAuM2MwLS44OCwuNzEtMS41OSwxLjU4LTEuNTloMjAuM2MuODcsMCwxLjU4LC43MSwxLjU4LDEuNTl2MjAuM1ptMjEuODYtMjEuNjJoLTIwLjNjLS44NywwLTEuNTktLjcxLTEuNTktMS41OXYtMjAuM2MwLS44NywuNzEtMS41OSwxLjU5LTEuNTloMjAuM2MuODcsMCwxLjU5LC43MSwxLjU5LDEuNTl2MjAuM2MwLC44Ny0uNzEsMS41OS0xLjU5LDEuNTlabTI1LjA1LDIxLjYyYzAsLjg3LS43MSwxLjU4LTEuNTksMS41OGgtMjAuM2MtLjg3LDAtMS41OC0uNzEtMS41OC0xLjU4di0yMC4zYzAtLjg4LC43MS0xLjU5LDEuNTgtMS41OWgyMC4zYy44NywwLDEuNTksLjcxLDEuNTksMS41OXYyMC4zWm0wLTQ2LjQxYzAsLjg4LS43MSwxLjU5LTEuNTksMS41OWgtMjAuM2MtLjg3LDAtMS41OC0uNzEtMS41OC0xLjU5di0yMC4zYzAtLjg3LC43MS0xLjU4LDEuNTgtMS41OGgyMC4zYy44NywwLDEuNTksLjcxLDEuNTksMS41OHYyMC4zWiIvPjwvc3ZnPg==";
}
getDescription() {
return "OKX Wallet";
}
getInstallUrl() {
return "https://chromewebstore.google.com/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge";
}
async sign(msg) {
const msgStr = str("utf8", msg);
const sign = await this.getTarget().signMessage(msgStr, {
from: this.currentAddress?.toStr()
});
return bytes("base64", sign).subarray(1);
}
getTarget() {
return window.okxwallet?.bitcoin;
}
// BUG: If the wallet is locked, no reply will be received
// TODO: Use timeout fix ?
async connect() {
const timeoutPromise = new Promise(
(_, reject) => setTimeout(() => reject(new Error("Connection timed out")), 2e4)
);
const obj = await Promise.race([this.getTarget().connect(), timeoutPromise]);
this.currentAddress = new BitcoinAddress2(obj.address);
this.publicKey = obj.compressedPublicKey !== "" ? obj.compressedPublicKey : obj.publicKey;
this.address = [this.currentAddress];
return this.address;
}
switchNetwork(_) {
throw Error("okx not support switch network!");
}
getNetwork() {
return this.getTarget().getNetwork();
}
getSupportNetworks() {
return ["livenet"];
}
onAccountsChanged(callback) {
this.getTarget().on("accountsChanged", callback);
}
removeAccountsChanged(callback) {
this.getTarget().removeListener("accountsChanged", callback);
}
onNetworkChanged(callback) {
this.getTarget().on("networkChanged", callback);
}
removeNetworkChanged(callback) {
this.getTarget().removeListener("networkChanged", callback);
}
// TODO: okx not support test btc
sendBtc(input) {
return this.getTarget().sendBitcoin(input.toAddress, input.satoshis, input.options);
}
getBalance() {
return this.getTarget().getBalance();
}
};
export {
OkxWallet
};
//# sourceMappingURL=okx.js.map