address.ts 928 B

123456789101112131415161718192021222324252627282930313233343536
  1. import { getAddress } from "../../address/index.js";
  2. import { toBeHex } from "../../utils/maths.js";
  3. import { Typed } from "../typed.js";
  4. import { Coder } from "./abstract-coder.js";
  5. import type { Reader, Writer } from "./abstract-coder.js";
  6. /**
  7. * @_ignore
  8. */
  9. export class AddressCoder extends Coder {
  10. constructor(localName: string) {
  11. super("address", "address", localName, false);
  12. }
  13. defaultValue(): string {
  14. return "0x0000000000000000000000000000000000000000";
  15. }
  16. encode(writer: Writer, _value: string | Typed): number {
  17. let value = Typed.dereference(_value, "string");
  18. try {
  19. value = getAddress(value);
  20. } catch (error: any) {
  21. return this._throwError(error.message, _value);
  22. }
  23. return writer.writeValue(value);
  24. }
  25. decode(reader: Reader): any {
  26. return getAddress(toBeHex(reader.readValue(), 20));
  27. }
  28. }