@mysten/sui
Version:
Sui TypeScript API
1 lines • 17.7 kB
Source Map (JSON)
{"version":3,"file":"bcs.mjs","names":[],"sources":["../../src/bcs/bcs.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { BcsType, BcsTypeOptions } from '@mysten/bcs';\nimport { bcs, fromBase58, fromBase64, fromHex, toBase58, toBase64, toHex } from '@mysten/bcs';\n\nimport { isValidSuiAddress, normalizeSuiAddress, SUI_ADDRESS_LENGTH } from '../utils/sui-types.js';\nimport { TypeTagSerializer } from './type-tag-serializer.js';\nimport type { TypeTag as TypeTagType } from './types.js';\n\nfunction unsafe_u64(options?: BcsTypeOptions<number>) {\n\treturn bcs\n\t\t.u64({\n\t\t\tname: 'unsafe_u64',\n\t\t\t...(options as object),\n\t\t})\n\t\t.transform({\n\t\t\tinput: (val: number | string) => val,\n\t\t\toutput: (val) => Number(val),\n\t\t});\n}\n\nfunction optionEnum<T extends BcsType<any, any>>(type: T) {\n\treturn bcs.enum('Option', {\n\t\tNone: null,\n\t\tSome: type,\n\t});\n}\n\nexport const Address = bcs.bytes(SUI_ADDRESS_LENGTH).transform({\n\tvalidate: (val) => {\n\t\tconst address = typeof val === 'string' ? val : toHex(val);\n\t\tif (!address || !isValidSuiAddress(normalizeSuiAddress(address))) {\n\t\t\tthrow new Error(`Invalid Sui address ${address}`);\n\t\t}\n\t},\n\tinput: (val: string | Uint8Array) =>\n\t\ttypeof val === 'string' ? fromHex(normalizeSuiAddress(val)) : val,\n\toutput: (val) => normalizeSuiAddress(toHex(val)),\n});\n\nexport const ObjectDigest = bcs.byteVector().transform({\n\tname: 'ObjectDigest',\n\tinput: (value: string) => fromBase58(value),\n\toutput: (value) => toBase58(new Uint8Array(value)),\n\tvalidate: (value) => {\n\t\tif (fromBase58(value).length !== 32) {\n\t\t\tthrow new Error('ObjectDigest must be 32 bytes');\n\t\t}\n\t},\n});\n\nexport const SuiObjectRef = bcs.struct('SuiObjectRef', {\n\tobjectId: Address,\n\tversion: bcs.u64(),\n\tdigest: ObjectDigest,\n});\n\nexport const SharedObjectRef = bcs.struct('SharedObjectRef', {\n\tobjectId: Address,\n\tinitialSharedVersion: bcs.u64(),\n\tmutable: bcs.bool(),\n});\n\nexport const ObjectArg = bcs.enum('ObjectArg', {\n\tImmOrOwnedObject: SuiObjectRef,\n\tSharedObject: SharedObjectRef,\n\tReceiving: SuiObjectRef,\n});\n\n// Rust: crates/sui-types/src/object.rs\nexport const Owner = bcs.enum('Owner', {\n\tAddressOwner: Address,\n\tObjectOwner: Address,\n\tShared: bcs.struct('Shared', {\n\t\tinitialSharedVersion: bcs.u64(),\n\t}),\n\tImmutable: null,\n\tConsensusAddressOwner: bcs.struct('ConsensusAddressOwner', {\n\t\tstartVersion: bcs.u64(),\n\t\towner: Address,\n\t}),\n});\n\n// Rust: crates/sui-types/src/transaction.rs\nexport const Reservation = bcs.enum('Reservation', {\n\tMaxAmountU64: bcs.u64(),\n});\n\n// Rust: crates/sui-types/src/transaction.rs\nexport const WithdrawalType = bcs.enum('WithdrawalType', {\n\tBalance: bcs.lazy(() => TypeTag),\n});\n\n// Rust: crates/sui-types/src/transaction.rs\nexport const WithdrawFrom = bcs.enum('WithdrawFrom', {\n\tSender: null,\n\tSponsor: null,\n});\n\n// Rust: crates/sui-types/src/transaction.rs\nexport const FundsWithdrawal = bcs.struct('FundsWithdrawal', {\n\treservation: Reservation,\n\ttypeArg: WithdrawalType,\n\twithdrawFrom: WithdrawFrom,\n});\n\nexport const CallArg = bcs.enum('CallArg', {\n\tPure: bcs.struct('Pure', {\n\t\tbytes: bcs.byteVector().transform({\n\t\t\tinput: (val: string | Uint8Array) => (typeof val === 'string' ? fromBase64(val) : val),\n\t\t\toutput: (val) => toBase64(new Uint8Array(val)),\n\t\t}),\n\t}),\n\tObject: ObjectArg,\n\tFundsWithdrawal: FundsWithdrawal,\n});\n\nconst InnerTypeTag: BcsType<TypeTagType, TypeTagType> = bcs.enum('TypeTag', {\n\tbool: null,\n\tu8: null,\n\tu64: null,\n\tu128: null,\n\taddress: null,\n\tsigner: null,\n\tvector: bcs.lazy(() => InnerTypeTag),\n\tstruct: bcs.lazy(() => StructTag),\n\tu16: null,\n\tu32: null,\n\tu256: null,\n}) as BcsType<TypeTagType>;\n\nexport const TypeTag = InnerTypeTag.transform({\n\tinput: (typeTag: string | TypeTagType) =>\n\t\ttypeof typeTag === 'string' ? TypeTagSerializer.parseFromStr(typeTag, true) : typeTag,\n\toutput: (typeTag: TypeTagType) => TypeTagSerializer.tagToString(typeTag),\n});\n\nexport const Argument = bcs.enum('Argument', {\n\tGasCoin: null,\n\tInput: bcs.u16(),\n\tResult: bcs.u16(),\n\tNestedResult: bcs.tuple([bcs.u16(), bcs.u16()]),\n});\n\nexport const ProgrammableMoveCall = bcs.struct('ProgrammableMoveCall', {\n\tpackage: Address,\n\tmodule: bcs.string(),\n\tfunction: bcs.string(),\n\ttypeArguments: bcs.vector(TypeTag),\n\targuments: bcs.vector(Argument),\n});\n\nexport const Command = bcs.enum('Command', {\n\t/**\n\t * A Move Call - any public Move function can be called via\n\t * this transaction. The results can be used that instant to pass\n\t * into the next transaction.\n\t */\n\tMoveCall: ProgrammableMoveCall,\n\t/**\n\t * Transfer vector of objects to a receiver.\n\t */\n\tTransferObjects: bcs.struct('TransferObjects', {\n\t\tobjects: bcs.vector(Argument),\n\t\taddress: Argument,\n\t}),\n\t// /**\n\t// * Split `amount` from a `coin`.\n\t// */\n\tSplitCoins: bcs.struct('SplitCoins', {\n\t\tcoin: Argument,\n\t\tamounts: bcs.vector(Argument),\n\t}),\n\t// /**\n\t// * Merge Vector of Coins (`sources`) into a `destination`.\n\t// */\n\tMergeCoins: bcs.struct('MergeCoins', {\n\t\tdestination: Argument,\n\t\tsources: bcs.vector(Argument),\n\t}),\n\t// /**\n\t// * Publish a Move module.\n\t// */\n\tPublish: bcs.struct('Publish', {\n\t\tmodules: bcs.vector(\n\t\t\tbcs.byteVector().transform({\n\t\t\t\tinput: (val: string | Uint8Array) => (typeof val === 'string' ? fromBase64(val) : val),\n\t\t\t\toutput: (val) => toBase64(new Uint8Array(val)),\n\t\t\t}),\n\t\t),\n\t\tdependencies: bcs.vector(Address),\n\t}),\n\t// /**\n\t// * Build a vector of objects using the input arguments.\n\t// * It is impossible to export construct a `vector<T: key>` otherwise,\n\t// * so this call serves a utility function.\n\t// */\n\tMakeMoveVec: bcs.struct('MakeMoveVec', {\n\t\ttype: optionEnum(TypeTag).transform({\n\t\t\tinput: (val: string | null) =>\n\t\t\t\tval === null\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tNone: true,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tSome: val,\n\t\t\t\t\t\t},\n\t\t\toutput: (val) => val.Some ?? null,\n\t\t}),\n\t\telements: bcs.vector(Argument),\n\t}),\n\tUpgrade: bcs.struct('Upgrade', {\n\t\tmodules: bcs.vector(\n\t\t\tbcs.byteVector().transform({\n\t\t\t\tinput: (val: string | Uint8Array) => (typeof val === 'string' ? fromBase64(val) : val),\n\t\t\t\toutput: (val) => toBase64(new Uint8Array(val)),\n\t\t\t}),\n\t\t),\n\t\tdependencies: bcs.vector(Address),\n\t\tpackage: Address,\n\t\tticket: Argument,\n\t}),\n});\n\nexport const ProgrammableTransaction = bcs.struct('ProgrammableTransaction', {\n\tinputs: bcs.vector(CallArg),\n\tcommands: bcs.vector(Command),\n});\n\nexport const TransactionKind = bcs.enum('TransactionKind', {\n\tProgrammableTransaction: ProgrammableTransaction,\n\tChangeEpoch: null,\n\tGenesis: null,\n\tConsensusCommitPrologue: null,\n});\n\n// Rust: crates/sui-types/src/transaction.rs\nexport const ValidDuring = bcs.struct('ValidDuring', {\n\tminEpoch: bcs.option(bcs.u64()),\n\tmaxEpoch: bcs.option(bcs.u64()),\n\tminTimestamp: bcs.option(bcs.u64()),\n\tmaxTimestamp: bcs.option(bcs.u64()),\n\tchain: ObjectDigest,\n\tnonce: bcs.u32(),\n});\n\nexport const TransactionExpiration = bcs.enum('TransactionExpiration', {\n\tNone: null,\n\tEpoch: unsafe_u64(),\n\tValidDuring: ValidDuring,\n});\n\nexport const StructTag = bcs.struct('StructTag', {\n\taddress: Address,\n\tmodule: bcs.string(),\n\tname: bcs.string(),\n\ttypeParams: bcs.vector(InnerTypeTag),\n});\n\nexport const GasData = bcs.struct('GasData', {\n\tpayment: bcs.vector(SuiObjectRef),\n\towner: Address,\n\tprice: bcs.u64(),\n\tbudget: bcs.u64(),\n});\n\nexport const TransactionDataV1 = bcs.struct('TransactionDataV1', {\n\tkind: TransactionKind,\n\tsender: Address,\n\tgasData: GasData,\n\texpiration: TransactionExpiration,\n});\n\nexport const TransactionData = bcs.enum('TransactionData', {\n\tV1: TransactionDataV1,\n});\n\nexport const IntentScope = bcs.enum('IntentScope', {\n\tTransactionData: null,\n\tTransactionEffects: null,\n\tCheckpointSummary: null,\n\tPersonalMessage: null,\n});\n\nexport const IntentVersion = bcs.enum('IntentVersion', {\n\tV0: null,\n});\n\nexport const AppId = bcs.enum('AppId', {\n\tSui: null,\n});\n\nexport const Intent = bcs.struct('Intent', {\n\tscope: IntentScope,\n\tversion: IntentVersion,\n\tappId: AppId,\n});\n\nexport function IntentMessage<T extends BcsType<any>>(T: T) {\n\treturn bcs.struct(`IntentMessage<${T.name}>`, {\n\t\tintent: Intent,\n\t\tvalue: T,\n\t});\n}\n\nexport const CompressedSignature = bcs.enum('CompressedSignature', {\n\tED25519: bcs.bytes(64),\n\tSecp256k1: bcs.bytes(64),\n\tSecp256r1: bcs.bytes(64),\n\tZkLogin: bcs.byteVector(),\n\tPasskey: bcs.byteVector(),\n});\n\nexport const PublicKey = bcs.enum('PublicKey', {\n\tED25519: bcs.bytes(32),\n\tSecp256k1: bcs.bytes(33),\n\tSecp256r1: bcs.bytes(33),\n\tZkLogin: bcs.byteVector(),\n\tPasskey: bcs.bytes(33),\n});\n\nexport const MultiSigPkMap = bcs.struct('MultiSigPkMap', {\n\tpubKey: PublicKey,\n\tweight: bcs.u8(),\n});\n\nexport const MultiSigPublicKey = bcs.struct('MultiSigPublicKey', {\n\tpk_map: bcs.vector(MultiSigPkMap),\n\tthreshold: bcs.u16(),\n});\n\nexport const MultiSig = bcs.struct('MultiSig', {\n\tsigs: bcs.vector(CompressedSignature),\n\tbitmap: bcs.u16(),\n\tmultisig_pk: MultiSigPublicKey,\n});\n\nexport const base64String = bcs.byteVector().transform({\n\tinput: (val: string | Uint8Array) => (typeof val === 'string' ? fromBase64(val) : val),\n\toutput: (val) => toBase64(new Uint8Array(val)),\n});\n\nexport const SenderSignedTransaction = bcs.struct('SenderSignedTransaction', {\n\tintentMessage: IntentMessage(TransactionData),\n\ttxSignatures: bcs.vector(base64String),\n});\n\nexport const SenderSignedData = bcs.vector(SenderSignedTransaction, {\n\tname: 'SenderSignedData',\n});\n\nexport const PasskeyAuthenticator = bcs.struct('PasskeyAuthenticator', {\n\tauthenticatorData: bcs.byteVector(),\n\tclientDataJson: bcs.string(),\n\tuserSignature: bcs.byteVector(),\n});\n\n// Rust: crates/sui-types/src/object.rs\nexport const MoveObjectType = bcs.enum('MoveObjectType', {\n\tOther: StructTag,\n\tGasCoin: null,\n\tStakedSui: null,\n\tCoin: TypeTag,\n\tAccumulatorBalanceWrapper: null,\n});\n\n// Rust: crates/sui-types/src/object.rs\nexport const TypeOrigin = bcs.struct('TypeOrigin', {\n\tmoduleName: bcs.string(),\n\tdatatypeName: bcs.string(),\n\tpackage: Address,\n});\n\n// Rust: crates/sui-types/src/object.rs\nexport const UpgradeInfo = bcs.struct('UpgradeInfo', {\n\tupgradedId: Address,\n\tupgradedVersion: bcs.u64(),\n});\n\n// Rust: crates/sui-types/src/object.rs\nexport const MovePackage = bcs.struct('MovePackage', {\n\tid: Address,\n\tversion: bcs.u64(),\n\tmoduleMap: bcs.map(bcs.string(), bcs.byteVector()),\n\ttypeOriginTable: bcs.vector(TypeOrigin),\n\tlinkageTable: bcs.map(Address, UpgradeInfo),\n});\n\n// Rust: crates/sui-types/src/object.rs\nexport const MoveObject = bcs.struct('MoveObject', {\n\ttype: MoveObjectType,\n\thasPublicTransfer: bcs.bool(),\n\tversion: bcs.u64(),\n\tcontents: bcs.byteVector(),\n});\n\n// Rust: crates/sui-types/src/object.rs\nexport const Data = bcs.enum('Data', {\n\tMove: MoveObject,\n\tPackage: MovePackage,\n});\n\n// Rust: crates/sui-types/src/object.rs\nexport const ObjectInner = bcs.struct('ObjectInner', {\n\tdata: Data,\n\towner: Owner,\n\tpreviousTransaction: ObjectDigest,\n\tstorageRebate: bcs.u64(),\n});\n"],"mappings":"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"}