feat: add cbBTC support

This commit is contained in:
c4605
2024-11-25 16:25:19 +01:00
parent 30993e6176
commit 2384c112b1
6 changed files with 73 additions and 15 deletions

View File

@@ -274,11 +274,12 @@ export async function fromCorrespondingStacksToken(
assertExclude(restEVMTokenPossibilities, EVMToken.sUSDT)
if (stacksToken === StacksToken.aBTC) {
return [EVMToken.WBTC, EVMToken.BTCB, EVMToken.aBTC]
return [EVMToken.aBTC, EVMToken.WBTC, EVMToken.BTCB, EVMToken.cbBTC]
}
assertExclude(restEVMTokenPossibilities, EVMToken.aBTC)
assertExclude(restEVMTokenPossibilities, EVMToken.WBTC)
assertExclude(restEVMTokenPossibilities, EVMToken.BTCB)
assertExclude(restEVMTokenPossibilities, EVMToken.cbBTC)
if (stacksToken === StacksToken.uBTC) {
return [EVMToken.uBTC, EVMToken.wuBTC]
@@ -320,9 +321,10 @@ export async function toCorrespondingStacksToken(
case EVMToken.USDT:
case EVMToken.sUSDT:
return StacksToken.sUSDT
case EVMToken.aBTC:
case EVMToken.BTCB:
case EVMToken.WBTC:
case EVMToken.aBTC:
case EVMToken.cbBTC:
return StacksToken.aBTC
case EVMToken.uBTC:
case EVMToken.wuBTC:
@@ -369,6 +371,8 @@ export const isSupportedEVMRoute: IsSupportedFn = async (ctx, route) => {
if (fromTokenInfo == null) return false
if (KnownChainId.isStacksChain(toChain)) {
if (!KnownTokenId.isStacksToken(toToken)) return false
const stacksToken = await toCorrespondingStacksToken(fromToken)
if (stacksToken == null) return false
@@ -396,11 +400,14 @@ export const isSupportedEVMRoute: IsSupportedFn = async (ctx, route) => {
}
if (KnownChainId.isBitcoinChain(toChain)) {
if (!KnownTokenId.isBitcoinToken(toToken)) return false
const stacksToken = await toCorrespondingStacksToken(fromToken)
return stacksToken === KnownTokenId.Stacks.aBTC
}
if (KnownChainId.isRunesChain(toChain)) {
if (!KnownTokenId.isRunesToken(toToken)) return false
const transitStacksToken = await toCorrespondingStacksToken(fromToken)
if (transitStacksToken == null) return false
@@ -409,6 +416,8 @@ export const isSupportedEVMRoute: IsSupportedFn = async (ctx, route) => {
}
if (KnownChainId.isBRC20Chain(toChain)) {
if (!KnownTokenId.isBRC20Token(toToken)) return false
const transitStacksToken = await toCorrespondingStacksToken(fromToken)
if (transitStacksToken == null) return false

View File

@@ -231,7 +231,12 @@ const _getOnChainConfigsImpl = async (
[EVMToken.vLiALEX]: maybeAddress(configs[5]),
[EVMToken.vLiSTX]: maybeAddress(configs[6]),
[EVMToken.USDT]: maybeAddress(configs[7]),
[chain === KnownChainId.EVM.BSC ? EVMToken.BTCB : EVMToken.WBTC]:
// prettier-ignore
[
chain === KnownChainId.EVM.BSC ? EVMToken.BTCB :
chain === KnownChainId.EVM.Base ? EVMToken.cbBTC :
EVMToken.WBTC
]:
maybeAddress(configs[8]),
[EVMToken.LUNR]: maybeAddress(configs[9]),
[EVMToken.SKO]: maybeAddress(configs[10]),

View File

@@ -46,6 +46,16 @@ const stxAlternativeTokenContractAddresses = {
contractName: "token-btcb",
},
},
cbBTC: {
[KnownChainId.Stacks.Mainnet]: {
deployerAddress: xlinkContractsMultisigMainnet,
contractName: "token-wbtc",
},
[KnownChainId.Stacks.Testnet]: {
deployerAddress: xlinkContractsDeployerTestnet,
contractName: "token-wbtc",
},
},
usdt: {
[KnownChainId.Stacks.Mainnet]: {
deployerAddress: xlinkContractsMultisigMainnet,
@@ -71,6 +81,9 @@ export const getTerminatingStacksTokenContractAddress = (
if (toToken === KnownTokenId.EVM.BTCB) {
return stxAlternativeTokenContractAddresses.btcb[route.fromChain]
}
if (toToken === KnownTokenId.EVM.cbBTC) {
return stxAlternativeTokenContractAddresses.cbBTC[route.fromChain]
}
}
if (fromToken === KnownTokenId.Stacks.sUSDT) {
if (toToken === KnownTokenId.EVM.USDT) {
@@ -102,6 +115,15 @@ export const getTokenIdFromTerminatingStacksTokenContractAddress = (route: {
return KnownTokenId.EVM.BTCB
}
if (
isStacksContractAddressEqual(
route.toTokenAddress,
stxAlternativeTokenContractAddresses.cbBTC[route.toChain],
)
) {
return KnownTokenId.EVM.cbBTC
}
if (
isStacksContractAddressEqual(
route.toTokenAddress,

View File

@@ -57,6 +57,8 @@ export namespace KnownTokenId {
export const WBTC = tokenId("evm-wbtc")
/** Represents the BTCB token ID on EVM-compatible blockchains. */
export const BTCB = tokenId("evm-btcb")
/** Represents the cbBTC token ID on EVM-compatible blockchains. */
export const cbBTC = tokenId("evm-cbbtc")
// wrapped tokens
/** Represents the aBTC token ID on EVM-compatible blockchains. */

View File

@@ -47,9 +47,10 @@ export const supportedRoutes = buildSupportedRoutes(
// to Bitcoin
[[..._allKnownEVMMainnetChains], [KnownChainId.Bitcoin.Mainnet]],
[
[KnownTokenId.EVM.aBTC, KnownTokenId.Bitcoin.BTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.Bitcoin.BTC],
[KnownTokenId.EVM.BTCB, KnownTokenId.Bitcoin.BTC],
[KnownTokenId.EVM.aBTC, KnownTokenId.Bitcoin.BTC],
[KnownTokenId.EVM.cbBTC, KnownTokenId.Bitcoin.BTC],
],
),
...defineRoute(
@@ -57,9 +58,10 @@ export const supportedRoutes = buildSupportedRoutes(
[[..._allKnownEVMMainnetChains], [KnownChainId.Stacks.Mainnet]],
[
// BTCs
[KnownTokenId.EVM.aBTC, KnownTokenId.Stacks.aBTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.Stacks.aBTC],
[KnownTokenId.EVM.BTCB, KnownTokenId.Stacks.aBTC],
[KnownTokenId.EVM.aBTC, KnownTokenId.Stacks.aBTC],
[KnownTokenId.EVM.cbBTC, KnownTokenId.Stacks.aBTC],
// USDTs
[KnownTokenId.EVM.USDT, KnownTokenId.Stacks.sUSDT],
[KnownTokenId.EVM.sUSDT, KnownTokenId.Stacks.sUSDT],
@@ -79,18 +81,25 @@ export const supportedRoutes = buildSupportedRoutes(
[[..._allKnownEVMMainnetChains], [..._allKnownEVMMainnetChains]],
[
// BTCs
[KnownTokenId.EVM.WBTC, KnownTokenId.EVM.BTCB],
[KnownTokenId.EVM.BTCB, KnownTokenId.EVM.WBTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.EVM.aBTC],
[KnownTokenId.EVM.aBTC, KnownTokenId.EVM.WBTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.EVM.BTCB],
[KnownTokenId.EVM.BTCB, KnownTokenId.EVM.WBTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.EVM.cbBTC],
[KnownTokenId.EVM.cbBTC, KnownTokenId.EVM.WBTC],
[KnownTokenId.EVM.BTCB, KnownTokenId.EVM.aBTC],
[KnownTokenId.EVM.aBTC, KnownTokenId.EVM.BTCB],
[KnownTokenId.EVM.BTCB, KnownTokenId.EVM.cbBTC],
[KnownTokenId.EVM.cbBTC, KnownTokenId.EVM.BTCB],
[KnownTokenId.EVM.cbBTC, KnownTokenId.EVM.aBTC],
[KnownTokenId.EVM.aBTC, KnownTokenId.EVM.cbBTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.EVM.WBTC],
[KnownTokenId.EVM.BTCB, KnownTokenId.EVM.BTCB],
[KnownTokenId.EVM.aBTC, KnownTokenId.EVM.aBTC],
[KnownTokenId.EVM.cbBTC, KnownTokenId.EVM.cbBTC],
// USDTs
[KnownTokenId.EVM.sUSDT, KnownTokenId.EVM.USDT],
@@ -120,9 +129,10 @@ export const supportedRoutes = buildSupportedRoutes(
// to Bitcoin
[[..._allKnownEVMTestnetChains], [KnownChainId.Bitcoin.Testnet]],
[
[KnownTokenId.EVM.aBTC, KnownTokenId.Bitcoin.BTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.Bitcoin.BTC],
[KnownTokenId.EVM.BTCB, KnownTokenId.Bitcoin.BTC],
[KnownTokenId.EVM.aBTC, KnownTokenId.Bitcoin.BTC],
[KnownTokenId.EVM.cbBTC, KnownTokenId.Bitcoin.BTC],
],
),
...defineRoute(
@@ -130,9 +140,10 @@ export const supportedRoutes = buildSupportedRoutes(
[[..._allKnownEVMTestnetChains], [KnownChainId.Stacks.Testnet]],
[
// BTCs
[KnownTokenId.EVM.aBTC, KnownTokenId.Stacks.aBTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.Stacks.aBTC],
[KnownTokenId.EVM.BTCB, KnownTokenId.Stacks.aBTC],
[KnownTokenId.EVM.aBTC, KnownTokenId.Stacks.aBTC],
[KnownTokenId.EVM.cbBTC, KnownTokenId.Stacks.aBTC],
// USDTs
[KnownTokenId.EVM.USDT, KnownTokenId.Stacks.sUSDT],
[KnownTokenId.EVM.sUSDT, KnownTokenId.Stacks.sUSDT],
@@ -152,18 +163,25 @@ export const supportedRoutes = buildSupportedRoutes(
[[..._allKnownEVMTestnetChains], [..._allKnownEVMTestnetChains]],
[
// BTCs
[KnownTokenId.EVM.WBTC, KnownTokenId.EVM.BTCB],
[KnownTokenId.EVM.BTCB, KnownTokenId.EVM.WBTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.EVM.aBTC],
[KnownTokenId.EVM.aBTC, KnownTokenId.EVM.WBTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.EVM.BTCB],
[KnownTokenId.EVM.BTCB, KnownTokenId.EVM.WBTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.EVM.cbBTC],
[KnownTokenId.EVM.cbBTC, KnownTokenId.EVM.WBTC],
[KnownTokenId.EVM.BTCB, KnownTokenId.EVM.aBTC],
[KnownTokenId.EVM.aBTC, KnownTokenId.EVM.BTCB],
[KnownTokenId.EVM.BTCB, KnownTokenId.EVM.cbBTC],
[KnownTokenId.EVM.cbBTC, KnownTokenId.EVM.BTCB],
[KnownTokenId.EVM.cbBTC, KnownTokenId.EVM.aBTC],
[KnownTokenId.EVM.aBTC, KnownTokenId.EVM.cbBTC],
[KnownTokenId.EVM.WBTC, KnownTokenId.EVM.WBTC],
[KnownTokenId.EVM.BTCB, KnownTokenId.EVM.BTCB],
[KnownTokenId.EVM.aBTC, KnownTokenId.EVM.aBTC],
[KnownTokenId.EVM.cbBTC, KnownTokenId.EVM.cbBTC],
// USDTs
[KnownTokenId.EVM.sUSDT, KnownTokenId.EVM.USDT],

View File

@@ -43,9 +43,10 @@ export const supportedRoutes = buildSupportedRoutes(
[[KnownChainId.Stacks.Mainnet], [..._allKnownEVMMainnetChains]],
[
// BTCs
[KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.aBTC],
[KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.WBTC],
[KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.BTCB],
[KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.aBTC],
[KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.cbBTC],
// USDTs
[KnownTokenId.Stacks.sUSDT, KnownTokenId.EVM.USDT],
[KnownTokenId.Stacks.sUSDT, KnownTokenId.EVM.sUSDT],
@@ -72,9 +73,10 @@ export const supportedRoutes = buildSupportedRoutes(
[[KnownChainId.Stacks.Testnet], [..._allKnownEVMTestnetChains]],
[
// BTCs
[KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.aBTC],
[KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.WBTC],
[KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.BTCB],
[KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.aBTC],
[KnownTokenId.Stacks.aBTC, KnownTokenId.EVM.cbBTC],
// USDTs
[KnownTokenId.Stacks.sUSDT, KnownTokenId.EVM.USDT],
[KnownTokenId.Stacks.sUSDT, KnownTokenId.EVM.sUSDT],