UNPKG

dotbit

Version:

A complete .bit SDK and utilities in TypeScript

94 lines 4.17 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { hexlify, toUtf8Bytes } from 'ethers'; import { SIGN_TYPE, EvmChainId2CoinType } from '../const'; import { BitErrorCode, DotbitError } from '../errors/DotbitError'; import { BitSigner } from './BitSigner'; import { mmJsonHashAndChainIdHex } from '../tools/common'; export class EvmSigner extends BitSigner { signTypedData(data) { return __awaiter(this, void 0, void 0, function* () { var _a; const _data = JSON.parse(JSON.stringify(data)); (_a = _data === null || _data === void 0 ? void 0 : _data.types) === null || _a === void 0 ? true : delete _a.EIP712Domain; return yield this.signer.signTypedData(_data.domain, _data.types, _data.message); }); } sendTransaction(sendTransactionParam) { return __awaiter(this, void 0, void 0, function* () { const _data = hexlify(toUtf8Bytes(sendTransactionParam.data)); const { hash } = yield this.signer.sendTransaction({ to: sendTransactionParam.to, value: BigInt(sendTransactionParam.value), data: _data }); return hash; }); } signPersonal(data) { return this.signer.signMessage(data); } getAddress() { return __awaiter(this, void 0, void 0, function* () { return yield this.signer.getAddress(); }); } getChainId() { return __awaiter(this, void 0, void 0, function* () { var _a; const network = yield ((_a = this.signer.provider) === null || _a === void 0 ? void 0 : _a.getNetwork()); return Number(network === null || network === void 0 ? void 0 : network.chainId); }); } getCoinType() { return __awaiter(this, void 0, void 0, function* () { const chainId = yield this.getChainId(); const coinType = EvmChainId2CoinType[chainId]; if (!coinType) { throw new DotbitError(`Unsupported EVM chainId: ${chainId}`, BitErrorCode.UnsupportedEVMChainId); } return coinType; }); } signData(data, isEIP712) { return __awaiter(this, void 0, void 0, function* () { if (isEIP712) { return yield this.signTypedData(data); } else { return yield this.signPersonal(data); } }); } signTxList(txs) { return __awaiter(this, void 0, void 0, function* () { for (const signItem of txs.sign_list) { if (signItem.sign_msg === '' || signItem.sign_type === SIGN_TYPE.noSign) { continue; } if (signItem.sign_type === SIGN_TYPE.eth712 && !!txs.mm_json) { const mmJson = JSON.parse(JSON.stringify(txs.mm_json)); mmJson.message.digest = signItem.sign_msg; const signDataRes = yield this.signData(mmJson, true); if (signDataRes && mmJson.domain.chainId) { signItem.sign_msg = signDataRes + mmJsonHashAndChainIdHex(mmJson, mmJson.domain.chainId); } } else { signItem.sign_msg = yield this.signData(signItem.sign_msg); } } delete txs.mm_json; delete txs.list; return txs; }); } } //# sourceMappingURL=EvmSigner.js.map