@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
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2Vsb0V0aGVyc1dhbGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9DZWxvRXRoZXJzV2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUE0RDtBQUM1RCx1RUFHa0M7QUFFbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7QUFFbkQsTUFBTSxhQUFhLEdBQUc7SUFDbEIsY0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCO0lBQ3RDLGNBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWE7SUFDakMsY0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsdUJBQXVCO0NBQzlDLENBQUE7QUFFRCxNQUFhLGdCQUFpQixTQUFRLGVBQU07SUFDeEM7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUNyQixXQUFxRDtRQUVyRCxNQUFNLEVBQUUsR0FBUSxNQUFNLGNBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUxRCxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ2YsRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7U0FDbEU7UUFDRCxJQUFJLEVBQUUsQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ3JCLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ25DO1FBQ0QsSUFBSSxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtZQUNsQixFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtTQUNqRDtRQUVELElBQUksRUFBRSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDckIsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDN0MsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hDLE1BQU0sS0FBSyxDQUFBO2lCQUNkO2dCQUVELE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FDcEIsMkVBQTJFLEVBQzNFLGNBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUMzQztvQkFDSSxLQUFLLEVBQUUsS0FBSztvQkFDWixFQUFFLEVBQUUsRUFBRTtpQkFDVCxDQUNKLENBQUE7WUFDTCxDQUFDLENBQUMsQ0FBQTtTQUNMO1FBRUQsSUFBSSxFQUFFLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUNwQixFQUFFLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTtTQUNqQzthQUFNO1lBQ0gsRUFBRSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNyQixPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxVQUFVLEVBQUU7YUFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDZCxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDL0MsTUFBTSxDQUFDLGtCQUFrQixDQUNyQiwwQkFBMEIsRUFDMUIsYUFBYSxFQUNiLFdBQVcsQ0FDZCxDQUFBO2lCQUNKO2dCQUNELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3JCLENBQUMsQ0FBQyxDQUFBO1NBQ0w7UUFFRCxPQUFPLE1BQU0sY0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUNqQixXQUFtQztRQUVuQyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUMvRCxNQUFNLEVBQUUsR0FBUSxNQUFNLGNBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUUxRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ2pCLElBQUksY0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDNUMsTUFBTSxDQUFDLGtCQUFrQixDQUNyQixtQ0FBbUMsRUFDbkMsa0JBQWtCLEVBQ2xCLFdBQVcsQ0FBQyxJQUFJLENBQ25CLENBQUE7YUFDSjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQTtTQUNqQjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQzNDLGNBQUssQ0FBQyxTQUFTLENBQUMsSUFBQSxrREFBd0IsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUNoRCxDQUFBO1FBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBQSxrREFBd0IsRUFBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDMUQsT0FBTyxVQUFVLENBQUE7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FDWCxXQUFxRDtRQUVyRCxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQ2IsV0FBcUQ7UUFFckQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNsQyxNQUFNLEVBQUUsR0FBRyxNQUFNLGNBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNyRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxrQkFBMkI7UUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNsQyxhQUFhO1FBQ2IsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFDOUQsQ0FBQztDQUNKO0FBcEhELDRDQW9IQyJ9