@0xobelisk/client 0.2.8 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +179 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +181 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -5
- package/src/libs/suiInteractor/suiInteractor.ts +59 -9
- package/src/obelisk.ts +164 -2
- package/src/types/index.ts +79 -51
- package/src/utils/index.ts +21 -1
- package/dist/framework/bcs.d.ts +0 -3
- package/dist/framework/loader.d.ts +0 -11
- package/dist/framework/util.d.ts +0 -90
- package/dist/index.d.ts +0 -9
- package/dist/libs/suiAccountManager/crypto.d.ts +0 -1
- package/dist/libs/suiAccountManager/index.d.ts +0 -35
- package/dist/libs/suiAccountManager/keypair.d.ts +0 -21
- package/dist/libs/suiAccountManager/types.d.ts +0 -9
- package/dist/libs/suiAccountManager/util.d.ts +0 -29
- package/dist/libs/suiContractFactory/index.d.ts +0 -20
- package/dist/libs/suiContractFactory/types.d.ts +0 -49
- package/dist/libs/suiInteractor/defaultConfig.d.ts +0 -10
- package/dist/libs/suiInteractor/index.d.ts +0 -2
- package/dist/libs/suiInteractor/suiInteractor.d.ts +0 -204
- package/dist/libs/suiInteractor/util.d.ts +0 -1
- package/dist/libs/suiModel/index.d.ts +0 -2
- package/dist/libs/suiModel/suiOwnedObject.d.ts +0 -24
- package/dist/libs/suiModel/suiSharedObject.d.ts +0 -12
- package/dist/libs/suiRpcProvider/defaultChainConfigs.d.ts +0 -8
- package/dist/libs/suiRpcProvider/faucet.d.ts +0 -8
- package/dist/libs/suiRpcProvider/index.d.ts +0 -213
- package/dist/libs/suiRpcProvider/types.d.ts +0 -14
- package/dist/libs/suiTxBuilder/index.d.ts +0 -544
- package/dist/libs/suiTxBuilder/types.d.ts +0 -12
- package/dist/libs/suiTxBuilder/util.d.ts +0 -76
- package/dist/metadata/index.d.ts +0 -34
- package/dist/obelisk.d.ts +0 -2691
- package/dist/types/index.d.ts +0 -114
- package/dist/utils/index.d.ts +0 -1
- package/src/framework/bcs.ts +0 -6
- package/src/framework/loader.ts +0 -152
- package/src/framework/util.ts +0 -219
package/dist/types/index.d.ts
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { Infer } from 'superstruct';
|
|
2
|
-
import { DisplayFieldsResponse, ObjectCallArg, ObjectContentFields, SharedObjectRef, SuiObjectRef, TransactionArgument, TransactionBlock, SuiTransactionBlockResponse, DevInspectResults, SuiMoveNormalizedModules } from '@mysten/sui.js';
|
|
3
|
-
import { SuiMoveMoudleFuncType } from '../libs/suiContractFactory/types';
|
|
4
|
-
export type ObeliskObjectData = {
|
|
5
|
-
objectId: string;
|
|
6
|
-
objectType: string;
|
|
7
|
-
objectVersion: number;
|
|
8
|
-
objectDisplay: DisplayFieldsResponse;
|
|
9
|
-
objectFields: ObjectContentFields;
|
|
10
|
-
};
|
|
11
|
-
export type ObeliskParams = {
|
|
12
|
-
mnemonics?: string;
|
|
13
|
-
secretKey?: string;
|
|
14
|
-
fullnodeUrls?: string[];
|
|
15
|
-
faucetUrl?: string;
|
|
16
|
-
networkType?: NetworkType;
|
|
17
|
-
packageId?: string;
|
|
18
|
-
metadata?: SuiMoveNormalizedModules;
|
|
19
|
-
};
|
|
20
|
-
export type ComponentFieldType = {
|
|
21
|
-
components: {
|
|
22
|
-
type: string;
|
|
23
|
-
fields: {
|
|
24
|
-
id: {
|
|
25
|
-
id: string;
|
|
26
|
-
};
|
|
27
|
-
size: string;
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
export type ComponentValueType = {
|
|
32
|
-
id: {
|
|
33
|
-
id: string;
|
|
34
|
-
};
|
|
35
|
-
name: string;
|
|
36
|
-
value: {
|
|
37
|
-
type: string;
|
|
38
|
-
fields: ComponentFieldType;
|
|
39
|
-
};
|
|
40
|
-
};
|
|
41
|
-
export type SuiTxArgument = {
|
|
42
|
-
kind: "Input";
|
|
43
|
-
index: number;
|
|
44
|
-
type?: "object" | "pure" | undefined;
|
|
45
|
-
value?: any;
|
|
46
|
-
} | {
|
|
47
|
-
kind: "GasCoin";
|
|
48
|
-
} | {
|
|
49
|
-
kind: "Result";
|
|
50
|
-
index: number;
|
|
51
|
-
} | {
|
|
52
|
-
kind: "NestedResult";
|
|
53
|
-
index: number;
|
|
54
|
-
resultIndex: number;
|
|
55
|
-
};
|
|
56
|
-
export type ComponentContentType = {
|
|
57
|
-
type: string;
|
|
58
|
-
fields: ComponentValueType;
|
|
59
|
-
hasPublicTransfer: boolean;
|
|
60
|
-
dataType: "moveObject";
|
|
61
|
-
};
|
|
62
|
-
export interface MessageMeta {
|
|
63
|
-
readonly meta: SuiMoveMoudleFuncType;
|
|
64
|
-
}
|
|
65
|
-
export interface ContractQuery extends MessageMeta {
|
|
66
|
-
(tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): Promise<DevInspectResults | TransactionBlock>;
|
|
67
|
-
}
|
|
68
|
-
export interface ContractTx extends MessageMeta {
|
|
69
|
-
(tx: TransactionBlock, params: SuiTxArgument[], isRaw?: boolean): SuiTransactionBlockResponse | TransactionBlock;
|
|
70
|
-
}
|
|
71
|
-
export type MapMessageTx = Record<string, ContractTx>;
|
|
72
|
-
export type MapMessageQuery = Record<string, ContractQuery>;
|
|
73
|
-
export type MapMoudleFuncTx = Record<string, MapMessageTx>;
|
|
74
|
-
export type MapMoudleFuncQuery = Record<string, MapMessageQuery>;
|
|
75
|
-
export type MapMoudleFuncTest = Record<string, Record<string, string>>;
|
|
76
|
-
export type MapMoudleFuncQueryTest = Record<string, Record<string, string>>;
|
|
77
|
-
export type AccountMangerParams = {
|
|
78
|
-
mnemonics?: string;
|
|
79
|
-
secretKey?: string;
|
|
80
|
-
};
|
|
81
|
-
export type DerivePathParams = {
|
|
82
|
-
accountIndex?: number;
|
|
83
|
-
isExternal?: boolean;
|
|
84
|
-
addressIndex?: number;
|
|
85
|
-
};
|
|
86
|
-
export type NetworkType = 'testnet' | 'mainnet' | 'devnet' | 'localnet';
|
|
87
|
-
export type FaucetNetworkType = 'testnet' | 'devnet' | 'localnet';
|
|
88
|
-
export type SuiKitParams = {
|
|
89
|
-
mnemonics?: string;
|
|
90
|
-
secretKey?: string;
|
|
91
|
-
fullnodeUrls?: string[];
|
|
92
|
-
faucetUrl?: string;
|
|
93
|
-
networkType?: NetworkType;
|
|
94
|
-
};
|
|
95
|
-
export type ObjectData = {
|
|
96
|
-
objectId: string;
|
|
97
|
-
objectType: string;
|
|
98
|
-
objectVersion: number;
|
|
99
|
-
objectDigest: string;
|
|
100
|
-
initialSharedVersion?: number;
|
|
101
|
-
objectDisplay: DisplayFieldsResponse;
|
|
102
|
-
objectFields: ObjectContentFields;
|
|
103
|
-
};
|
|
104
|
-
export type SuiTxArg = Infer<typeof TransactionArgument> | Infer<typeof ObjectCallArg> | string | number | bigint | boolean;
|
|
105
|
-
export type SuiObjectArg = SharedObjectRef | Infer<typeof SuiObjectRef> | string | Infer<typeof ObjectCallArg> | Infer<typeof TransactionArgument>;
|
|
106
|
-
export type SuiVecTxArg = {
|
|
107
|
-
value: SuiTxArg[];
|
|
108
|
-
vecType: SuiInputTypes;
|
|
109
|
-
} | SuiTxArg[];
|
|
110
|
-
/**
|
|
111
|
-
* These are the basics types that can be used in the SUI
|
|
112
|
-
*/
|
|
113
|
-
export type SuiBasicTypes = 'address' | 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'u256';
|
|
114
|
-
export type SuiInputTypes = 'object' | SuiBasicTypes;
|
package/dist/utils/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function capitalizeFirstLetter(input: string): string;
|
package/src/framework/bcs.ts
DELETED
package/src/framework/loader.ts
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { FieldsWithTypes, Type, parseTypeName } from './util'
|
|
3
|
-
|
|
4
|
-
export type PrimitiveValue = string | number | boolean | bigint
|
|
5
|
-
|
|
6
|
-
export class StructClassLoader {
|
|
7
|
-
private map: Map<
|
|
8
|
-
string,
|
|
9
|
-
{
|
|
10
|
-
numTypeParams: number
|
|
11
|
-
fromFields: (fields: Record<string, any>, typeArgs?: Type[]) => any
|
|
12
|
-
fromFieldsWithTypes: (item: FieldsWithTypes) => any
|
|
13
|
-
}
|
|
14
|
-
> = new Map()
|
|
15
|
-
|
|
16
|
-
register(...classes: any) {
|
|
17
|
-
for (const cls of classes) {
|
|
18
|
-
if (
|
|
19
|
-
'$typeName' in cls === false ||
|
|
20
|
-
'$numTypeParams' in cls === false ||
|
|
21
|
-
'fromFields' in cls === false ||
|
|
22
|
-
'fromFieldsWithTypes' in cls === false
|
|
23
|
-
) {
|
|
24
|
-
throw new Error(`class ${cls.name} is not a valid struct class`)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const typeName = cls.$typeName
|
|
28
|
-
const numTypeParams = cls.$numTypeParams
|
|
29
|
-
|
|
30
|
-
this.map.set(typeName, {
|
|
31
|
-
numTypeParams,
|
|
32
|
-
fromFields: (fields: Record<string, any>, typeArgs: Type[] = []) => {
|
|
33
|
-
if (typeArgs.length !== numTypeParams) {
|
|
34
|
-
throw new Error(`expected ${numTypeParams} type args, got ${typeArgs.length}`)
|
|
35
|
-
}
|
|
36
|
-
if (numTypeParams === 0) {
|
|
37
|
-
return cls.fromFields(fields)
|
|
38
|
-
} else if (numTypeParams === 1) {
|
|
39
|
-
return cls.fromFields(typeArgs[0], fields)
|
|
40
|
-
} else {
|
|
41
|
-
return cls.fromFields(typeArgs, fields)
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
fromFieldsWithTypes: (item: FieldsWithTypes) => {
|
|
45
|
-
return cls.fromFieldsWithTypes(item)
|
|
46
|
-
},
|
|
47
|
-
})
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
fromFields(type: Type, value: Record<string, any> | PrimitiveValue) {
|
|
52
|
-
const ret = this.#handlePrimitiveValue(type, value, this.fromFields.bind(this))
|
|
53
|
-
if (ret !== undefined) {
|
|
54
|
-
return ret
|
|
55
|
-
}
|
|
56
|
-
value = value as FieldsWithTypes // type hint
|
|
57
|
-
|
|
58
|
-
const { typeName, typeArgs } = parseTypeName(type)
|
|
59
|
-
|
|
60
|
-
const loader = this.map.get(typeName)
|
|
61
|
-
if (!loader) {
|
|
62
|
-
throw new Error(`no loader registered for type ${typeName}, include relevant package in gen.toml`)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (loader.numTypeParams !== typeArgs.length) {
|
|
66
|
-
throw new Error(`expected ${loader.numTypeParams} type args, got ${typeArgs.length}`)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return loader.fromFields(value, typeArgs)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
fromFieldsWithTypes(type: Type, value: FieldsWithTypes | PrimitiveValue) {
|
|
73
|
-
const { typeName, typeArgs } = parseTypeName(type)
|
|
74
|
-
|
|
75
|
-
// some types are special-cased in the RPC so we need to handle this manually
|
|
76
|
-
// https://github.com/MystenLabs/sui/blob/416a980749ba8208917bae37a1ec1d43e50037b7/crates/sui-json-rpc-types/src/sui_move.rs#L482-L533
|
|
77
|
-
switch (typeName) {
|
|
78
|
-
case '0x1::string::String':
|
|
79
|
-
case '0x1::ascii::String':
|
|
80
|
-
case '0x2::url::Url':
|
|
81
|
-
return value
|
|
82
|
-
case '0x2::object::ID':
|
|
83
|
-
return value
|
|
84
|
-
case '0x2::object::UID':
|
|
85
|
-
return (value as unknown as { id: string }).id
|
|
86
|
-
case '0x2::balance::Balance': {
|
|
87
|
-
const loader = this.map.get('0x2::balance::Balance')
|
|
88
|
-
if (!loader) {
|
|
89
|
-
throw new Error('no loader registered for type 0x2::balance::Balance')
|
|
90
|
-
}
|
|
91
|
-
return loader.fromFields({ value }, typeArgs)
|
|
92
|
-
}
|
|
93
|
-
case '0x1::option::Option': {
|
|
94
|
-
if (value === null) {
|
|
95
|
-
return null
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const loader = this.map.get('0x1::option::Option')
|
|
99
|
-
if (!loader) {
|
|
100
|
-
throw new Error('no loader registered for type 0x1::option::Option')
|
|
101
|
-
}
|
|
102
|
-
return loader.fromFieldsWithTypes({
|
|
103
|
-
type: type,
|
|
104
|
-
fields: { vec: [value] },
|
|
105
|
-
}).vec[0]
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const ret = this.#handlePrimitiveValue(type, value, this.fromFieldsWithTypes.bind(this))
|
|
110
|
-
if (ret !== undefined) {
|
|
111
|
-
return ret
|
|
112
|
-
}
|
|
113
|
-
value = value as FieldsWithTypes // type hint
|
|
114
|
-
|
|
115
|
-
const loader = this.map.get(typeName)
|
|
116
|
-
if (!loader) {
|
|
117
|
-
throw new Error(`no loader registered for type ${typeName}, include relevant package in gen.toml`)
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return loader.fromFieldsWithTypes(value)
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
#handlePrimitiveValue(type: Type, value: any, vecCb: (type: Type, value: any) => any) {
|
|
124
|
-
const { typeName, typeArgs } = parseTypeName(type)
|
|
125
|
-
|
|
126
|
-
switch (typeName) {
|
|
127
|
-
case 'bool':
|
|
128
|
-
return value as boolean
|
|
129
|
-
case 'u8':
|
|
130
|
-
case 'u16':
|
|
131
|
-
case 'u32':
|
|
132
|
-
return value as number
|
|
133
|
-
case 'u64':
|
|
134
|
-
case 'u128':
|
|
135
|
-
case 'u256':
|
|
136
|
-
return BigInt(value)
|
|
137
|
-
case 'address':
|
|
138
|
-
return value as string
|
|
139
|
-
case 'signer':
|
|
140
|
-
return value as string
|
|
141
|
-
case 'vector':
|
|
142
|
-
value = value as any[]
|
|
143
|
-
return value.map((item: any) => vecCb(typeArgs[0], item))
|
|
144
|
-
default:
|
|
145
|
-
return undefined
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export const structClassLoaderSource = new StructClassLoader()
|
|
151
|
-
export const structClassLoaderOnchain = new StructClassLoader()
|
|
152
|
-
|
package/src/framework/util.ts
DELETED
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
is,
|
|
4
|
-
ObjectCallArg,
|
|
5
|
-
ObjectId,
|
|
6
|
-
TransactionArgument,
|
|
7
|
-
TransactionBlock,
|
|
8
|
-
normalizeSuiAddress,
|
|
9
|
-
bcs,
|
|
10
|
-
} from '@mysten/sui.js'
|
|
11
|
-
import { BCS } from '@mysten/bcs'
|
|
12
|
-
|
|
13
|
-
/** A Move type, e.g., `address`, `bool`, `u64`, `vector<u64>`, `0x2::sui::SUI`... */
|
|
14
|
-
export type Type = string
|
|
15
|
-
|
|
16
|
-
export interface FieldsWithTypes {
|
|
17
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
18
|
-
fields: Record<string, any>
|
|
19
|
-
type: string
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export type ObjectArg = ObjectId | ObjectCallArg | TransactionArgument
|
|
23
|
-
export type PureArg =
|
|
24
|
-
| bigint
|
|
25
|
-
| string
|
|
26
|
-
| number
|
|
27
|
-
| boolean
|
|
28
|
-
| null
|
|
29
|
-
| TransactionArgument
|
|
30
|
-
| Array<PureArg>
|
|
31
|
-
export type GenericArg = ObjectArg | PureArg | Array<ObjectArg> | Array<PureArg> | Array<GenericArg>
|
|
32
|
-
|
|
33
|
-
export function parseTypeName(name: Type): { typeName: string; typeArgs: Type[] } {
|
|
34
|
-
const parsed = bcs.parseTypeName(name)
|
|
35
|
-
return { typeName: parsed.name, typeArgs: parsed.params as string[] }
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function obj(txb: TransactionBlock, arg: ObjectArg) {
|
|
39
|
-
return is(arg, TransactionArgument) ? arg : txb.object(arg)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function pure(txb: TransactionBlock, arg: PureArg, type: Type) {
|
|
43
|
-
if (is(arg, TransactionArgument)) {
|
|
44
|
-
return obj(txb, arg)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function convertType(type: Type): string {
|
|
48
|
-
const { typeName, typeArgs } = parseTypeName(type)
|
|
49
|
-
switch (typeName) {
|
|
50
|
-
case '0x1::string::String':
|
|
51
|
-
case '0x1::ascii::String':
|
|
52
|
-
return BCS.STRING
|
|
53
|
-
case '0x2::object::ID':
|
|
54
|
-
return BCS.ADDRESS
|
|
55
|
-
case '0x1::option::Option':
|
|
56
|
-
return `vector<${convertType(typeArgs[0])}>`
|
|
57
|
-
case 'vector':
|
|
58
|
-
return `vector<${convertType(typeArgs[0])}>`
|
|
59
|
-
default:
|
|
60
|
-
return type
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function isOrHasNestedTransactionArgument(arg: PureArg): boolean {
|
|
65
|
-
if (Array.isArray(arg)) {
|
|
66
|
-
return arg.some(item => isOrHasNestedTransactionArgument(item))
|
|
67
|
-
}
|
|
68
|
-
return is(arg, TransactionArgument)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function convertArg(arg: PureArg, type: Type): PureArg {
|
|
72
|
-
const { typeName, typeArgs } = parseTypeName(type)
|
|
73
|
-
if (typeName === '0x1::option::Option') {
|
|
74
|
-
if (arg === null) {
|
|
75
|
-
return []
|
|
76
|
-
} else {
|
|
77
|
-
return [convertArg(arg, typeArgs[0])]
|
|
78
|
-
}
|
|
79
|
-
} else if (typeName === 'vector' && Array.isArray(arg)) {
|
|
80
|
-
return arg.map(item => convertArg(item, typeArgs[0]))
|
|
81
|
-
} else if (typeName === '0x2::object::ID' || typeName === 'address') {
|
|
82
|
-
return normalizeSuiAddress(arg as string)
|
|
83
|
-
} else {
|
|
84
|
-
return arg
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// handle some cases when TransactionArgument is nested within a vector or option
|
|
89
|
-
const { typeName, typeArgs } = parseTypeName(type)
|
|
90
|
-
switch (typeName) {
|
|
91
|
-
case '0x1::option::Option':
|
|
92
|
-
if (arg === null) {
|
|
93
|
-
return txb.pure([], `vector<${convertType(typeArgs[0])}>`)
|
|
94
|
-
}
|
|
95
|
-
if (isOrHasNestedTransactionArgument(arg)) {
|
|
96
|
-
throw new Error('nesting TransactionArgument is not currently supported')
|
|
97
|
-
}
|
|
98
|
-
break
|
|
99
|
-
case 'vector':
|
|
100
|
-
if (!Array.isArray(arg)) {
|
|
101
|
-
throw new Error('expected an array for vector type')
|
|
102
|
-
}
|
|
103
|
-
if (arg.length === 0) {
|
|
104
|
-
return txb.pure([], `vector<${convertType(typeArgs[0])}>`)
|
|
105
|
-
}
|
|
106
|
-
if (arg.some(arg => Array.isArray(arg) && isOrHasNestedTransactionArgument(arg))) {
|
|
107
|
-
throw new Error('nesting TransactionArgument is not currently supported')
|
|
108
|
-
}
|
|
109
|
-
if (
|
|
110
|
-
is(arg[0], TransactionArgument) &&
|
|
111
|
-
arg.filter(arg => !is(arg, TransactionArgument)).length > 0
|
|
112
|
-
) {
|
|
113
|
-
throw new Error('mixing TransactionArgument with other types is not currently supported')
|
|
114
|
-
}
|
|
115
|
-
if (is(arg[0], TransactionArgument)) {
|
|
116
|
-
return txb.makeMoveVec({
|
|
117
|
-
objects: arg as Array<TransactionArgument>,
|
|
118
|
-
type: typeArgs[0],
|
|
119
|
-
})
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return txb.pure(convertArg(arg, type), convertType(type))
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
export function option(txb: TransactionBlock, type: Type, arg: GenericArg | null) {
|
|
127
|
-
if (arg === null) {
|
|
128
|
-
return pure(txb, arg, `0x1::option::Option<${type}>`)
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (typeArgIsPure(type)) {
|
|
132
|
-
return pure(txb, arg as PureArg | TransactionArgument, `0x1::option::Option<${type}>`)
|
|
133
|
-
} else if (is(arg, TransactionArgument)) {
|
|
134
|
-
return arg
|
|
135
|
-
} else {
|
|
136
|
-
if (arg === null) {
|
|
137
|
-
return pure(txb, arg, `vector<${type}>`)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// wrap it with some
|
|
141
|
-
const val = generic(txb, type, arg)
|
|
142
|
-
return txb.moveCall({
|
|
143
|
-
target: `0x1::option::some`,
|
|
144
|
-
typeArguments: [type],
|
|
145
|
-
arguments: [val],
|
|
146
|
-
})
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export function generic(txb: TransactionBlock, type: Type, arg: GenericArg) {
|
|
151
|
-
if (typeArgIsPure(type)) {
|
|
152
|
-
return pure(txb, arg as PureArg | TransactionArgument, type)
|
|
153
|
-
} else {
|
|
154
|
-
const { typeName, typeArgs } = parseTypeName(type)
|
|
155
|
-
if (typeName === 'vector' && Array.isArray(arg)) {
|
|
156
|
-
const itemType = typeArgs[0]
|
|
157
|
-
|
|
158
|
-
return txb.makeMoveVec({
|
|
159
|
-
objects: arg.map(item => obj(txb, item as ObjectArg)),
|
|
160
|
-
type: itemType,
|
|
161
|
-
})
|
|
162
|
-
} else {
|
|
163
|
-
return obj(txb, arg as ObjectArg)
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
export function vector(
|
|
169
|
-
txb: TransactionBlock,
|
|
170
|
-
itemType: Type,
|
|
171
|
-
items: Array<GenericArg> | TransactionArgument
|
|
172
|
-
) {
|
|
173
|
-
if (typeArgIsPure(itemType)) {
|
|
174
|
-
return pure(txb, items as PureArg, `vector<${itemType}>`)
|
|
175
|
-
} else if (is(items, TransactionArgument)) {
|
|
176
|
-
return items
|
|
177
|
-
} else {
|
|
178
|
-
const { typeName: itemTypeName, typeArgs: itemTypeArgs } = parseTypeName(itemType)
|
|
179
|
-
if (itemTypeName === '0x1::option::Option') {
|
|
180
|
-
const objects = items.map(item => option(txb, itemTypeArgs[0], item))
|
|
181
|
-
return txb.makeMoveVec({
|
|
182
|
-
objects,
|
|
183
|
-
type: itemType,
|
|
184
|
-
})
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
return txb.makeMoveVec({
|
|
188
|
-
objects: items as Array<TransactionArgument>,
|
|
189
|
-
type: itemType,
|
|
190
|
-
})
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
export function typeArgIsPure(type: Type): boolean {
|
|
195
|
-
const { typeName, typeArgs } = parseTypeName(type)
|
|
196
|
-
switch (typeName) {
|
|
197
|
-
case 'bool':
|
|
198
|
-
case 'u8':
|
|
199
|
-
case 'u16':
|
|
200
|
-
case 'u32':
|
|
201
|
-
case 'u64':
|
|
202
|
-
case 'u128':
|
|
203
|
-
case 'u256':
|
|
204
|
-
case 'address':
|
|
205
|
-
case 'signer':
|
|
206
|
-
return true
|
|
207
|
-
case 'vector':
|
|
208
|
-
return typeArgIsPure(typeArgs[0])
|
|
209
|
-
case '0x1::string::String':
|
|
210
|
-
case '0x1::ascii::String':
|
|
211
|
-
case '0x2::object::ID':
|
|
212
|
-
return true
|
|
213
|
-
case '0x1::option::Option':
|
|
214
|
-
return typeArgIsPure(typeArgs[0])
|
|
215
|
-
default:
|
|
216
|
-
return false
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|