@typemove/sui 1.1.0 → 1.2.0-rc.2
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/cjs/move-coder.d.ts +6 -1
- package/dist/cjs/move-coder.d.ts.map +1 -1
- package/dist/cjs/move-coder.js +82 -2
- package/dist/cjs/move-coder.js.map +1 -1
- package/dist/cjs/move-coder.test.d.ts +2 -0
- package/dist/cjs/move-coder.test.d.ts.map +1 -0
- package/dist/cjs/move-coder.test.js.map +1 -0
- package/dist/cjs/sui-chain-adapter.d.ts.map +1 -1
- package/dist/cjs/sui-chain-adapter.js +4 -1
- package/dist/cjs/sui-chain-adapter.js.map +1 -1
- package/dist/esm/move-coder.d.ts +6 -1
- package/dist/esm/move-coder.d.ts.map +1 -1
- package/dist/esm/move-coder.js +83 -3
- package/dist/esm/move-coder.js.map +1 -1
- package/dist/esm/move-coder.test.d.ts +2 -0
- package/dist/esm/move-coder.test.d.ts.map +1 -0
- package/dist/esm/move-coder.test.js.map +1 -0
- package/dist/esm/sui-chain-adapter.d.ts.map +1 -1
- package/dist/esm/sui-chain-adapter.js +5 -2
- package/dist/esm/sui-chain-adapter.js.map +1 -1
- package/package.json +2 -2
- package/src/move-coder.ts +92 -4
- package/src/sui-chain-adapter.ts +5 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sui-chain-adapter.d.ts","sourceRoot":"","sources":["../../src/sui-chain-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EAGZ,cAAc,EACf,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,aAAa,EAAa,MAAM,uBAAuB,CAAA;AAEnG,qBAAa,eAAgB,SAAQ,YAAY,CAE/C,uBAAuB,EACvB,QAAQ,GAAG,aAAa,CACzB;IAGO,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAEb,OAAO,CAAC,uBAAuB,CAAC;IAK7B,YAAY,CAChB,OAAO,EAAE,MAAM,GAEd,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAQrC,2BAA2B,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE;IAQvE,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,EAAE,GAAG,kBAAkB,EAAE;IAI3E,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAgBlF,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,aAAa,GAAG,MAAM;IAI/C,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,aAAa;
|
|
1
|
+
{"version":3,"file":"sui-chain-adapter.d.ts","sourceRoot":"","sources":["../../src/sui-chain-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EAGZ,cAAc,EACf,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,aAAa,EAAa,MAAM,uBAAuB,CAAA;AAEnG,qBAAa,eAAgB,SAAQ,YAAY,CAE/C,uBAAuB,EACvB,QAAQ,GAAG,aAAa,CACzB;IAGO,WAAW,CACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAEb,OAAO,CAAC,uBAAuB,CAAC;IAK7B,YAAY,CAChB,OAAO,EAAE,MAAM,GAEd,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAQrC,2BAA2B,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE;IAQvE,iBAAiB,CAAC,OAAO,EAAE,uBAAuB,EAAE,GAAG,kBAAkB,EAAE;IAI3E,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAgBlF,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,aAAa,GAAG,MAAM;IAI/C,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,aAAa;CA8BtC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { toInternalModule } from './to-internal.js';
|
|
2
|
-
import { ChainAdapter, moduleQname, SPLITTER
|
|
2
|
+
import { ChainAdapter, moduleQname, SPLITTER } from '@typemove/move';
|
|
3
3
|
import { SuiClient } from '@mysten/sui.js/client';
|
|
4
4
|
export class SuiChainAdapter extends ChainAdapter {
|
|
5
5
|
// static INSTANCE = new SuiChainAdapter()
|
|
@@ -14,7 +14,7 @@ export class SuiChainAdapter extends ChainAdapter {
|
|
|
14
14
|
) {
|
|
15
15
|
const client = getRpcClient(this.endpoint);
|
|
16
16
|
const modules = await client.getNormalizedMoveModulesByPackage({
|
|
17
|
-
package: account
|
|
17
|
+
package: account
|
|
18
18
|
});
|
|
19
19
|
return Object.values(modules);
|
|
20
20
|
}
|
|
@@ -48,6 +48,9 @@ export class SuiChainAdapter extends ChainAdapter {
|
|
|
48
48
|
// if (val.parsedJson) {
|
|
49
49
|
// return val.parsedJson as any
|
|
50
50
|
// }
|
|
51
|
+
if (val === undefined) {
|
|
52
|
+
throw Error('val is undefined');
|
|
53
|
+
}
|
|
51
54
|
if ('parsedJson' in val) {
|
|
52
55
|
return val.parsedJson;
|
|
53
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sui-chain-adapter.js","sourceRoot":"","sources":["../../src/sui-chain-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAGL,YAAY,EACZ,WAAW,EACX,QAAQ,
|
|
1
|
+
{"version":3,"file":"sui-chain-adapter.js","sourceRoot":"","sources":["../../src/sui-chain-adapter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typemove/sui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0-rc.2",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@mysten/sui.js": "^0.41.2",
|
|
35
35
|
"chalk": "^5.3.0",
|
|
36
36
|
"radash": "^11.0.0",
|
|
37
|
-
"@typemove/move": "1.
|
|
37
|
+
"@typemove/move": "1.2.0-rc.2"
|
|
38
38
|
},
|
|
39
39
|
"url": "https://github.com/sentioxyz/typemove",
|
|
40
40
|
"scripts": {
|
package/src/move-coder.ts
CHANGED
|
@@ -6,24 +6,28 @@ import {
|
|
|
6
6
|
parseMoveType,
|
|
7
7
|
SPLITTER,
|
|
8
8
|
TypeDescriptor,
|
|
9
|
-
InternalMoveModule
|
|
9
|
+
InternalMoveModule
|
|
10
10
|
} from '@typemove/move'
|
|
11
11
|
import {
|
|
12
12
|
MoveCallSuiTransaction,
|
|
13
13
|
SuiCallArg,
|
|
14
14
|
SuiEvent,
|
|
15
15
|
SuiMoveNormalizedModule,
|
|
16
|
-
SuiMoveObject
|
|
16
|
+
SuiMoveObject
|
|
17
17
|
} from '@mysten/sui.js/client'
|
|
18
18
|
import { toInternalModule } from './to-internal.js'
|
|
19
19
|
import { SuiChainAdapter } from './sui-chain-adapter.js'
|
|
20
20
|
import { dynamic_field } from './builtin/0x2.js'
|
|
21
|
+
import { BCS, getSuiMoveConfig, StructTypeDefinition, Encoding } from '@mysten/bcs'
|
|
22
|
+
import { normalizeSuiObjectId, normalizeSuiAddress } from '@mysten/sui.js/utils'
|
|
21
23
|
|
|
22
24
|
export class MoveCoder extends AbstractMoveCoder<
|
|
23
25
|
// SuiNetwork,
|
|
24
26
|
SuiMoveNormalizedModule,
|
|
25
27
|
SuiEvent | SuiMoveObject
|
|
26
28
|
> {
|
|
29
|
+
bcs = new BCS(getSuiMoveConfig())
|
|
30
|
+
|
|
27
31
|
constructor(network: string) {
|
|
28
32
|
super(new SuiChainAdapter(network))
|
|
29
33
|
}
|
|
@@ -38,20 +42,67 @@ export class MoveCoder extends AbstractMoveCoder<
|
|
|
38
42
|
return m
|
|
39
43
|
}
|
|
40
44
|
|
|
41
|
-
protected decode(data: any, type: TypeDescriptor): any {
|
|
45
|
+
protected async decode(data: any, type: TypeDescriptor): Promise<any> {
|
|
42
46
|
switch (type.qname) {
|
|
43
47
|
case '0x1::ascii::Char':
|
|
48
|
+
if (data !== undefined && typeof data !== 'string') {
|
|
49
|
+
// bcs
|
|
50
|
+
const byte = (await super.decode(data, type)).byte as number
|
|
51
|
+
return String.fromCharCode(byte)
|
|
52
|
+
}
|
|
44
53
|
case '0x1::ascii::String':
|
|
54
|
+
if (data !== undefined && typeof data !== 'string') {
|
|
55
|
+
// bcs verified
|
|
56
|
+
const bytes = (await super.decode(data, type)).bytes as number[]
|
|
57
|
+
return new TextDecoder().decode(new Uint8Array(bytes))
|
|
58
|
+
}
|
|
45
59
|
case '0x2::object::ID':
|
|
60
|
+
if (data !== undefined && typeof data !== 'string') {
|
|
61
|
+
// bcs verified
|
|
62
|
+
const bytes = (await super.decode(data, type)).bytes as string
|
|
63
|
+
return normalizeSuiObjectId(bytes)
|
|
64
|
+
}
|
|
65
|
+
case '0x2::url::Url':
|
|
66
|
+
if (data !== undefined && typeof data !== 'string') {
|
|
67
|
+
// bcs
|
|
68
|
+
return (await super.decode(data, type)).url
|
|
69
|
+
}
|
|
46
70
|
case '0x2::coin::Coin':
|
|
71
|
+
if (data !== undefined && typeof data !== 'string') {
|
|
72
|
+
// bcs
|
|
73
|
+
const bytes = (await super.decode(data, type)).id.id.bytes as number[]
|
|
74
|
+
return new TextDecoder().decode(new Uint8Array(bytes))
|
|
75
|
+
}
|
|
47
76
|
return data
|
|
48
77
|
case '0x2::balance::Balance':
|
|
78
|
+
if (data.value) {
|
|
79
|
+
// bcs verfied
|
|
80
|
+
const balance = await super.decode(data, type)
|
|
81
|
+
return balance.value
|
|
82
|
+
}
|
|
49
83
|
return BigInt(data)
|
|
50
84
|
case '0x1::option::Option':
|
|
51
85
|
if (data === null) {
|
|
52
86
|
return data
|
|
53
87
|
}
|
|
88
|
+
if (data.vec) {
|
|
89
|
+
// bcs verifed
|
|
90
|
+
let vec = await super.decode(data, type)
|
|
91
|
+
vec = vec.vec
|
|
92
|
+
if (vec.length === 0) {
|
|
93
|
+
return null
|
|
94
|
+
}
|
|
95
|
+
return vec[0]
|
|
96
|
+
}
|
|
54
97
|
return this.decode(data, type.typeArgs[0])
|
|
98
|
+
case 'Address':
|
|
99
|
+
const str = data as string
|
|
100
|
+
return normalizeSuiAddress(str)
|
|
101
|
+
case '0x1::string::String':
|
|
102
|
+
if (typeof data !== 'string') {
|
|
103
|
+
// bcs
|
|
104
|
+
return new TextDecoder().decode(new Uint8Array(data.bytes))
|
|
105
|
+
}
|
|
55
106
|
default:
|
|
56
107
|
return super.decode(data, type)
|
|
57
108
|
}
|
|
@@ -115,9 +166,46 @@ export class MoveCoder extends AbstractMoveCoder<
|
|
|
115
166
|
const argumentsTyped = await this.decodeArray(args, params, false)
|
|
116
167
|
return {
|
|
117
168
|
...payload,
|
|
118
|
-
arguments_decoded: argumentsTyped
|
|
169
|
+
arguments_decoded: argumentsTyped
|
|
119
170
|
} as TypedFunctionPayload<any>
|
|
120
171
|
}
|
|
172
|
+
|
|
173
|
+
private async _registerBCSType(qname: string): Promise<void> {
|
|
174
|
+
if (this.bcs.hasType(qname)) {
|
|
175
|
+
return
|
|
176
|
+
}
|
|
177
|
+
const moveStruct = await this.getMoveStruct(qname)
|
|
178
|
+
const structDef: StructTypeDefinition = {}
|
|
179
|
+
|
|
180
|
+
for (const field of moveStruct.fields) {
|
|
181
|
+
structDef[field.name] = field.type.getNormalizedSignature()
|
|
182
|
+
}
|
|
183
|
+
let typeName = qname
|
|
184
|
+
const generics = moveStruct.typeParams.map((p, idx) => 'T' + idx).join(', ')
|
|
185
|
+
if (generics) {
|
|
186
|
+
typeName = typeName + '<' + generics + '>'
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
this.bcs.registerStructType(typeName, structDef)
|
|
190
|
+
|
|
191
|
+
for (const field of moveStruct.fields) {
|
|
192
|
+
await this.registerBCSTypes(field.type)
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
async registerBCSTypes(type: TypeDescriptor): Promise<void> {
|
|
197
|
+
// TODO maybe can we get rid of this
|
|
198
|
+
await this._registerBCSType('0x1::string::String')
|
|
199
|
+
|
|
200
|
+
for (const typeArg of type.dependedTypes()) {
|
|
201
|
+
await this._registerBCSType(typeArg)
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
async decodeBCS(type: TypeDescriptor, data: Uint8Array | string, encoding?: Encoding): Promise<any> {
|
|
206
|
+
await this.registerBCSTypes(type)
|
|
207
|
+
return this.bcs.de(type.getNormalizedSignature(), data, encoding)
|
|
208
|
+
}
|
|
121
209
|
}
|
|
122
210
|
|
|
123
211
|
const DEFAULT_ENDPOINT = 'https://fullnode.mainnet.sui.io/'
|
package/src/sui-chain-adapter.ts
CHANGED
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
ChainAdapter,
|
|
6
6
|
moduleQname,
|
|
7
7
|
SPLITTER,
|
|
8
|
-
TypeDescriptor
|
|
8
|
+
TypeDescriptor
|
|
9
9
|
} from '@typemove/move'
|
|
10
10
|
|
|
11
11
|
import { SuiMoveNormalizedModule, SuiEvent, SuiMoveObject, SuiClient } from '@mysten/sui.js/client'
|
|
@@ -32,7 +32,7 @@ export class SuiChainAdapter extends ChainAdapter<
|
|
|
32
32
|
): Promise<SuiMoveNormalizedModule[]> {
|
|
33
33
|
const client = getRpcClient(this.endpoint)
|
|
34
34
|
const modules = await client.getNormalizedMoveModulesByPackage({
|
|
35
|
-
package: account
|
|
35
|
+
package: account
|
|
36
36
|
})
|
|
37
37
|
return Object.values(modules)
|
|
38
38
|
}
|
|
@@ -73,6 +73,9 @@ export class SuiChainAdapter extends ChainAdapter<
|
|
|
73
73
|
// if (val.parsedJson) {
|
|
74
74
|
// return val.parsedJson as any
|
|
75
75
|
// }
|
|
76
|
+
if (val === undefined) {
|
|
77
|
+
throw Error('val is undefined')
|
|
78
|
+
}
|
|
76
79
|
if ('parsedJson' in val) {
|
|
77
80
|
return val.parsedJson as any
|
|
78
81
|
}
|