UNPKG

@wormhole-foundation/sdk-sui-tokenbridge

Version:

SDK for Sui chains, used in conjunction with @wormhole-foundation/sdk

69 lines 3.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTokenCoinType = exports.getTokenFromTokenRegistry = void 0; const sdk_sui_1 = require("@wormhole-foundation/sdk-sui"); const getTokenFromTokenRegistry = async (provider, tokenBridgeStateObjectId, tokenType) => { if (!(0, sdk_sui_1.isValidSuiType)(tokenType)) { throw new Error(`Invalid Sui type: ${tokenType}`); } const tokenBridgeStateFields = await (0, sdk_sui_1.getObjectFields)(provider, tokenBridgeStateObjectId); if (!tokenBridgeStateFields) { throw new Error(`Unable to fetch object fields from token bridge state. Object ID: ${tokenBridgeStateObjectId}`); } const tokenRegistryObjectId = tokenBridgeStateFields["token_registry"].fields?.id?.id; if (!tokenRegistryObjectId) { throw new Error("Unable to fetch token registry object ID"); } const tokenRegistryPackageId = (0, sdk_sui_1.getPackageIdFromType)(tokenBridgeStateFields["token_registry"]?.type); if (!tokenRegistryPackageId) { throw new Error("Unable to fetch token registry package ID"); } return provider.getDynamicFieldObject({ parentId: tokenRegistryObjectId, name: { type: `${tokenRegistryPackageId}::token_registry::Key<${tokenType}>`, value: { dummy_field: false, }, }, }); }; exports.getTokenFromTokenRegistry = getTokenFromTokenRegistry; const getTokenCoinType = async (provider, tokenBridgeStateObjectId, tokenAddress, tokenChain) => { const tokenBridgeStateFields = await (0, sdk_sui_1.getObjectFields)(provider, tokenBridgeStateObjectId); if (!tokenBridgeStateFields) throw new Error("Unable to fetch object fields from token bridge state"); const coinTypes = tokenBridgeStateFields["token_registry"]?.fields?.coin_types; const coinTypesObjectId = coinTypes?.fields?.id?.id; if (!coinTypesObjectId) { throw new Error("Unable to fetch coin types"); } const keyType = (0, sdk_sui_1.getTableKeyType)(coinTypes?.type); if (!keyType) { throw new Error("Unable to get key type"); } const response = await provider.getDynamicFieldObject({ parentId: coinTypesObjectId, name: { type: keyType, value: { addr: [...tokenAddress], chain: tokenChain, }, }, }); if (response.error) { if (response.error.code === "dynamicFieldNotFound") { return null; } throw new Error(`Unexpected getDynamicFieldObject response ${response.error}`); } const fields = (0, sdk_sui_1.getFieldsFromObjectResponse)(response); if (!fields) return null; if (!(0, sdk_sui_1.isMoveStructObject)(fields)) throw new Error("What?"); return "value" in fields ? (0, sdk_sui_1.trimSuiType)(fields["value"]) : null; }; exports.getTokenCoinType = getTokenCoinType; //# sourceMappingURL=utils.js.map