UNPKG

@infibridge/celo-sdk-base

Version:

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

94 lines 7.82 kB
import { utils, Wallet } from 'ethers'; import { serializeCeloTransaction, } from './CeloTransactionsWrapper'; const logger = new utils.Logger('CeloEthersWallet'); const forwardErrors = [ utils.Logger.errors.INSUFFICIENT_FUNDS, utils.Logger.errors.NONCE_EXPIRED, utils.Logger.errors.REPLACEMENT_UNDERPRICED, ]; export class CeloEthersWallet extends 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 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', 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 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 utils.resolveProperties(populatedTx); if (tx.from != null) { if (utils.getAddress(tx.from) !== this.address) { logger.throwArgumentError('transaction from address mismatch', 'transaction.from', transaction.from); } delete tx.from; } const signature = this._signingKey().signDigest(utils.keccak256(serializeCeloTransaction(tx))); const serialized = 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 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); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2Vsb0V0aGVyc1dhbGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9DZWxvRXRoZXJzV2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBd0IsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM1RCxPQUFPLEVBRUgsd0JBQXdCLEdBQzNCLE1BQU0sMkJBQTJCLENBQUE7QUFFbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7QUFFbkQsTUFBTSxhQUFhLEdBQUc7SUFDbEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCO0lBQ3RDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWE7SUFDakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsdUJBQXVCO0NBQzlDLENBQUE7QUFFRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsTUFBTTtJQUN4Qzs7O09BR0c7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQ3JCLFdBQXFEO1FBRXJELE1BQU0sRUFBRSxHQUFRLE1BQU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRTFELElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDZixFQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtTQUNsRTtRQUNELElBQUksRUFBRSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDckIsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7U0FDbkM7UUFDRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLElBQUks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