Jelajahi Sumber

node,sdk: add support for Provenance over IBC (#3879)

bruce-riley 1 tahun lalu
induk
melakukan
85afd5d1f9

+ 1 - 0
node/pkg/watchers/ibc/watcher.go

@@ -74,6 +74,7 @@ var (
 		vaa.ChainIDStargaze,
 		vaa.ChainIDSeda,
 		vaa.ChainIDDymension,
+		vaa.ChainIDProvenance,
 	}
 
 	// features is the feature string to be published in the gossip heartbeat messages. It will include all chains that are actually enabled on IBC.

+ 4 - 0
sdk/js/CHANGELOG.md

@@ -1,5 +1,9 @@
 # Changelog
 
+## 0.10.15
+
+Add Provenance to cosmwasm chains
+
 ## 0.10.14
 
 Support for move of relayer ethereum contracts

+ 7 - 1
sdk/js/src/cosmwasm/address.ts

@@ -21,6 +21,7 @@ import {
   CHAIN_ID_STARGAZE,
   CHAIN_ID_SEDA,
   CHAIN_ID_DYMENSION,
+  CHAIN_ID_PROVENANCE,
 } from "../utils";
 
 export const isNativeDenomInjective = (denom: string) => denom === "inj";
@@ -37,6 +38,7 @@ export const isNativeDenomCelestia = (denom: string) => denom === "utia";
 export const isNativeDenomStargaze = (denom: string) => denom === "ustars";
 export const isNativeDenomSeda = (denom: string) => denom === "aseda";
 export const isNativeDenomDymension = (denom: string) => denom === "adym";
+export const isNativeDenomProvenance = (denom: string) => denom === "nhash";
 
 export function isNativeCosmWasmDenom(
   chainId: CosmWasmChainId,
@@ -53,7 +55,11 @@ export function isNativeCosmWasmDenom(
     (chainId === CHAIN_ID_EVMOS && isNativeDenomEvmos(address)) ||
     (chainId === CHAIN_ID_KUJIRA && isNativeDenomKujira(address)) ||
     (chainId === CHAIN_ID_NEUTRON && isNativeDenomNeutron(address)) ||
-    (chainId === CHAIN_ID_CELESTIA && isNativeDenomCelestia(address))
+    (chainId === CHAIN_ID_CELESTIA && isNativeDenomCelestia(address)) ||
+    (chainId === CHAIN_ID_STARGAZE && isNativeDenomStargaze(address)) ||
+    (chainId === CHAIN_ID_SEDA && isNativeDenomSeda(address)) ||
+    (chainId === CHAIN_ID_DYMENSION && isNativeDenomDymension(address)) ||
+    (chainId === CHAIN_ID_PROVENANCE && isNativeDenomProvenance(address))
   );
 }
 

+ 5 - 0
sdk/js/src/utils/array.ts

@@ -40,6 +40,7 @@ import {
   CHAIN_ID_STARGAZE,
   CHAIN_ID_SEDA,
   CHAIN_ID_DYMENSION,
+  CHAIN_ID_PROVENANCE,
 } from "./consts";
 import { hashLookup } from "./near";
 import { getExternalAddressFromType, isValidAptosType } from "./aptos";
@@ -144,6 +145,8 @@ export const tryUint8ArrayToNative = (
     throw Error("uint8ArrayToNative: Seda not supported yet.");
   } else if (chainId === CHAIN_ID_DYMENSION) {
     throw Error("uint8ArrayToNative: Dymension not supported yet.");
+  } else if (chainId === CHAIN_ID_PROVENANCE) {
+    throw Error("uint8ArrayToNative: Provenance not supported yet.");
   } else if (chainId === CHAIN_ID_SUI) {
     throw Error("uint8ArrayToNative: Sui not supported yet.");
   } else if (chainId === CHAIN_ID_APTOS) {
@@ -297,6 +300,8 @@ export const tryNativeToHexString = (
     throw Error("nativeToHexString: Seda not supported yet.");
   } else if (chainId === CHAIN_ID_DYMENSION) {
     throw Error("nativeToHexString: Dymension not supported yet.");
+  } else if (chainId === CHAIN_ID_PROVENANCE) {
+    throw Error("nativeToHexString: Provenance not supported yet.");
   } else if (chainId === CHAIN_ID_SUI) {
     if (!isValidSuiType(address) && isValidSuiAddress(address)) {
       return uint8ArrayToHex(

+ 18 - 0
sdk/js/src/utils/consts.ts

@@ -46,6 +46,7 @@ export const CHAINS = {
   stargaze: 4005,
   seda: 4006,
   dymension: 4007,
+  provenance: 4008,
   sepolia: 10002,
   arbitrum_sepolia: 10003,
   base_sepolia: 10004,
@@ -118,6 +119,7 @@ export const CosmWasmChainNames = [
   "stargaze",
   "seda",
   "dymension",
+  "provenance",
 ] as const;
 export type CosmWasmChainName = typeof CosmWasmChainNames[number];
 
@@ -416,6 +418,11 @@ const MAINNET = {
     token_bridge: undefined,
     nft_bridge: undefined,
   },
+  provenance: {
+    core: undefined,
+    token_bridge: undefined,
+    nft_bridge: undefined,
+  },
 };
 
 const TESTNET = {
@@ -691,6 +698,11 @@ const TESTNET = {
     token_bridge: undefined,
     nft_bridge: undefined,
   },
+  provenance: {
+    core: undefined,
+    token_bridge: undefined,
+    nft_bridge: undefined,
+  },
 };
 
 const DEVNET = {
@@ -965,6 +977,11 @@ const DEVNET = {
     token_bridge: undefined,
     nft_bridge: undefined,
   },
+  provenance: {
+    core: undefined,
+    token_bridge: undefined,
+    nft_bridge: undefined,
+  },
 };
 
 /**
@@ -1053,6 +1070,7 @@ export const CHAIN_ID_CELESTIA = CHAINS["celestia"];
 export const CHAIN_ID_STARGAZE = CHAINS["stargaze"];
 export const CHAIN_ID_SEDA = CHAINS["seda"];
 export const CHAIN_ID_DYMENSION = CHAINS["dymension"];
+export const CHAIN_ID_PROVENANCE = CHAINS["provenance"];
 export const CHAIN_ID_SEPOLIA = CHAINS["sepolia"];
 export const CHAIN_ID_ARBITRUM_SEPOLIA = CHAINS["arbitrum_sepolia"];
 export const CHAIN_ID_BASE_SEPOLIA = CHAINS["base_sepolia"];

+ 5 - 0
sdk/rust/supported-chains/src/lib.rs

@@ -54,6 +54,7 @@ pub enum Chain {
     Stargaze,
     Seda,
     Dymension,
+    Provenance,
     Sepolia,
 
     // Allow arbitrary u16s to support future chains.
@@ -106,6 +107,7 @@ impl From<u16> for Chain {
             4005 => Chain::Stargaze,
             4006 => Chain::Seda,
             4007 => Chain::Dymension,
+            4008 => Chain::Provenance,
             10002 => Chain::Sepolia,
             c => Chain::Unknown(c),
         }
@@ -158,6 +160,7 @@ impl From<Chain> for u16 {
             Chain::Stargaze => 4005,
             Chain::Seda => 4006,
             Chain::Dymension => 4007,
+            Chain::Provenance => 4008,
             Chain::Sepolia => 10002,
             Chain::Unknown(c) => c,
         }
@@ -211,6 +214,7 @@ impl fmt::Display for Chain {
             Self::Stargaze => f.write_str("Stargaze"),
             Self::Seda => f.write_str("Seda"),
             Self::Dymension => f.write_str("Dymension"),
+            Self::Provenance => f.write_str("Provenance"),
             Self::Unknown(v) => write!(f, "Unknown({v})"),
         }
     }
@@ -269,6 +273,7 @@ impl FromStr for Chain {
             "Stargaze" | "stargaze" | "STARGAZE" => Ok(Chain::Stargaze),
             "Seda" | "seda" | "SEDA" => Ok(Chain::Seda),
             "Dymension" | "dymension" | "DYMENSION" => Ok(Chain::Dymension),
+            "Provenance" | "provenance" | "PROVENANCE" => Ok(Chain::Provenance),
             _ => {
                 let mut parts = s.split(&['(', ')']);
                 let _ = parts

+ 8 - 1
sdk/vaa/structs.go

@@ -223,6 +223,8 @@ func (c ChainID) String() string {
 		return "seda"
 	case ChainIDDymension:
 		return "dymension"
+	case ChainIDProvenance:
+		return "provenance"
 	case ChainIDSepolia:
 		return "sepolia"
 	case ChainIDArbitrumSepolia:
@@ -334,6 +336,8 @@ func ChainIDFromString(s string) (ChainID, error) {
 		return ChainIDSeda, nil
 	case "dymension":
 		return ChainIDDymension, nil
+	case "provenance":
+		return ChainIDProvenance, nil
 	case "sepolia":
 		return ChainIDSepolia, nil
 	case "arbitrum_sepolia":
@@ -398,6 +402,7 @@ func GetAllNetworkIDs() []ChainID {
 		ChainIDStargaze,
 		ChainIDSeda,
 		ChainIDDymension,
+		ChainIDProvenance,
 		ChainIDSepolia,
 		ChainIDArbitrumSepolia,
 		ChainIDBaseSepolia,
@@ -498,8 +503,10 @@ const (
 	ChainIDStargaze ChainID = 4005
 	// ChainIDSeda is the ChainID of Seda
 	ChainIDSeda ChainID = 4006
-	// ChainIDSeda is the ChainID of Dymension
+	// ChainIDDymension is the ChainID of Dymension
 	ChainIDDymension ChainID = 4007
+	// ChainIDProvenance is the ChainID of Provenance
+	ChainIDProvenance ChainID = 4008
 	// ChainIDSepolia is the ChainID of Sepolia
 	ChainIDSepolia ChainID = 10002
 	// ChainIDArbitrumSepolia is the ChainID of Arbitrum on Sepolia

+ 3 - 0
sdk/vaa/structs_test.go

@@ -74,6 +74,7 @@ func TestChainIDFromString(t *testing.T) {
 		{input: "stargaze", output: ChainIDStargaze},
 		{input: "seda", output: ChainIDSeda},
 		{input: "dymension", output: ChainIDDymension},
+		{input: "provenance", output: ChainIDProvenance},
 		{input: "sepolia", output: ChainIDSepolia},
 		{input: "arbitrum_sepolia", output: ChainIDArbitrumSepolia},
 		{input: "base_sepolia", output: ChainIDBaseSepolia},
@@ -125,6 +126,8 @@ func TestChainIDFromString(t *testing.T) {
 		{input: "Celestia", output: ChainIDCelestia},
 		{input: "Stargaze", output: ChainIDStargaze},
 		{input: "Seda", output: ChainIDSeda},
+		{input: "Dymension", output: ChainIDDymension},
+		{input: "Provenance", output: ChainIDProvenance},
 		{input: "Sepolia", output: ChainIDSepolia},
 		{input: "Arbitrum_Sepolia", output: ChainIDArbitrumSepolia},
 		{input: "Base_Sepolia", output: ChainIDBaseSepolia},