viem
Version:
54 lines (47 loc) • 1.67 kB
text/typescript
import type { StateMapping, StateOverride } from '../types/stateOverride.js'
import { BaseError } from './base.js'
export type AccountStateConflictErrorType = AccountStateConflictError & {
name: 'AccountStateConflictError'
}
export class AccountStateConflictError extends BaseError {
constructor({ address }: { address: string }) {
super(`State for account "${address}" is set multiple times.`, {
name: 'AccountStateConflictError',
})
}
}
export type StateAssignmentConflictErrorType = StateAssignmentConflictError & {
name: 'StateAssignmentConflictError'
}
export class StateAssignmentConflictError extends BaseError {
constructor() {
super('state and stateDiff are set on the same account.', {
name: 'StateAssignmentConflictError',
})
}
}
/** @internal */
export function prettyStateMapping(stateMapping: StateMapping) {
return stateMapping.reduce((pretty, { slot, value }) => {
return `${pretty} ${slot}: ${value}\n`
}, '')
}
export function prettyStateOverride(stateOverride: StateOverride) {
return stateOverride
.reduce((pretty, { address, ...state }) => {
let val = `${pretty} ${address}:\n`
if (state.nonce) val += ` nonce: ${state.nonce}\n`
if (state.balance) val += ` balance: ${state.balance}\n`
if (state.code) val += ` code: ${state.code}\n`
if (state.state) {
val += ' state:\n'
val += prettyStateMapping(state.state)
}
if (state.stateDiff) {
val += ' stateDiff:\n'
val += prettyStateMapping(state.stateDiff)
}
return val
}, ' State Override:\n')
.slice(0, -1)
}