UNPKG

@aptos-labs/ts-sdk

Version:
212 lines (168 loc) 5.88 kB
// Copyright © Aptos Foundation // SPDX-License-Identifier: Apache-2.0 import { MAX_U128_BIG_INT, MAX_U16_NUMBER, MAX_U32_NUMBER, MAX_U64_BIG_INT, MAX_U8_NUMBER, MAX_U256_BIG_INT, } from "../consts"; import { Deserializer } from "../deserializer"; import { Serializable, Serializer, ensureBoolean, validateNumberInRange } from "../serializer"; import { TransactionArgument } from "../../transactions/instances/transactionArgument"; import { AnyNumber, Uint16, Uint32, Uint8, ScriptTransactionArgumentVariants } from "../../types"; export class Bool extends Serializable implements TransactionArgument { public readonly value: boolean; constructor(value: boolean) { super(); ensureBoolean(value); this.value = value; } serialize(serializer: Serializer): void { serializer.serializeBool(this.value); } serializeForEntryFunction(serializer: Serializer): void { const bcsBytes = this.bcsToBytes(); serializer.serializeBytes(bcsBytes); } serializeForScriptFunction(serializer: Serializer): void { serializer.serializeU32AsUleb128(ScriptTransactionArgumentVariants.Bool); serializer.serialize(this); } static deserialize(deserializer: Deserializer): Bool { return new Bool(deserializer.deserializeBool()); } } export class U8 extends Serializable implements TransactionArgument { public readonly value: Uint8; constructor(value: Uint8) { super(); validateNumberInRange(value, 0, MAX_U8_NUMBER); this.value = value; } serialize(serializer: Serializer): void { serializer.serializeU8(this.value); } serializeForEntryFunction(serializer: Serializer): void { const bcsBytes = this.bcsToBytes(); serializer.serializeBytes(bcsBytes); } serializeForScriptFunction(serializer: Serializer): void { serializer.serializeU32AsUleb128(ScriptTransactionArgumentVariants.U8); serializer.serialize(this); } static deserialize(deserializer: Deserializer): U8 { return new U8(deserializer.deserializeU8()); } } export class U16 extends Serializable implements TransactionArgument { public readonly value: Uint16; constructor(value: Uint16) { super(); validateNumberInRange(value, 0, MAX_U16_NUMBER); this.value = value; } serialize(serializer: Serializer): void { serializer.serializeU16(this.value); } serializeForEntryFunction(serializer: Serializer): void { const bcsBytes = this.bcsToBytes(); serializer.serializeBytes(bcsBytes); } serializeForScriptFunction(serializer: Serializer): void { serializer.serializeU32AsUleb128(ScriptTransactionArgumentVariants.U16); serializer.serialize(this); } static deserialize(deserializer: Deserializer): U16 { return new U16(deserializer.deserializeU16()); } } export class U32 extends Serializable implements TransactionArgument { public readonly value: Uint32; constructor(value: Uint32) { super(); validateNumberInRange(value, 0, MAX_U32_NUMBER); this.value = value; } serialize(serializer: Serializer): void { serializer.serializeU32(this.value); } serializeForEntryFunction(serializer: Serializer): void { const bcsBytes = this.bcsToBytes(); serializer.serializeBytes(bcsBytes); } serializeForScriptFunction(serializer: Serializer): void { serializer.serializeU32AsUleb128(ScriptTransactionArgumentVariants.U32); serializer.serialize(this); } static deserialize(deserializer: Deserializer): U32 { return new U32(deserializer.deserializeU32()); } } export class U64 extends Serializable implements TransactionArgument { public readonly value: bigint; constructor(value: AnyNumber) { super(); validateNumberInRange(value, BigInt(0), MAX_U64_BIG_INT); this.value = BigInt(value); } serialize(serializer: Serializer): void { serializer.serializeU64(this.value); } serializeForEntryFunction(serializer: Serializer): void { const bcsBytes = this.bcsToBytes(); serializer.serializeBytes(bcsBytes); } serializeForScriptFunction(serializer: Serializer): void { serializer.serializeU32AsUleb128(ScriptTransactionArgumentVariants.U64); serializer.serialize(this); } static deserialize(deserializer: Deserializer): U64 { return new U64(deserializer.deserializeU64()); } } export class U128 extends Serializable implements TransactionArgument { public readonly value: bigint; constructor(value: AnyNumber) { super(); validateNumberInRange(value, BigInt(0), MAX_U128_BIG_INT); this.value = BigInt(value); } serialize(serializer: Serializer): void { serializer.serializeU128(this.value); } serializeForEntryFunction(serializer: Serializer): void { const bcsBytes = this.bcsToBytes(); serializer.serializeBytes(bcsBytes); } serializeForScriptFunction(serializer: Serializer): void { serializer.serializeU32AsUleb128(ScriptTransactionArgumentVariants.U128); serializer.serialize(this); } static deserialize(deserializer: Deserializer): U128 { return new U128(deserializer.deserializeU128()); } } export class U256 extends Serializable implements TransactionArgument { public readonly value: bigint; constructor(value: AnyNumber) { super(); validateNumberInRange(value, BigInt(0), MAX_U256_BIG_INT); this.value = BigInt(value); } serialize(serializer: Serializer): void { serializer.serializeU256(this.value); } serializeForEntryFunction(serializer: Serializer): void { const bcsBytes = this.bcsToBytes(); serializer.serializeBytes(bcsBytes); } serializeForScriptFunction(serializer: Serializer): void { serializer.serializeU32AsUleb128(ScriptTransactionArgumentVariants.U256); serializer.serialize(this); } static deserialize(deserializer: Deserializer): U256 { return new U256(deserializer.deserializeU256()); } }