fixed-bytes.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { defineProperties, getBytesCopy, hexlify } from "../../utils/index.js";
  2. import { Typed } from "../typed.js";
  3. import { Coder } from "./abstract-coder.js";
  4. import type { BytesLike } from "../../utils/index.js";
  5. import type { Reader, Writer } from "./abstract-coder.js";
  6. /**
  7. * @_ignore
  8. */
  9. export class FixedBytesCoder extends Coder {
  10. readonly size!: number;
  11. constructor(size: number, localName: string) {
  12. let name = "bytes" + String(size);
  13. super(name, name, localName, false);
  14. defineProperties<FixedBytesCoder>(this, { size }, { size: "number" });
  15. }
  16. defaultValue(): string {
  17. return ("0x0000000000000000000000000000000000000000000000000000000000000000").substring(0, 2 + this.size * 2);
  18. }
  19. encode(writer: Writer, _value: BytesLike | Typed): number {
  20. let data = getBytesCopy(Typed.dereference(_value, this.type));
  21. if (data.length !== this.size) { this._throwError("incorrect data length", _value); }
  22. return writer.writeBytes(data);
  23. }
  24. decode(reader: Reader): any {
  25. return hexlify(reader.readBytes(this.size));
  26. }
  27. }