import * as $ from '@manahippo/move-to-ts'; import { AptosDataCache, AptosParserRepo, DummyCache, AptosLocalCache } from '@manahippo/move-to-ts'; import { U8, U64, U128 } from '@manahippo/move-to-ts'; import { u8, u64, u128 } from '@manahippo/move-to-ts'; import { TypeParamDeclType, FieldDeclType } from '@manahippo/move-to-ts'; import { AtomicTypeTag, StructTag, TypeTag, VectorTag, SimpleStructTag } from '@manahippo/move-to-ts'; import { OptionTransaction } from '@manahippo/move-to-ts'; import { HexString, AptosClient, AptosAccount, TxnBuilderTypes, Types } from 'aptos'; export const packageName = 'MoveStdlib'; export const moduleAddress = new HexString('0x1'); export const moduleName = 'fixed_point32'; export const EDENOMINATOR: U64 = u64('65537'); export const EDIVISION: U64 = u64('131074'); export const EDIVISION_BY_ZERO: U64 = u64('65540'); export const EMULTIPLICATION: U64 = u64('131075'); export const ERATIO_OUT_OF_RANGE: U64 = u64('131077'); export const MAX_U64: U128 = u128('18446744073709551615'); export class FixedPoint32 { static moduleAddress = moduleAddress; static moduleName = moduleName; __app: $.AppType | null = null; static structName: string = 'FixedPoint32'; static typeParameters: TypeParamDeclType[] = []; static fields: FieldDeclType[] = [{ name: 'value', typeTag: AtomicTypeTag.U64 }]; value: U64; constructor(proto: any, public typeTag: TypeTag) { this.value = proto['value'] as U64; } static FixedPoint32Parser(data: any, typeTag: TypeTag, repo: AptosParserRepo): FixedPoint32 { const proto = $.parseStructProto(data, typeTag, repo, FixedPoint32); return new FixedPoint32(proto, typeTag); } static getTag(): StructTag { return new StructTag(moduleAddress, moduleName, 'FixedPoint32', []); } async loadFullState(app: $.AppType) { this.__app = app; } } export function create_from_rational_(numerator: U64, denominator: U64, $c: AptosDataCache): FixedPoint32 { let temp$1, quotient, scaled_denominator, scaled_numerator; scaled_numerator = u128($.copy(numerator)).shl(u8('64')); scaled_denominator = u128($.copy(denominator)).shl(u8('32')); if (!$.copy(scaled_denominator).neq(u128('0'))) { throw $.abortCode($.copy(EDENOMINATOR)); } quotient = $.copy(scaled_numerator).div($.copy(scaled_denominator)); if ($.copy(quotient).neq(u128('0'))) { temp$1 = true; } else { temp$1 = $.copy(numerator).eq(u64('0')); } if (!temp$1) { throw $.abortCode($.copy(ERATIO_OUT_OF_RANGE)); } if (!$.copy(quotient).le($.copy(MAX_U64))) { throw $.abortCode($.copy(ERATIO_OUT_OF_RANGE)); } return new FixedPoint32({ value: u64($.copy(quotient)) }, new SimpleStructTag(FixedPoint32)); } export function create_from_raw_value_(value: U64, $c: AptosDataCache): FixedPoint32 { return new FixedPoint32({ value: $.copy(value) }, new SimpleStructTag(FixedPoint32)); } export function divide_u64_(val: U64, divisor: FixedPoint32, $c: AptosDataCache): U64 { let quotient, scaled_value; if (!$.copy(divisor.value).neq(u64('0'))) { throw $.abortCode($.copy(EDIVISION_BY_ZERO)); } scaled_value = u128($.copy(val)).shl(u8('32')); quotient = $.copy(scaled_value).div(u128($.copy(divisor.value))); if (!$.copy(quotient).le($.copy(MAX_U64))) { throw $.abortCode($.copy(EDIVISION)); } return u64($.copy(quotient)); } export function get_raw_value_(num: FixedPoint32, $c: AptosDataCache): U64 { return $.copy(num.value); } export function is_zero_(num: FixedPoint32, $c: AptosDataCache): boolean { return $.copy(num.value).eq(u64('0')); } export function multiply_u64_(val: U64, multiplier: FixedPoint32, $c: AptosDataCache): U64 { let product, unscaled_product; unscaled_product = u128($.copy(val)).mul(u128($.copy(multiplier.value))); product = $.copy(unscaled_product).shr(u8('32')); if (!$.copy(product).le($.copy(MAX_U64))) { throw $.abortCode($.copy(EMULTIPLICATION)); } return u64($.copy(product)); } export function loadParsers(repo: AptosParserRepo) { repo.addParser('0x1::fixed_point32::FixedPoint32', FixedPoint32.FixedPoint32Parser); } export class App { constructor(public client: AptosClient, public repo: AptosParserRepo, public cache: AptosLocalCache) {} get moduleAddress() { { return moduleAddress; } } get moduleName() { { return moduleName; } } get FixedPoint32() { return FixedPoint32; } }