import { BufferReaderT } from '@util' import { Result } from 'neverthrow' import { stringifySubstateType, SubStateType, ValidatorOwnerCopyT, } from './_types' import { makeBaseValidatorSubstateFromBuffer } from './preparedStake' import { REAddress } from './reAddress' const makeValidatorValidatorOwnerCopy = ( bufferReader: BufferReaderT, lengthData: Buffer, ): Result => makeBaseValidatorSubstateFromBuffer(SubStateType.VALIDATOR_OWNER_COPY)( bufferReader, ).andThen( (base): Result => REAddress.fromBufferReader(bufferReader).map( (owner): ValidatorOwnerCopyT => { const reserved = base.reserved const validator = base.validator return { ...base, owner, toBuffer: (): Buffer => Buffer.concat([lengthData, base.toBuffer(), owner.toBuffer()]), toString: () => `${stringifySubstateType( SubStateType.VALIDATOR_OWNER_COPY, )} { reserved: ${reserved}, validator: 0x${validator.toString()}, owner: 0x${owner .toBuffer() .toString('hex')} }`, } }, ), ) export const ValidatorOwnerCopy = { fromBufferReader: ( bufferReader: BufferReaderT, lengthData: Buffer, ): Result => makeValidatorValidatorOwnerCopy(bufferReader, lengthData), }