ethers-override
Version:
> ⚡🚀 SDK for `eth_call` override.
38 lines (37 loc) • 1.21 kB
JavaScript
import { AddressAsIf } from "./addressAsIf.js";
import { mergeDeep } from "./utils.js";
export class LedgerState {
static from(blockTag = undefined) {
return new LedgerState(blockTag);
}
constructor(blockTag = undefined) {
this._asIfs = [];
this._blockTag = blockTag;
}
asif(asIf) {
this._asIfs.push(asIf);
return this;
}
async getStateAsync() {
if (this._blockTag === undefined) {
throw new Error(`Failed to call LedgerState.state() as blockTag is not set!`);
}
const override = await this.getOverrideAsync();
return [this._blockTag, override];
}
blockTag() {
if (this._blockTag === undefined) {
throw new Error(`Failed to call LedgerState.blockTag() as blockTag is not set!`);
}
return this._blockTag;
}
async getOverrideAsync() {
const asIfValues = await Promise.all(this._asIfs.map(asIf => asIf.valueAsync()));
let override = {};
asIfValues.forEach(asIfValue => {
override = mergeDeep(override, asIfValue);
});
return override;
}
}
LedgerState.original = new LedgerState(undefined);