@wormhole-foundation/sdk-sui-tokenbridge
Version:
SDK for Sui chains, used in conjunction with @wormhole-foundation/sdk
69 lines • 3.01 kB
JavaScript
;
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