Skip to content

Commit f863ed5

Browse files
committed
chore(ts-sdk-sui): added suidisplay
Signed-off-by: kaancaglan <[email protected]>
1 parent c3573a8 commit f863ed5

File tree

1 file changed

+38
-1
lines changed

1 file changed

+38
-1
lines changed

ts-sdk/src/Ucs05.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,41 @@ import {
1818
import { isAddress, toHex } from "viem"
1919
import { AddressCanonicalBytes } from "./schema/address.js"
2020
import { Hex, HexFromString } from "./schema/hex.js"
21+
import { isValidSuiAddress, normalizeSuiAddress } from "@mysten/sui/utils"
2122

2223
// const AddressFromChain = (chain: Chain) =>
2324

25+
26+
/**
27+
* @category models
28+
* @since 2.0.0
29+
*/
30+
export const SuiAddress = S.NonEmptyString.pipe(
31+
S.filter((a) => isValidSuiAddress(a), {
32+
description:
33+
"Sui address (32-byte hex). Accepts with/without 0x; even length; hex only.",
34+
}),
35+
)
36+
/**
37+
* @category models
38+
* @since 2.0.0
39+
*/
40+
export type SuiAddress = typeof SuiAddress.Type
41+
42+
/**
43+
* @category models
44+
* @since 2.0.0
45+
*/
46+
export const SuiDisplay = S.Struct({
47+
_tag: S.tag("SuiDisplay"),
48+
address: SuiAddress,
49+
})
50+
/**
51+
* @category models
52+
* @since 2.0.0
53+
*/
54+
export type SuiDisplay = typeof SuiDisplay.Type
55+
2456
/**
2557
* @category models
2658
* @since 2.0.0
@@ -209,6 +241,7 @@ export type CosmosDisplay = typeof CosmosDisplay.Type
209241
export const AnyDisplay = S.Union(
210242
CosmosDisplay,
211243
EvmDisplay,
244+
SuiDisplay,
212245
)
213246
/**
214247
* @category models
@@ -229,6 +262,7 @@ export const AnyDisplayFromString = S.transformOrFail(
229262
Effect.raceAll([
230263
S.decodeUnknownEither(EvmDisplay)({ _tag: "EvmDisplay", address }),
231264
S.decodeUnknownEither(CosmosDisplay)({ _tag: "CosmosDisplay", address }),
265+
S.decodeUnknownEither(SuiDisplay)({ _tag: "SuiDisplay", address }),
232266
]),
233267
Effect.catchTag("ParseError", (error) => ParseResult.fail(error.issue)),
234268
),
@@ -266,6 +300,7 @@ export const ZkgmFromAnyDisplay = S.transform(
266300
Match.tagsExhaustive({
267301
CosmosDisplay: ({ address }) => toHex(address),
268302
EvmDisplay: ({ address }) => identity<Hex>(address),
303+
SuiDisplay: ({ address }) => identity<Hex>(normalizeSuiAddress(address) as Hex)
269304
}),
270305
),
271306
encode: (_) => absurd<AnyDisplay>(void 0 as never),
@@ -280,6 +315,7 @@ export const anyDisplayToZkgm = Match.type<AnyDisplay>().pipe(
280315
Match.tagsExhaustive({
281316
CosmosDisplay: ({ address }) => S.decode(HexFromString)(address),
282317
EvmDisplay: ({ address }) => Effect.succeed<Hex>(address),
318+
SuiDisplay: ({ address }) => S.decode(HexFromString)(normalizeSuiAddress(address)),
283319
}),
284320
)
285321

@@ -298,6 +334,7 @@ export const anyDisplayToCanonical = Match.type<AnyDisplay>().pipe(
298334
console.log("bytes", { result })
299335
},
300336
EvmDisplay: ({ address }) => AddressCanonicalBytes.make(address),
337+
SuiDisplay: ({ address }) => AddressCanonicalBytes.make(normalizeSuiAddress(address))
301338
}),
302339
)
303340
/**
@@ -306,7 +343,7 @@ export const anyDisplayToCanonical = Match.type<AnyDisplay>().pipe(
306343
* @category models
307344
* @since 2.0.0
308345
*/
309-
export const ValidAddress = S.Union(ERC55, Bech32)
346+
export const ValidAddress = S.Union(ERC55, Bech32, SuiAddress)
310347
/**
311348
* @category models
312349
* @since 2.0.0

0 commit comments

Comments
 (0)