UNPKG

@infibridge/celo-sdk-base

Version:

EthersJS wrapper for Celo Blockchain. Based on https://github.com/celo-tools/celo-ethers-wrapper with small modifications.

98 lines 8.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CeloEthersWallet = void 0; const ethers_1 = require("ethers"); const CeloTransactionsWrapper_1 = require("./CeloTransactionsWrapper"); const logger = new ethers_1.utils.Logger('CeloEthersWallet'); const forwardErrors = [ ethers_1.utils.Logger.errors.INSUFFICIENT_FUNDS, ethers_1.utils.Logger.errors.NONCE_EXPIRED, ethers_1.utils.Logger.errors.REPLACEMENT_UNDERPRICED, ]; class CeloEthersWallet extends ethers_1.Wallet { /** * Override to skip checkTransaction step which rejects Celo tx properties * https://github.com/ethers-io/ethers.js/blob/master/packages/abstract-signer/src.ts/index.ts */ async populateTransaction(transaction) { const tx = await ethers_1.utils.resolveProperties(transaction); if (tx.to != null) { tx.to = Promise.resolve(tx.to).then(to => this.resolveName(to)); } if (tx.gasPrice == null) { tx.gasPrice = this.getGasPrice(); } if (tx.nonce == null) { tx.nonce = this.getTransactionCount('pending'); } if (tx.gasLimit == null) { tx.gasLimit = this.estimateGas(tx).catch(error => { if (forwardErrors.indexOf(error.code) >= 0) { throw error; } return logger.throwError('cannot estimate gas; transaction may fail or may require manual gas limit', ethers_1.utils.Logger.errors.UNPREDICTABLE_GAS_LIMIT, { error: error, tx: tx, }); }); } if (tx.chainId == null) { tx.chainId = this.getChainId(); } else { tx.chainId = Promise.all([ Promise.resolve(tx.chainId), this.getChainId(), ]).then(results => { if (results[1] !== 0 && results[0] !== results[1]) { logger.throwArgumentError('chainId address mismatch', 'transaction', transaction); } return results[0]; }); } return await ethers_1.utils.resolveProperties(tx); } /** * Override to serialize transaction using custom serialize method * https://github.com/ethers-io/ethers.js/blob/master/packages/wallet/src.ts/index.ts */ async signTransaction(transaction) { const populatedTx = await this.populateTransaction(transaction); const tx = await ethers_1.utils.resolveProperties(populatedTx); if (tx.from != null) { if (ethers_1.utils.getAddress(tx.from) !== this.address) { logger.throwArgumentError('transaction from address mismatch', 'transaction.from', transaction.from); } delete tx.from; } const signature = this._signingKey().signDigest(ethers_1.utils.keccak256((0, CeloTransactionsWrapper_1.serializeCeloTransaction)(tx))); const serialized = (0, CeloTransactionsWrapper_1.serializeCeloTransaction)(tx, signature); return serialized; } /** * Override just for type fix * https://github.com/ethers-io/ethers.js/blob/master/packages/wallet/src.ts/index.ts */ sendTransaction(transaction) { return super.sendTransaction(transaction); } /** * Override to skip checkTransaction step which rejects Celo tx properties * https://github.com/ethers-io/ethers.js/blob/master/packages/abstract-signer/src.ts/index.ts */ async estimateGas(transaction) { this._checkProvider('estimateGas'); const tx = await ethers_1.utils.resolveProperties(transaction); return await this.provider.estimateGas(tx); } /** * Override to support alternative gas currencies */ async getGasPrice(feeCurrencyAddress) { this._checkProvider('getGasPrice'); // @ts-ignore return await this.provider.getGasPrice(feeCurrencyAddress); } } exports.CeloEthersWallet = CeloEthersWallet; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2Vsb0V0aGVyc1dhbGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9DZWxvRXRoZXJzV2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE0RDtBQUM1RCx1RUFHa0M7QUFFbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7QUFFbkQsTUFBTSxhQUFhLEdBQUc7SUFDbEIsY0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCO0lBQ3RDLGNBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWE7SUFDakMsY0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsdUJBQXVCO0NBQzlDLENBQUE7QUFFRCxNQUFhLGdCQUFpQixTQUFRLGVBQU07SUFDeEM7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUNyQixXQUFxRDtRQUVyRCxNQUFNLEVBQUUsR0FBUSxNQUFNLGNBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUxRCxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ2YsRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7U0FDbEU7UUFDRCxJQUFJLEVBQUUsQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3JCLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ25DO1FBQ0QsSUFBSSxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtZQUNsQixFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtT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