diff --git a/src/abi/abi_type.ts b/src/abi/abi_type.ts index bd467a90d..bfd599f32 100644 --- a/src/abi/abi_type.ts +++ b/src/abi/abi_type.ts @@ -261,7 +261,7 @@ export class ABIAddressType extends ABIType { return decodedAddress.publicKey; } - if (value instanceof Address) { + if (typeof value === 'object' && 'publicKey' in value) { return value.publicKey; } diff --git a/src/encoding/address.ts b/src/encoding/address.ts index 77a2f7509..64326b3e8 100644 --- a/src/encoding/address.ts +++ b/src/encoding/address.ts @@ -57,10 +57,7 @@ export class Address { * Check if the address is equal to another address. */ equals(other: Address): boolean { - return ( - other instanceof Address && - utils.arrayEqual(this.publicKey, other.publicKey) - ); + return utils.arrayEqual(this.publicKey, other.publicKey); } /** diff --git a/src/encoding/schema/address.ts b/src/encoding/schema/address.ts index 3eb7f5c7e..3b93db1fb 100644 --- a/src/encoding/schema/address.ts +++ b/src/encoding/schema/address.ts @@ -20,8 +20,14 @@ export class AddressSchema extends Schema { } public prepareMsgpack(data: unknown): MsgpackEncodingData { - if (data instanceof Address) { - return data.publicKey; + if ( + data instanceof Address || + (data && + typeof data === 'object' && + 'publicKey' in data && + data.publicKey instanceof Uint8Array) + ) { + return data.publicKey as Uint8Array; } throw new Error(`Invalid address: (${typeof data}) ${data}`); } @@ -40,8 +46,13 @@ export class AddressSchema extends Schema { // eslint-disable-next-line @typescript-eslint/no-unused-vars _options: PrepareJSONOptions ): JSONEncodingData { - if (data instanceof Address) { - return data.toString(); + if ( + data instanceof Address || + (data && typeof data === 'object' && 'toString' in data) + ) { + // Since are checking for the toString method, we might have something that isn't an Address + // Using Address.fromString allows us to throw an error if the input is not a valid address + return Address.fromString(data.toString()).toString(); } throw new Error(`Invalid address: (${typeof data}) ${data}`); } diff --git a/src/transaction.ts b/src/transaction.ts index bd9864ec2..8ebafe4ae 100644 --- a/src/transaction.ts +++ b/src/transaction.ts @@ -81,6 +81,11 @@ function ensureAddress(input: unknown): Address { if (input instanceof Address) { return input; } + + if (typeof input === 'object' && 'toString' in input) { + return Address.fromString(input.toString()); + } + throw new Error(`Not an address: ${input}`); } @@ -93,6 +98,8 @@ function optionalAddress(input: unknown): Address | undefined { addr = input; } else if (typeof input === 'string') { addr = Address.fromString(input); + } else if (typeof input === 'object' && 'toString' in input) { + addr = Address.fromString(input.toString()); } else { throw new Error(`Not an address: ${input}`); }