Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
449ae19f94 | ||
|
|
7304c5b0c7 | ||
|
|
49cfdb3fd9 | ||
|
|
2d7ebe2111 | ||
|
|
a9ce10f39a | ||
|
|
321cf26342 | ||
|
|
d2ad36d76d | ||
|
|
507d0e5bf4 | ||
|
|
79e6a047d6 | ||
|
|
4dce62de1c | ||
|
|
1c533efcd5 | ||
|
|
eca6217f77 | ||
|
|
df84f9c4ce | ||
|
|
17c0e6f282 | ||
|
|
d51c1883af | ||
|
|
9cf3a1d663 | ||
|
|
c94bcd574a | ||
|
|
41c6d04c2f | ||
|
|
3a78041de7 | ||
|
|
8b74602e3b | ||
|
|
f9081d58d4 | ||
|
|
b051d844d0 | ||
|
|
f8e0c5f84b | ||
|
|
476b6cc271 | ||
|
|
ffaff744f7 | ||
|
|
198f72c493 | ||
|
|
5cb580e99e | ||
|
|
eff710738c | ||
|
|
fb6a07d4b8 | ||
|
|
7768067bf4 |
@@ -106,7 +106,7 @@ jobs:
|
||||
|
||||
- name: Install Yarn (if needed)
|
||||
if: matrix.package_manager == 'yarn'
|
||||
run: npm install -g yarn
|
||||
run: npm install -g yarn@1.22.19
|
||||
|
||||
- name: Create test project
|
||||
run: |
|
||||
|
||||
@@ -4,6 +4,7 @@ import type { Metadata } from "next";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import { CodeExample } from "../../../components/code/code-example";
|
||||
import { CustomizedConnect } from "../../../components/sign-in/custom";
|
||||
import { HooksPreview } from "../../../components/sign-in/hooks";
|
||||
import { StyledConnectButton } from "../../../components/styled-connect-button";
|
||||
import { StyledConnectEmbed } from "../../../components/styled-connect-embed";
|
||||
@@ -70,6 +71,10 @@ export default function Page() {
|
||||
<EmbedComponent />
|
||||
</section>
|
||||
|
||||
<section className="container px-4 md:px-6 space-y-8">
|
||||
<CustomizedComponent />
|
||||
</section>
|
||||
|
||||
<section className="container px-4 md:px-6 space-y-8">
|
||||
<Hooks />
|
||||
</section>
|
||||
@@ -146,6 +151,65 @@ return (
|
||||
);
|
||||
}
|
||||
|
||||
function CustomizedComponent() {
|
||||
return (
|
||||
<>
|
||||
<div className="space-y-2">
|
||||
<h2 className="text-2xl sm:text-3xl font-semibold tracking-tight">
|
||||
Customized Component
|
||||
</h2>
|
||||
<p className="max-w-[600px]">
|
||||
Change the look and feel of the connect button without rewriting your
|
||||
own.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<CodeExample
|
||||
preview={<CustomizedConnect />}
|
||||
code={`import { createThirdwebClient } from "thirdweb";
|
||||
import { ConnectEmbed } from "thirdweb/react";
|
||||
|
||||
const THIRDWEB_CLIENT = createThirdwebClient({
|
||||
clientId: "<YOUR_CLIENT_ID>"
|
||||
});
|
||||
|
||||
function App(){
|
||||
return (
|
||||
<ConnectButton
|
||||
client={THIRDWEB_CLIENT}
|
||||
connectButton={{
|
||||
label: "Custom Connect Button",
|
||||
}}
|
||||
showAllWallets={false}
|
||||
connectModal={{
|
||||
title: "Custom Connect Modal",
|
||||
size: "compact",
|
||||
}}
|
||||
theme={darkTheme({
|
||||
colors: {
|
||||
modalBg: "#281866",
|
||||
accentButtonBg: "#281866",
|
||||
connectedButtonBgHover: "#281866",
|
||||
borderColor: "rgba(256, 256,256, 0.1)",
|
||||
accentText: "rgba(256, 256,256, 0.1)",
|
||||
connectedButtonBg: "#281866",
|
||||
tertiaryBg: "rgba(256, 256,256, 0.1)",
|
||||
primaryButtonBg: "#281866",
|
||||
secondaryButtonBg: "rgba(256, 256,256, 0.1)",
|
||||
primaryButtonText: "#E7E8E9",
|
||||
primaryText: "#E7E8E9",
|
||||
separatorLine: "rgba(256, 256,256, 0.1)",
|
||||
},
|
||||
})}
|
||||
/>
|
||||
);
|
||||
};`}
|
||||
lang="tsx"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
function Hooks() {
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { getContract } from "thirdweb";
|
||||
import { zkSyncSepolia } from "thirdweb/chains";
|
||||
import { baseSepolia } from "thirdweb/chains";
|
||||
import { THIRDWEB_CLIENT } from "../../lib/client";
|
||||
|
||||
export const chain = zkSyncSepolia;
|
||||
export const editionDropAddress = "0xd563ACBeD80e63B257B2524562BdD7Ec666eEE77";
|
||||
export const chain = baseSepolia;
|
||||
export const editionDropAddress = "0x638263e3eAa3917a53630e61B1fBa685308024fa";
|
||||
export const editionDropTokenId = 0n;
|
||||
|
||||
export const editionDropContract = getContract({
|
||||
|
||||
@@ -12,7 +12,6 @@ import {
|
||||
useReadContract,
|
||||
} from "thirdweb/react";
|
||||
import { THIRDWEB_CLIENT } from "../../lib/client";
|
||||
import { CodeExample } from "../code/code-example";
|
||||
import { editionDropContract, editionDropTokenId } from "./constants";
|
||||
|
||||
export function SponsoredTxPreview() {
|
||||
@@ -50,7 +49,7 @@ export function SponsoredTxPreview() {
|
||||
/>
|
||||
) : null}
|
||||
{smartAccount ? (
|
||||
<>
|
||||
<div className="flex flex-col justify-center p-8">
|
||||
<p className="font-semibold text-center mb-2">
|
||||
You own {ownedNfts?.[0]?.quantityOwned.toString() || "0"}{" "}
|
||||
Kittens
|
||||
@@ -73,7 +72,7 @@ export function SponsoredTxPreview() {
|
||||
>
|
||||
Mint
|
||||
</TransactionButton>
|
||||
</>
|
||||
</div>
|
||||
) : (
|
||||
<p
|
||||
style={{
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
"use client";
|
||||
import { ConnectButton } from "thirdweb/react";
|
||||
import { darkTheme, lightTheme } from "thirdweb/react";
|
||||
import { THIRDWEB_CLIENT } from "../../lib/client";
|
||||
|
||||
export const CustomizedConnect = () => {
|
||||
return (
|
||||
<ConnectButton
|
||||
client={THIRDWEB_CLIENT}
|
||||
connectButton={{
|
||||
label: "Custom Connect Button",
|
||||
}}
|
||||
showAllWallets={false}
|
||||
connectModal={{
|
||||
title: "Custom Connect Modal",
|
||||
size: "compact",
|
||||
}}
|
||||
theme={darkTheme({
|
||||
colors: {
|
||||
modalBg: "#281866",
|
||||
accentButtonBg: "#281866",
|
||||
connectedButtonBgHover: "#281866",
|
||||
borderColor: "rgba(256, 256,256, 0.1)",
|
||||
accentText: "rgba(256, 256,256, 0.1)",
|
||||
connectedButtonBg: "#281866",
|
||||
tertiaryBg: "rgba(256, 256,256, 0.1)",
|
||||
primaryButtonBg: "#281866",
|
||||
secondaryButtonBg: "rgba(256, 256,256, 0.1)",
|
||||
primaryButtonText: "#E7E8E9",
|
||||
primaryText: "#E7E8E9",
|
||||
separatorLine: "rgba(256, 256,256, 0.1)",
|
||||
},
|
||||
})}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -1,5 +1,33 @@
|
||||
# @thirdweb-dev/auth
|
||||
|
||||
## 4.1.96
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.5.38
|
||||
|
||||
## 4.1.95
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.5.37
|
||||
|
||||
## 4.1.94
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.5.36
|
||||
|
||||
## 4.1.93
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.5.35
|
||||
|
||||
## 4.1.92
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/auth",
|
||||
"version": "4.1.92",
|
||||
"version": "4.1.96",
|
||||
"main": "dist/thirdweb-dev-auth.cjs.js",
|
||||
"module": "dist/thirdweb-dev-auth.esm.js",
|
||||
"browser": {
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# @thirdweb-dev/chains
|
||||
|
||||
## 0.1.120
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#3348](https://github.com/thirdweb-dev/js/pull/3348) [`321cf26`](https://github.com/thirdweb-dev/js/commit/321cf26342d0755204aa465bc2390e052d5ed071) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
|
||||
|
||||
## 0.1.119
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#3311](https://github.com/thirdweb-dev/js/pull/3311) [`8b74602`](https://github.com/thirdweb-dev/js/commit/8b74602e3b7fbe011bf886b9d5ee0e2ea62f7447) Thanks [@github-actions](https://github.com/apps/github-actions)! - Synced Chains Package
|
||||
|
||||
## 0.1.118
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -4,12 +4,6 @@ export default {
|
||||
"chainId": 107107114116,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmNTZ9nEomAXK6bLxUbMfTS1TvrsN22HU1zTtxHUpMkUhz",
|
||||
"width": 1000,
|
||||
"height": 1000,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://kakarot.org",
|
||||
"name": "Kakarot Sepolia Deprecated",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -36,7 +36,9 @@ export default {
|
||||
},
|
||||
"rpc": [
|
||||
"https://1123.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://b2-testnet.alt.technology"
|
||||
"https://b2-testnet.alt.technology",
|
||||
"https://rpc.ankr.com/b2_testnet",
|
||||
"https://testnet-rpc.bsquared.network"
|
||||
],
|
||||
"shortName": "B2-testnet",
|
||||
"slug": "b2-testnet",
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Artela",
|
||||
"chainId": 11822,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "ArtelaScan",
|
||||
"url": "https://betanet-scan.artela.network",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"infoURL": "https://artela.network/",
|
||||
"name": "Artela Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "ART",
|
||||
"symbol": "ART",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 11822,
|
||||
"rpc": [
|
||||
"https://11822.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://betanet-rpc1.artela.network"
|
||||
],
|
||||
"shortName": "Artela",
|
||||
"slug": "artela-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,36 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "CuckooAI",
|
||||
"chainId": 1200,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Cuckoo Chain Explorer",
|
||||
"url": "https://mainnet-scan.cuckoo.network",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmZjVDfk56DjqkCPymaweJJaj9ASGjjgcwJ95XsFDzj9us",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://cuckoo.network",
|
||||
"name": "Cuckoo Chain",
|
||||
"nativeCurrency": {
|
||||
"name": "CuckooAI",
|
||||
"symbol": "CAI",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 1200,
|
||||
"rpc": [
|
||||
"https://1200.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-rpc.cuckoo.network",
|
||||
"wss://mainnet-rpc.cuckoo.network"
|
||||
],
|
||||
"shortName": "cai",
|
||||
"slug": "cuckoo-chain",
|
||||
"testnet": false,
|
||||
"title": "Cuckoo Chain"
|
||||
} as const satisfies Chain;
|
||||
@@ -17,7 +17,7 @@ export default {
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://buildonhybrid.com",
|
||||
"name": "Hybrid Testnet",
|
||||
"name": "Hybrid Testnet (Deprecated)",
|
||||
"nativeCurrency": {
|
||||
"name": "Hybrid",
|
||||
"symbol": "HYB",
|
||||
@@ -28,7 +28,8 @@ export default {
|
||||
"https://1224.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet-rpc.buildonhybrid.com"
|
||||
],
|
||||
"shortName": "hyb",
|
||||
"slug": "hybrid-testnet",
|
||||
"shortName": "hyb_deprecated",
|
||||
"slug": "hybrid-testnet-deprecated",
|
||||
"status": "deprecated",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,36 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "HYB",
|
||||
"chainId": 1225,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Hybrid Testnet",
|
||||
"url": "https://explorer.buildonhybrid.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmdGfvH9qfvbMXYKosS1nHbw3q5UtFJky4hdMDmmKDTx8Y",
|
||||
"width": 250,
|
||||
"height": 250,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://buildonhybrid.com",
|
||||
"name": "Hybrid Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Hybrid",
|
||||
"symbol": "HYB",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 1225,
|
||||
"rpc": [
|
||||
"https://1225.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://hybrid-testnet.rpc.caldera.xyz/http",
|
||||
"wss://hybrid-testnet.rpc.caldera.xyz/ws"
|
||||
],
|
||||
"shortName": "hyb",
|
||||
"slug": "hybrid-testnet",
|
||||
"status": "active",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -15,12 +15,6 @@ export default {
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmRySLe3su59dE5x5JPm2b1GeZfz6DR9qUzcbp3rt4SD3A",
|
||||
"width": 300,
|
||||
"height": 300,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://astar.network",
|
||||
"name": "zKatana",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -6,13 +6,7 @@ export default {
|
||||
{
|
||||
"name": "etherscan",
|
||||
"url": "http://testnet-api.magape.io:81",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmPsxWMvnxnZ9dZcRJJMaE24o34dQsnsAMCJh3kVDrE1aB",
|
||||
"width": 1000,
|
||||
"height": 1000,
|
||||
"format": "png"
|
||||
}
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
@@ -21,12 +15,6 @@ export default {
|
||||
"name": "EIP155"
|
||||
}
|
||||
],
|
||||
"icon": {
|
||||
"url": "ipfs://QmPsxWMvnxnZ9dZcRJJMaE24o34dQsnsAMCJh3kVDrE1aB",
|
||||
"width": 1000,
|
||||
"height": 1000,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://magape.io",
|
||||
"name": "MagApe Testnet",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -15,12 +15,6 @@ export default {
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmNTZ9nEomAXK6bLxUbMfTS1TvrsN22HU1zTtxHUpMkUhz",
|
||||
"width": 1000,
|
||||
"height": 1000,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://kakarot.org",
|
||||
"name": "Kakarot Sepolia",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "TCC Network",
|
||||
"chainId": 181155,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Tcc Scan",
|
||||
"url": "https://scan.tccworld.org/",
|
||||
"standard": "181155",
|
||||
"icon": {
|
||||
"url": "ipfs://QmchZTtvuU7oRe3rSu1HNPELJQdnutV79NjcHxoybJ4SVo/tcc-coin.png",
|
||||
"width": 100,
|
||||
"height": 100,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmchZTtvuU7oRe3rSu1HNPELJQdnutV79NjcHxoybJ4SVo/tcc-coin.png",
|
||||
"width": 100,
|
||||
"height": 100,
|
||||
"format": "png"
|
||||
},
|
||||
"name": "TCC Network",
|
||||
"nativeCurrency": {
|
||||
"name": "The ChampCoin",
|
||||
"symbol": "TCC",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 181155,
|
||||
"redFlags": [],
|
||||
"rpc": [],
|
||||
"shortName": "TCC",
|
||||
"slug": "tcc-network",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,41 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Gemuchain",
|
||||
"chainId": 1903648807,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Gemuchain Explorer",
|
||||
"url": "https://gemutest-explorer.gemuchain.io",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "https://explorer.gemuchain.io/assets/network_logo.svg",
|
||||
"width": 345,
|
||||
"height": 48,
|
||||
"format": "svg"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://raw.githubusercontent.com/UrfinDeuce/logos/05725373b48fb7e3de75737f621b21a4a6557c76/GemuChain%20logo.svg",
|
||||
"width": 345,
|
||||
"height": 48,
|
||||
"format": "svg"
|
||||
},
|
||||
"name": "Gemuchain Lab",
|
||||
"nativeCurrency": {
|
||||
"name": "GEMU",
|
||||
"symbol": "GEMU",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 1903648807,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://1903648807.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://gemutest-rpc.gemuchain.io"
|
||||
],
|
||||
"shortName": "GEMU",
|
||||
"slug": "gemuchain-lab",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,34 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "KYOTO",
|
||||
"chainId": 1997,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Kyotoscan",
|
||||
"url": "https://kyotoscan.io",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [
|
||||
{
|
||||
"name": "EIP155"
|
||||
}
|
||||
],
|
||||
"infoURL": "https://kyotoprotocol.io",
|
||||
"name": "Kyoto",
|
||||
"nativeCurrency": {
|
||||
"name": "Kyoto",
|
||||
"symbol": "KYOTO",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 1997,
|
||||
"rpc": [
|
||||
"https://1997.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.kyotochain.io"
|
||||
],
|
||||
"shortName": "kyoto",
|
||||
"slip44": 1,
|
||||
"slug": "kyoto",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -20,8 +20,8 @@ export default {
|
||||
"networkId": 2136,
|
||||
"rpc": [
|
||||
"https://2136.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://test-market.bigsb.io",
|
||||
"wss://test-market.bigsb.io"
|
||||
"https://test-market.bigsb.network",
|
||||
"wss://test-market.bigsb.network"
|
||||
],
|
||||
"shortName": "bigsb_testnet",
|
||||
"slug": "bigshortbets-testnet",
|
||||
|
||||
@@ -6,34 +6,16 @@ export default {
|
||||
{
|
||||
"name": "explorer",
|
||||
"url": "https://testnet.meldscan.io",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmRhB4AbjDrhvwfSAQi2JvKirFiDWxzJvKEvG8S8AdDdED",
|
||||
"width": 4000,
|
||||
"height": 4000,
|
||||
"format": "png"
|
||||
}
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "explorer",
|
||||
"url": "https://subnets-test.avax.network/meld",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmRhB4AbjDrhvwfSAQi2JvKirFiDWxzJvKEvG8S8AdDdED",
|
||||
"width": 4000,
|
||||
"height": 4000,
|
||||
"format": "png"
|
||||
}
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmRhB4AbjDrhvwfSAQi2JvKirFiDWxzJvKEvG8S8AdDdED",
|
||||
"width": 4000,
|
||||
"height": 4000,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://meld.com",
|
||||
"name": "Kanazawa",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -44,7 +44,8 @@ export default {
|
||||
"https://mainnet.b2-rpc.com",
|
||||
"https://rpc.bsquared.network",
|
||||
"https://b2-mainnet.alt.technology",
|
||||
"https://b2-mainnet-public.s.chainbase.com"
|
||||
"https://b2-mainnet-public.s.chainbase.com",
|
||||
"https://rpc.ankr.com/b2"
|
||||
],
|
||||
"shortName": "B2-mainnet",
|
||||
"slug": "b2",
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "AILayer",
|
||||
"chainId": 2648,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://testnet-explorer.ailayer.xyz",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmYoqc8rm8PrBg9jqfpsrxd6zdPEqDozbyNVMkBo3QMAFP",
|
||||
"width": 500,
|
||||
"height": 500,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmYoqc8rm8PrBg9jqfpsrxd6zdPEqDozbyNVMkBo3QMAFP",
|
||||
"width": 500,
|
||||
"height": 500,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://ailayer.xyz/",
|
||||
"name": "AILayer Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "BTC",
|
||||
"symbol": "BTC",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 2648,
|
||||
"rpc": [
|
||||
"https://2648.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://testnet-rpc.ailayer.xyz",
|
||||
"wss://testnet-rpc.ailayer.xyz"
|
||||
],
|
||||
"shortName": "ailayer-testnet",
|
||||
"slug": "ailayer-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,41 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "AILayer",
|
||||
"chainId": 2649,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://mainnet-explorer.ailayer.xyz",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmYoqc8rm8PrBg9jqfpsrxd6zdPEqDozbyNVMkBo3QMAFP",
|
||||
"width": 500,
|
||||
"height": 500,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmYoqc8rm8PrBg9jqfpsrxd6zdPEqDozbyNVMkBo3QMAFP",
|
||||
"width": 500,
|
||||
"height": 500,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://ailayer.xyz/",
|
||||
"name": "AILayer Mainnet",
|
||||
"nativeCurrency": {
|
||||
"name": "BTC",
|
||||
"symbol": "BTC",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 2649,
|
||||
"rpc": [
|
||||
"https://2649.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://mainnet-rpc.ailayer.xyz",
|
||||
"wss://mainnet-rpc.ailayer.xyz"
|
||||
],
|
||||
"shortName": "ailayer-mainnet",
|
||||
"slug": "ailayer",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -6,34 +6,16 @@ export default {
|
||||
{
|
||||
"name": "explorer",
|
||||
"url": "https://meldscan.io",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmRhB4AbjDrhvwfSAQi2JvKirFiDWxzJvKEvG8S8AdDdED",
|
||||
"width": 4000,
|
||||
"height": 4000,
|
||||
"format": "png"
|
||||
}
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "explorer",
|
||||
"url": "https://subnets.avax.network/meld",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmRhB4AbjDrhvwfSAQi2JvKirFiDWxzJvKEvG8S8AdDdED",
|
||||
"width": 4000,
|
||||
"height": 4000,
|
||||
"format": "png"
|
||||
}
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmRhB4AbjDrhvwfSAQi2JvKirFiDWxzJvKEvG8S8AdDdED",
|
||||
"width": 4000,
|
||||
"height": 4000,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://meld.com",
|
||||
"name": "Meld",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "GTC",
|
||||
"chainId": 3490,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "GTCScan Explorer",
|
||||
"url": "https://gtcscan.io",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeiaaq7gogws6uqcvo6imxbxfgpdhewybh7bxgtfny2i2as5nidbdje",
|
||||
"width": 312,
|
||||
"height": 312,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://bafybeiaaq7gogws6uqcvo6imxbxfgpdhewybh7bxgtfny2i2as5nidbdje",
|
||||
"width": 312,
|
||||
"height": 312,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://gtcscan.io/",
|
||||
"name": "GTCSCAN",
|
||||
"nativeCurrency": {
|
||||
"name": "GTC",
|
||||
"symbol": "GTC",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 3490,
|
||||
"rpc": [
|
||||
"https://3490.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://gtc-dataseed.gtcscan.io/"
|
||||
],
|
||||
"shortName": "gtc",
|
||||
"slip44": 1,
|
||||
"slug": "gtcscan",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -10,6 +10,12 @@ export default {
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmcumhDxUyoLTHkcMKgPqkpGnnjwSTqE2KGFnDXXFY8mMo",
|
||||
"width": 40,
|
||||
"height": 38,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://islamicoin.finance",
|
||||
"name": "iChain Network",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "iChain Testnet",
|
||||
"chainId": 3645,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "iChainscan",
|
||||
"url": "https://test.ichainscan.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmcumhDxUyoLTHkcMKgPqkpGnnjwSTqE2KGFnDXXFY8mMo",
|
||||
"width": 40,
|
||||
"height": 38,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://islamicoin.finance",
|
||||
"name": "iChain Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "ISLAMICOIN",
|
||||
"symbol": "ISLAMI",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 3645,
|
||||
"rpc": [
|
||||
"https://3645.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://istanbul.ichainscan.com"
|
||||
],
|
||||
"shortName": "ISLAMIT",
|
||||
"slug": "ichain-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -16,12 +16,6 @@ export default {
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmZt75xixnEtFzqHTrJa8kJkV4cTXmUZqeMeHM8BcvomQc",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://oho.ai",
|
||||
"name": "OHO Mainnet",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -10,12 +10,6 @@ export default {
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmXARMjJGkXEVEdjUyxkeG4ffsWvEo9vSJpVon3JwRxckS",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://tobechain.net",
|
||||
"name": "Tobe Chain",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -4,8 +4,8 @@ export default {
|
||||
"chainId": 44,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "subscan",
|
||||
"url": "https://crab.subscan.io",
|
||||
"name": "blockscout",
|
||||
"url": "https://crab-scan.darwinia.network",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -6,22 +6,10 @@ export default {
|
||||
{
|
||||
"name": "etmpscan",
|
||||
"url": "https://etmscan.network",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmT7DTqT1V2y42pRpt3sj9ifijfmbtkHN7D2vTfAUAS622",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
}
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmT7DTqT1V2y42pRpt3sj9ifijfmbtkHN7D2vTfAUAS622",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://etm.network",
|
||||
"name": "Ennothem Mainnet Proterozoic",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -10,12 +10,6 @@ export default {
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmT7DTqT1V2y42pRpt3sj9ifijfmbtkHN7D2vTfAUAS622",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://etm.network",
|
||||
"name": "Ennothem Testnet Pioneer",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 51290,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "Test Using Resources",
|
||||
"nativeCurrency": {
|
||||
"name": "Test Using Resources Token",
|
||||
"symbol": "JMH",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 51290,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://51290.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/testsize2/testnet/rpc"
|
||||
],
|
||||
"shortName": "Test Using Resources",
|
||||
"slug": "test-using-resources",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -6,13 +6,7 @@ export default {
|
||||
{
|
||||
"name": "Pentagon Testnet Explorer",
|
||||
"url": "https://explorer-testnet.pentagon.games",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmfU7W3Tm3tGWgnHBTG9vjB4PXGMvcL7Cq8R6MaSaC33DC",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
}
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
@@ -26,12 +20,6 @@ export default {
|
||||
"name": "EIP1559"
|
||||
}
|
||||
],
|
||||
"icon": {
|
||||
"url": "ipfs://QmfU7W3Tm3tGWgnHBTG9vjB4PXGMvcL7Cq8R6MaSaC33DC",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://pentagon.games",
|
||||
"name": "Pentagon Testnet",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -4,17 +4,17 @@ export default {
|
||||
"chainId": 57451,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "coinsec network",
|
||||
"name": "coinsecnetwork",
|
||||
"url": "https://explorer.coinsec.network",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmYV6beVVg3iS9RGPno7GAASpgjyBDoKmWGUcvAKe2nXWK",
|
||||
"width": 50,
|
||||
"height": 50,
|
||||
"format": "png"
|
||||
"url": "ipfs://QmeUyBe58BPndt6SpH9Tn1a8AYpNtHbMVhVyZt8Ppc4HTB",
|
||||
"width": 200,
|
||||
"height": 200,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://explorer.coinsec.network/",
|
||||
"name": "COINSEC Network",
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 57923,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QI0614I1",
|
||||
"nativeCurrency": {
|
||||
"name": "QI0614I1 Token",
|
||||
"symbol": "GZD",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 57923,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://57923.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/defi-kingdoms/dfk-chain/rpc"
|
||||
],
|
||||
"shortName": "QI0614I1",
|
||||
"slug": "qi0614i1",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -16,12 +16,6 @@ export default {
|
||||
],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmRySLe3su59dE5x5JPm2b1GeZfz6DR9qUzcbp3rt4SD3A",
|
||||
"width": 300,
|
||||
"height": 300,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://astar.network",
|
||||
"name": "Astar zKyoto",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Open Campus Codex",
|
||||
"chainId": 656476,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Open Campus Codex",
|
||||
"url": "https://opencampus-codex.blockscout.com",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
"url": "ipfs://QmXbz7VEYvf6NVHezuBy5HpJTCiagEThBxxdDdfVXNQ8Bt",
|
||||
"width": 30,
|
||||
"height": 30,
|
||||
"format": "png"
|
||||
}
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmXbz7VEYvf6NVHezuBy5HpJTCiagEThBxxdDdfVXNQ8Bt",
|
||||
"width": 30,
|
||||
"height": 30,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://raas.gelato.network/rollups/details/public/open-campus-codex",
|
||||
"name": "Open Campus Codex",
|
||||
"nativeCurrency": {
|
||||
"name": "EDU",
|
||||
"symbol": "EDU",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 656476,
|
||||
"rpc": [
|
||||
"https://656476.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.open-campus-codex.gelato.digital"
|
||||
],
|
||||
"shortName": "open-campus-codex",
|
||||
"slug": "open-campus-codex",
|
||||
"testnet": false
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,24 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "OX",
|
||||
"chainId": 6699,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"infoURL": "https://ox.fun/chain",
|
||||
"name": "OX Chain",
|
||||
"nativeCurrency": {
|
||||
"name": "OX",
|
||||
"symbol": "OX",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 6699,
|
||||
"rpc": [
|
||||
"https://6699.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc.oxscan.io"
|
||||
],
|
||||
"shortName": "ox-chain",
|
||||
"slug": "ox-chain",
|
||||
"status": "incubating",
|
||||
"testnet": false,
|
||||
"title": "OX Chain"
|
||||
} as const satisfies Chain;
|
||||
@@ -0,0 +1,29 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Darwinia Koi",
|
||||
"chainId": 701,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://koi-scan.darwinia.network",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"infoURL": "https://darwinia.network/",
|
||||
"name": "Darwinia Koi Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "Koi Network Native Token",
|
||||
"symbol": "KRING",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 701,
|
||||
"rpc": [
|
||||
"https://701.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://koi-rpc.darwinia.network"
|
||||
],
|
||||
"shortName": "darwinia-koi",
|
||||
"slip44": 1,
|
||||
"slug": "darwinia-koi-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -26,7 +26,8 @@ export default {
|
||||
"networkId": 77001,
|
||||
"rpc": [
|
||||
"https://77001.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://public-node.api.boraportal.com/bora/mainnet"
|
||||
"https://public-node.api.boraportal.com/bora/mainnet",
|
||||
"https://public-node.api.boraportal.io/bora/mainnet"
|
||||
],
|
||||
"shortName": "BORAchain",
|
||||
"slip44": 8217,
|
||||
|
||||
@@ -16,12 +16,6 @@ export default {
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://QmVhezQHkqSZ5Tvtsw18giA1yBjV1URSsBQ7HenUh6p6oC",
|
||||
"width": 512,
|
||||
"height": 512,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://octa.space",
|
||||
"name": "OctaSpace",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -10,6 +10,7 @@ export default {
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://bartio.faucet.berachain.com",
|
||||
"https://bartio.faucet.berachain.com/"
|
||||
],
|
||||
"features": [],
|
||||
@@ -19,6 +20,7 @@ export default {
|
||||
"height": 360,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://www.berachain.com",
|
||||
"name": "Berachain bArtio",
|
||||
"nativeCurrency": {
|
||||
"name": "BERA",
|
||||
@@ -31,7 +33,8 @@ export default {
|
||||
"https://80084.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://quicknode-rpc.berachain.com",
|
||||
"https://bartio.rpc.berachain.com",
|
||||
"https://rpc.ankr.com/berachain_testnet"
|
||||
"https://rpc.ankr.com/berachain_testnet",
|
||||
"https://bera-testnet.nodeinfra.com"
|
||||
],
|
||||
"shortName": "Berachain",
|
||||
"slug": "berachain-bartio",
|
||||
|
||||
@@ -25,6 +25,6 @@ export default {
|
||||
"https://subnets.avax.network/testsize/testnet/rpc"
|
||||
],
|
||||
"shortName": "Test Using Resources",
|
||||
"slug": "test-using-resources",
|
||||
"slug": "test-using-resources-test using resources",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -12,12 +12,6 @@ export default {
|
||||
"faucets": [
|
||||
"https://faucet.blocktonscan.com/"
|
||||
],
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreig3hoedafisrgc6iffdo2jcblm6kov35h72gcblc3zkmt7t4ucwhy",
|
||||
"width": 800,
|
||||
"height": 800,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://blocktoncoin.com",
|
||||
"name": "Blockton Blockchain",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { Chain } from "../src/types";
|
||||
export default {
|
||||
"chain": "Avalanche",
|
||||
"chainId": 85405,
|
||||
"explorers": [],
|
||||
"faucets": [],
|
||||
"features": [],
|
||||
"icon": {
|
||||
"url": "https://images.ctfassets.net/9bazykntljf6/62CceHSYsRS4D9fgDSkLRB/877cb8f26954e1743ff535fd7fdaf78f/avacloud-placeholder.svg",
|
||||
"width": 256,
|
||||
"height": 256,
|
||||
"format": "svg"
|
||||
},
|
||||
"infoURL": "https://avacloud.io",
|
||||
"name": "QR0614T1tS",
|
||||
"nativeCurrency": {
|
||||
"name": "QR0614T1tS Token",
|
||||
"symbol": "FTW",
|
||||
"decimals": 18
|
||||
},
|
||||
"networkId": 85405,
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://85405.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://subnets.avax.network/qr0614t1ts/testnet/rpc"
|
||||
],
|
||||
"shortName": "QR0614T1tS",
|
||||
"slug": "qr0614t1ts",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -6,24 +6,12 @@ export default {
|
||||
{
|
||||
"name": "mmtscan",
|
||||
"url": "https://mmtscan.io",
|
||||
"standard": "EIP3091",
|
||||
"icon": {
|
||||
"url": "ipfs://QmaF5gi2CbDKsJ2UchNkjBqmWjv8JEDP3vePBmxeUHiaK4",
|
||||
"width": 250,
|
||||
"height": 250,
|
||||
"format": "png"
|
||||
}
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://faucet.mmtscan.io/"
|
||||
],
|
||||
"icon": {
|
||||
"url": "ipfs://QmaF5gi2CbDKsJ2UchNkjBqmWjv8JEDP3vePBmxeUHiaK4",
|
||||
"width": 250,
|
||||
"height": 250,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://mmtchain.io/",
|
||||
"name": "Mammoth Mainnet",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -6,24 +6,12 @@ export default {
|
||||
{
|
||||
"name": "Shidoblock Testnet Explorer",
|
||||
"url": "https://testnet.shidoscan.com",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreiatrf5pp7ywvrwvsv4otrex73u6v6bvhorqkxiop2hy2i572zjrba",
|
||||
"width": 1080,
|
||||
"height": 1080,
|
||||
"format": "png"
|
||||
}
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
"https://testnet.shidoscan.com/faucet"
|
||||
],
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreiatrf5pp7ywvrwvsv4otrex73u6v6bvhorqkxiop2hy2i572zjrba",
|
||||
"width": 1080,
|
||||
"height": 1080,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://www.nexablock.io",
|
||||
"name": "Shido Testnet Block",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -6,22 +6,10 @@ export default {
|
||||
{
|
||||
"name": "Shidoblock Mainnet Explorer",
|
||||
"url": "https://shidoscan.com",
|
||||
"standard": "none",
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreiatrf5pp7ywvrwvsv4otrex73u6v6bvhorqkxiop2hy2i572zjrba",
|
||||
"width": 1080,
|
||||
"height": 1080,
|
||||
"format": "png"
|
||||
}
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
"icon": {
|
||||
"url": "ipfs://bafkreiatrf5pp7ywvrwvsv4otrex73u6v6bvhorqkxiop2hy2i572zjrba",
|
||||
"width": 1080,
|
||||
"height": 1080,
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "https://shido.io",
|
||||
"name": "Shido Mainnet Block",
|
||||
"nativeCurrency": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/chains",
|
||||
"version": "0.1.118",
|
||||
"version": "0.1.120",
|
||||
"main": "dist/thirdweb-dev-chains.cjs.js",
|
||||
"module": "dist/thirdweb-dev-chains.esm.js",
|
||||
"exports": {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,5 +1,43 @@
|
||||
# thirdweb
|
||||
|
||||
## 0.14.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`321cf26`](https://github.com/thirdweb-dev/js/commit/321cf26342d0755204aa465bc2390e052d5ed071)]:
|
||||
- @thirdweb-dev/chains@0.1.120
|
||||
- @thirdweb-dev/sdk@4.0.98
|
||||
- @thirdweb-dev/wallets@2.5.38
|
||||
- @thirdweb-dev/auth@4.1.96
|
||||
|
||||
## 0.14.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/sdk@4.0.97
|
||||
- @thirdweb-dev/wallets@2.5.37
|
||||
- @thirdweb-dev/auth@4.1.95
|
||||
|
||||
## 0.14.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`8b74602`](https://github.com/thirdweb-dev/js/commit/8b74602e3b7fbe011bf886b9d5ee0e2ea62f7447)]:
|
||||
- @thirdweb-dev/chains@0.1.119
|
||||
- @thirdweb-dev/sdk@4.0.96
|
||||
- @thirdweb-dev/wallets@2.5.36
|
||||
- @thirdweb-dev/auth@4.1.94
|
||||
|
||||
## 0.14.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`7768067`](https://github.com/thirdweb-dev/js/commit/7768067bf4f571a8c8ee6b646a58e2fc5f6bd052)]:
|
||||
- @thirdweb-dev/sdk@4.0.95
|
||||
- @thirdweb-dev/wallets@2.5.35
|
||||
- @thirdweb-dev/auth@4.1.93
|
||||
|
||||
## 0.14.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/cli",
|
||||
"main": "dist/cli/index.js",
|
||||
"version": "0.14.7",
|
||||
"version": "0.14.11",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/legacy_packages/cli",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"@typescript-eslint/parser": "7.9.0",
|
||||
"eslint-config-next": "14.2.1",
|
||||
"eslint-config-prettier": "9.1.0",
|
||||
"eslint-config-turbo": "1.13.2",
|
||||
"eslint-config-turbo": "2.0.4",
|
||||
"eslint-plugin-react": "7.34.1"
|
||||
},
|
||||
"publishConfig": {
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# @thirdweb-dev/react-core
|
||||
|
||||
## 4.9.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`321cf26`](https://github.com/thirdweb-dev/js/commit/321cf26342d0755204aa465bc2390e052d5ed071)]:
|
||||
- @thirdweb-dev/chains@0.1.120
|
||||
- @thirdweb-dev/sdk@4.0.98
|
||||
- @thirdweb-dev/wallets@2.5.38
|
||||
- @thirdweb-dev/auth@4.1.96
|
||||
|
||||
## 4.9.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/sdk@4.0.97
|
||||
- @thirdweb-dev/wallets@2.5.37
|
||||
- @thirdweb-dev/auth@4.1.95
|
||||
|
||||
## 4.9.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`8b74602`](https://github.com/thirdweb-dev/js/commit/8b74602e3b7fbe011bf886b9d5ee0e2ea62f7447)]:
|
||||
- @thirdweb-dev/chains@0.1.119
|
||||
- @thirdweb-dev/sdk@4.0.96
|
||||
- @thirdweb-dev/wallets@2.5.36
|
||||
- @thirdweb-dev/auth@4.1.94
|
||||
|
||||
## 4.9.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`7768067`](https://github.com/thirdweb-dev/js/commit/7768067bf4f571a8c8ee6b646a58e2fc5f6bd052)]:
|
||||
- @thirdweb-dev/sdk@4.0.95
|
||||
- @thirdweb-dev/wallets@2.5.35
|
||||
- @thirdweb-dev/auth@4.1.93
|
||||
|
||||
## 4.8.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/react-core",
|
||||
"version": "4.8.0",
|
||||
"version": "4.9.3",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/legacy_packages/react-core",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
Binary file not shown.
@@ -1,5 +1,47 @@
|
||||
# @thirdweb-dev/react
|
||||
|
||||
## 4.9.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`321cf26`](https://github.com/thirdweb-dev/js/commit/321cf26342d0755204aa465bc2390e052d5ed071)]:
|
||||
- @thirdweb-dev/chains@0.1.120
|
||||
- @thirdweb-dev/sdk@4.0.98
|
||||
- @thirdweb-dev/react-core@4.9.3
|
||||
- @thirdweb-dev/wallets@2.5.38
|
||||
|
||||
## 4.9.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/sdk@4.0.97
|
||||
- @thirdweb-dev/react-core@4.9.2
|
||||
- @thirdweb-dev/wallets@2.5.37
|
||||
|
||||
## 4.9.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`8b74602`](https://github.com/thirdweb-dev/js/commit/8b74602e3b7fbe011bf886b9d5ee0e2ea62f7447)]:
|
||||
- @thirdweb-dev/chains@0.1.119
|
||||
- @thirdweb-dev/sdk@4.0.96
|
||||
- @thirdweb-dev/react-core@4.9.1
|
||||
- @thirdweb-dev/wallets@2.5.36
|
||||
|
||||
## 4.9.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- [#3315](https://github.com/thirdweb-dev/js/pull/3315) [`eff7107`](https://github.com/thirdweb-dev/js/commit/eff710738ce3d4341257e5912311c95b28a34b5d) Thanks [@MananTank](https://github.com/MananTank)! - Allow configuring WalletConnect `qrcode` and `qrModalOptions` from wallet configurator functions like `metamaskWallet`, `coreWallet`, `zerionWallet` etc
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`7768067`](https://github.com/thirdweb-dev/js/commit/7768067bf4f571a8c8ee6b646a58e2fc5f6bd052)]:
|
||||
- @thirdweb-dev/sdk@4.0.95
|
||||
- @thirdweb-dev/react-core@4.9.0
|
||||
- @thirdweb-dev/wallets@2.5.35
|
||||
|
||||
## 4.8.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/react",
|
||||
"version": "4.8.0",
|
||||
"version": "4.9.3",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/legacy_packages/react",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -6,6 +6,7 @@ import type {
|
||||
import { Coin98Wallet, getInjectedCoin98Provider } from "@thirdweb-dev/wallets";
|
||||
import { ExtensionOrWCConnectionUI } from "../_common/ExtensionORWCConnectionUI";
|
||||
import { useTWLocale } from "../../../evm/providers/locale-provider";
|
||||
import type { QRModalOptions } from "@thirdweb-dev/wallets/src/evm/connectors/wallet-connect/qrModalOptions";
|
||||
|
||||
const coin98WalletUris = {
|
||||
ios: "coin98://",
|
||||
@@ -29,6 +30,22 @@ export type Coin98WalletConfigOptions = {
|
||||
* If true, the wallet will be tagged as "recommended" in ConnectWallet Modal
|
||||
*/
|
||||
recommended?: boolean;
|
||||
|
||||
/**
|
||||
* Specify whether to open the official Wallet Connect Modal when connecting the wallet if no injected MetaMask provider is found when connecting the wallet.
|
||||
*
|
||||
* This should not be set if you are using ConnectWallet component and only when manually connecting the wallet using a hook like `useConnect`.
|
||||
*
|
||||
* You can set it to `true` or a configuration object to enable the Wallet Connect Modal.
|
||||
*/
|
||||
wcModal?:
|
||||
| {
|
||||
/**
|
||||
* Configure the style of Wallet Connect Modal.
|
||||
*/
|
||||
qrModalOptions?: QRModalOptions;
|
||||
}
|
||||
| boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -78,7 +95,11 @@ export const coin98Wallet = (
|
||||
const wallet = new Coin98Wallet({
|
||||
...walletOptions,
|
||||
projectId: options?.projectId,
|
||||
qrcode: false,
|
||||
qrcode: options?.wcModal ? true : false,
|
||||
qrModalOptions:
|
||||
typeof options?.wcModal === "object"
|
||||
? options?.wcModal?.qrModalOptions
|
||||
: undefined,
|
||||
});
|
||||
|
||||
return wallet;
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
import { handelWCSessionRequest } from "../handleWCSessionRequest";
|
||||
import { useTWLocale } from "../../../evm/providers/locale-provider";
|
||||
import { ExtensionOrWCConnectionUI } from "../_common/ExtensionORWCConnectionUI";
|
||||
import type { QRModalOptions } from "@thirdweb-dev/wallets/src/evm/connectors/wallet-connect/qrModalOptions";
|
||||
|
||||
const coreWalletUris = {
|
||||
ios: "core://",
|
||||
@@ -33,6 +34,22 @@ export type CoreWalletConfigOptions = {
|
||||
* If true, the wallet will be tagged as "recommended" in ConnectWallet Modal
|
||||
*/
|
||||
recommended?: boolean;
|
||||
|
||||
/**
|
||||
* Specify whether to open the official Wallet Connect Modal when connecting the wallet if no injected MetaMask provider is found when connecting the wallet.
|
||||
*
|
||||
* This should not be set if you are using ConnectWallet component and only when manually connecting the wallet using a hook like `useConnect`.
|
||||
*
|
||||
* You can set it to `true` or a configuration object to enable the Wallet Connect Modal.
|
||||
*/
|
||||
wcModal?:
|
||||
| {
|
||||
/**
|
||||
* Configure the style of Wallet Connect Modal.
|
||||
*/
|
||||
qrModalOptions?: QRModalOptions;
|
||||
}
|
||||
| boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -81,7 +98,11 @@ export const coreWallet = (
|
||||
const wallet = new CoreWallet({
|
||||
...walletOptions,
|
||||
projectId: options?.projectId,
|
||||
qrcode: false,
|
||||
qrcode: options?.wcModal ? true : false,
|
||||
qrModalOptions:
|
||||
typeof options?.wcModal === "object"
|
||||
? options?.wcModal?.qrModalOptions
|
||||
: undefined,
|
||||
});
|
||||
|
||||
handelWCSessionRequest(wallet, coreWalletUris);
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
import { useTWLocale } from "../../../evm/providers/locale-provider";
|
||||
import { ExtensionOrWCConnectionUI } from "../_common/ExtensionORWCConnectionUI";
|
||||
import { handelWCSessionRequest } from "../handleWCSessionRequest";
|
||||
import type { QRModalOptions } from "@thirdweb-dev/wallets/src/evm/connectors/wallet-connect/qrModalOptions";
|
||||
|
||||
const cryptoDefiWalletUris = {
|
||||
ios: "dfw://",
|
||||
@@ -33,6 +34,22 @@ export type CryptoDefiWalletConfigOptions = {
|
||||
* If true, the wallet will be tagged as "recommended" in ConnectWallet Modal
|
||||
*/
|
||||
recommended?: boolean;
|
||||
|
||||
/**
|
||||
* Specify whether to open the official Wallet Connect Modal when connecting the wallet if no injected MetaMask provider is found when connecting the wallet.
|
||||
*
|
||||
* This should not be set if you are using ConnectWallet component and only when manually connecting the wallet using a hook like `useConnect`.
|
||||
*
|
||||
* You can set it to `true` or a configuration object to enable the Wallet Connect Modal.
|
||||
*/
|
||||
wcModal?:
|
||||
| {
|
||||
/**
|
||||
* Configure the style of Wallet Connect Modal.
|
||||
*/
|
||||
qrModalOptions?: QRModalOptions;
|
||||
}
|
||||
| boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -82,7 +99,11 @@ export const cryptoDefiWallet = (
|
||||
const wallet = new CryptoDefiWallet({
|
||||
...walletOptions,
|
||||
projectId: options?.projectId,
|
||||
qrcode: false,
|
||||
qrcode: options?.wcModal ? true : false,
|
||||
qrModalOptions:
|
||||
typeof options?.wcModal === "object"
|
||||
? options?.wcModal?.qrModalOptions
|
||||
: undefined,
|
||||
});
|
||||
|
||||
handelWCSessionRequest(wallet, cryptoDefiWalletUris);
|
||||
|
||||
@@ -6,6 +6,7 @@ import type {
|
||||
import { ImTokenWallet, assertWindowEthereum } from "@thirdweb-dev/wallets";
|
||||
import { useTWLocale } from "../../../evm/providers/locale-provider";
|
||||
import { ExtensionOrWCConnectionUI } from "../_common/ExtensionORWCConnectionUI";
|
||||
import type { QRModalOptions } from "@thirdweb-dev/wallets/src/evm/connectors/wallet-connect/qrModalOptions";
|
||||
|
||||
const imTokenWalletUris = {
|
||||
ios: "imtokenv2://",
|
||||
@@ -15,6 +16,22 @@ const imTokenWalletUris = {
|
||||
export type ImTokenWalletConfigOptions = {
|
||||
projectId?: string;
|
||||
recommended?: boolean;
|
||||
|
||||
/**
|
||||
* Specify whether to open the official Wallet Connect Modal when connecting the wallet if no injected MetaMask provider is found when connecting the wallet.
|
||||
*
|
||||
* This should not be set if you are using ConnectWallet component and only when manually connecting the wallet using a hook like `useConnect`.
|
||||
*
|
||||
* You can set it to `true` or a configuration object to enable the Wallet Connect Modal.
|
||||
*/
|
||||
wcModal?:
|
||||
| {
|
||||
/**
|
||||
* Configure the style of Wallet Connect Modal.
|
||||
*/
|
||||
qrModalOptions?: QRModalOptions;
|
||||
}
|
||||
| boolean;
|
||||
};
|
||||
|
||||
export const imTokenWallet = (
|
||||
@@ -30,7 +47,11 @@ export const imTokenWallet = (
|
||||
const wallet = new ImTokenWallet({
|
||||
...walletOptions,
|
||||
projectId: options?.projectId,
|
||||
qrcode: false,
|
||||
qrcode: options?.wcModal ? true : false,
|
||||
qrModalOptions:
|
||||
typeof options?.wcModal === "object"
|
||||
? options?.wcModal?.qrModalOptions
|
||||
: undefined,
|
||||
});
|
||||
|
||||
return wallet;
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
import { MetamaskConnectUI } from "./MetamaskConnectUI";
|
||||
import { metamaskUris } from "./metamaskUris";
|
||||
import { handelWCSessionRequest } from "../handleWCSessionRequest";
|
||||
import type { QRModalOptions } from "@thirdweb-dev/wallets/src/evm/connectors/wallet-connect/qrModalOptions";
|
||||
|
||||
/**
|
||||
* @wallet
|
||||
@@ -35,6 +36,22 @@ export type MetamaskWalletConfigOptions = {
|
||||
* Default is `"walletconnect"`
|
||||
*/
|
||||
connectionMethod?: "walletConnect" | "metamaskBrowser";
|
||||
|
||||
/**
|
||||
* Specify whether to open the official Wallet Connect Modal when connecting the wallet if no injected MetaMask provider is found when connecting the wallet.
|
||||
*
|
||||
* This should not be set if you are using ConnectWallet component and only when manually connecting the wallet using a hook like `useConnect`.
|
||||
*
|
||||
* You can set it to `true` or a configuration object to enable the Wallet Connect Modal.
|
||||
*/
|
||||
wcModal?:
|
||||
| {
|
||||
/**
|
||||
* Configure the style of Wallet Connect Modal.
|
||||
*/
|
||||
qrModalOptions?: QRModalOptions;
|
||||
}
|
||||
| boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -89,7 +106,11 @@ export const metamaskWallet = (
|
||||
const wallet = new MetaMaskWallet({
|
||||
...walletOptions,
|
||||
projectId: options?.projectId,
|
||||
qrcode: false,
|
||||
qrcode: options?.wcModal ? true : false,
|
||||
qrModalOptions:
|
||||
typeof options?.wcModal === "object"
|
||||
? options?.wcModal?.qrModalOptions
|
||||
: undefined,
|
||||
});
|
||||
|
||||
if (connectionMethod === "walletConnect") {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { WalletOptions, WalletConfig } from "@thirdweb-dev/react-core";
|
||||
import { OKXWallet, getInjectedOKXProvider } from "@thirdweb-dev/wallets";
|
||||
import { OKXConnectUI } from "./OKXConnectUI";
|
||||
import type { QRModalOptions } from "@thirdweb-dev/wallets/src/evm/connectors/wallet-connect/qrModalOptions";
|
||||
|
||||
/**
|
||||
* @wallet
|
||||
@@ -18,6 +19,22 @@ export type OKXWalletConfigOptions = {
|
||||
* If true, the wallet will be tagged as "recommended" in ConnectWallet Modal
|
||||
*/
|
||||
recommended?: boolean;
|
||||
|
||||
/**
|
||||
* Specify whether to open the official Wallet Connect Modal when connecting the wallet if no injected MetaMask provider is found when connecting the wallet.
|
||||
*
|
||||
* This should not be set if you are using ConnectWallet component and only when manually connecting the wallet using a hook like `useConnect`.
|
||||
*
|
||||
* You can set it to `true` or a configuration object to enable the Wallet Connect Modal.
|
||||
*/
|
||||
wcModal?:
|
||||
| {
|
||||
/**
|
||||
* Configure the style of Wallet Connect Modal.
|
||||
*/
|
||||
qrModalOptions?: QRModalOptions;
|
||||
}
|
||||
| boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -67,7 +84,11 @@ export const okxWallet = (
|
||||
const wallet = new OKXWallet({
|
||||
...walletOptions,
|
||||
projectId: options?.projectId,
|
||||
qrcode: false,
|
||||
qrcode: options?.wcModal ? true : false,
|
||||
qrModalOptions:
|
||||
typeof options?.wcModal === "object"
|
||||
? options?.wcModal?.qrModalOptions
|
||||
: undefined,
|
||||
});
|
||||
|
||||
return wallet;
|
||||
|
||||
@@ -6,6 +6,7 @@ import type {
|
||||
import { OneKeyWallet, getInjectedOneKeyProvider } from "@thirdweb-dev/wallets";
|
||||
import { useTWLocale } from "../../../evm/providers/locale-provider";
|
||||
import { ExtensionOrWCConnectionUI } from "../_common/ExtensionORWCConnectionUI";
|
||||
import type { QRModalOptions } from "@thirdweb-dev/wallets/src/evm/connectors/wallet-connect/qrModalOptions";
|
||||
|
||||
export const oneKeyWalletUris = {
|
||||
ios: "onekey-wallet://",
|
||||
@@ -29,6 +30,22 @@ export type OneKeyWalletConfigOptions = {
|
||||
* If true, the wallet will be tagged as "recommended" in ConnectWallet Modal
|
||||
*/
|
||||
recommended?: boolean;
|
||||
|
||||
/**
|
||||
* Specify whether to open the official Wallet Connect Modal when connecting the wallet if no injected MetaMask provider is found when connecting the wallet.
|
||||
*
|
||||
* This should not be set if you are using ConnectWallet component and only when manually connecting the wallet using a hook like `useConnect`.
|
||||
*
|
||||
* You can set it to `true` or a configuration object to enable the Wallet Connect Modal.
|
||||
*/
|
||||
wcModal?:
|
||||
| {
|
||||
/**
|
||||
* Configure the style of Wallet Connect Modal.
|
||||
*/
|
||||
qrModalOptions?: QRModalOptions;
|
||||
}
|
||||
| boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -78,7 +95,11 @@ export const oneKeyWallet = (
|
||||
const wallet = new OneKeyWallet({
|
||||
...walletOptions,
|
||||
projectId: options?.projectId,
|
||||
qrcode: false,
|
||||
qrcode: options?.wcModal ? true : false,
|
||||
qrModalOptions:
|
||||
typeof options?.wcModal === "object"
|
||||
? options?.wcModal?.qrModalOptions
|
||||
: undefined,
|
||||
});
|
||||
|
||||
return wallet;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { WalletOptions, WalletConfig } from "@thirdweb-dev/react-core";
|
||||
import { RabbyWallet, getInjectedRabbyProvider } from "@thirdweb-dev/wallets";
|
||||
import { RabbyConnectUI } from "./RabbyConnectUI";
|
||||
import type { QRModalOptions } from "@thirdweb-dev/wallets/src/evm/connectors/wallet-connect/qrModalOptions";
|
||||
|
||||
/**
|
||||
* @wallet
|
||||
@@ -18,6 +19,22 @@ export type RabbyWalletConfigOptions = {
|
||||
* If true, the wallet will be tagged as "recommended" in ConnectWallet Modal
|
||||
*/
|
||||
recommended?: boolean;
|
||||
|
||||
/**
|
||||
* Specify whether to open the official Wallet Connect Modal when connecting the wallet if no injected MetaMask provider is found when connecting the wallet.
|
||||
*
|
||||
* This should not be set if you are using ConnectWallet component and only when manually connecting the wallet using a hook like `useConnect`.
|
||||
*
|
||||
* You can set it to `true` or a configuration object to enable the Wallet Connect Modal.
|
||||
*/
|
||||
wcModal?:
|
||||
| {
|
||||
/**
|
||||
* Configure the style of Wallet Connect Modal.
|
||||
*/
|
||||
qrModalOptions?: QRModalOptions;
|
||||
}
|
||||
| boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -64,7 +81,11 @@ export const rabbyWallet = (
|
||||
const wallet = new RabbyWallet({
|
||||
...walletOptions,
|
||||
projectId: options?.projectId,
|
||||
qrcode: false,
|
||||
qrcode: options?.wcModal ? true : false,
|
||||
qrModalOptions:
|
||||
typeof options?.wcModal === "object"
|
||||
? options?.wcModal?.qrModalOptions
|
||||
: undefined,
|
||||
});
|
||||
|
||||
return wallet;
|
||||
|
||||
@@ -7,6 +7,7 @@ import { TrustWallet, assertWindowEthereum } from "@thirdweb-dev/wallets";
|
||||
import { handelWCSessionRequest } from "../handleWCSessionRequest";
|
||||
import { useTWLocale } from "../../../evm/providers/locale-provider";
|
||||
import { ExtensionOrWCConnectionUI } from "../_common/ExtensionORWCConnectionUI";
|
||||
import type { QRModalOptions } from "@thirdweb-dev/wallets/src/evm/connectors/wallet-connect/qrModalOptions";
|
||||
|
||||
const trustWalletUris = {
|
||||
ios: "trust://",
|
||||
@@ -30,6 +31,22 @@ export type TrustWalletConfigOptions = {
|
||||
* If true, the wallet will be tagged as "recommended" in ConnectWallet Modal
|
||||
*/
|
||||
recommended?: boolean;
|
||||
|
||||
/**
|
||||
* Specify whether to open the official Wallet Connect Modal when connecting the wallet if no injected MetaMask provider is found when connecting the wallet.
|
||||
*
|
||||
* This should not be set if you are using ConnectWallet component and only when manually connecting the wallet using a hook like `useConnect`.
|
||||
*
|
||||
* You can set it to `true` or a configuration object to enable the Wallet Connect Modal.
|
||||
*/
|
||||
wcModal?:
|
||||
| {
|
||||
/**
|
||||
* Configure the style of Wallet Connect Modal.
|
||||
*/
|
||||
qrModalOptions?: QRModalOptions;
|
||||
}
|
||||
| boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -72,7 +89,11 @@ export const trustWallet = (
|
||||
const wallet = new TrustWallet({
|
||||
...walletOptions,
|
||||
projectId: options?.projectId,
|
||||
qrcode: false,
|
||||
qrcode: options?.wcModal ? true : false,
|
||||
qrModalOptions:
|
||||
typeof options?.wcModal === "object"
|
||||
? options?.wcModal?.qrModalOptions
|
||||
: undefined,
|
||||
});
|
||||
|
||||
handelWCSessionRequest(wallet, trustWalletUris);
|
||||
|
||||
@@ -7,6 +7,7 @@ import { ZerionWallet, assertWindowEthereum } from "@thirdweb-dev/wallets";
|
||||
import { handelWCSessionRequest } from "../handleWCSessionRequest";
|
||||
import { useTWLocale } from "../../../evm/providers/locale-provider";
|
||||
import { ExtensionOrWCConnectionUI } from "../_common/ExtensionORWCConnectionUI";
|
||||
import type { QRModalOptions } from "@thirdweb-dev/wallets/src/evm/connectors/wallet-connect/qrModalOptions";
|
||||
|
||||
const zerionWalletUris = {
|
||||
ios: "zerion://",
|
||||
@@ -30,6 +31,22 @@ export type ZerionkWalletConfigOptions = {
|
||||
* If true, the wallet will be tagged as "recommended" in ConnectWallet Modal
|
||||
*/
|
||||
recommended?: boolean;
|
||||
|
||||
/**
|
||||
* Specify whether to open the official Wallet Connect Modal when connecting the wallet if no injected MetaMask provider is found when connecting the wallet.
|
||||
*
|
||||
* This should not be set if you are using ConnectWallet component and only when manually connecting the wallet using a hook like `useConnect`.
|
||||
*
|
||||
* You can set it to `true` or a configuration object to enable the Wallet Connect Modal.
|
||||
*/
|
||||
wcModal?:
|
||||
| {
|
||||
/**
|
||||
* Configure the style of Wallet Connect Modal.
|
||||
*/
|
||||
qrModalOptions?: QRModalOptions;
|
||||
}
|
||||
| boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -72,7 +89,11 @@ export const zerionWallet = (
|
||||
const wallet = new ZerionWallet({
|
||||
...walletOptions,
|
||||
projectId: options?.projectId,
|
||||
qrcode: false,
|
||||
qrcode: options?.wcModal ? true : false,
|
||||
qrModalOptions:
|
||||
typeof options?.wcModal === "object"
|
||||
? options?.wcModal?.qrModalOptions
|
||||
: undefined,
|
||||
});
|
||||
|
||||
handelWCSessionRequest(wallet, zerionWalletUris);
|
||||
|
||||
Binary file not shown.
@@ -1,5 +1,37 @@
|
||||
# @thirdweb-dev/sdk
|
||||
|
||||
## 4.0.98
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`2d7ebe2`](https://github.com/thirdweb-dev/js/commit/2d7ebe2111d24448dd85ace25fc9fdbef987a57d), [`7304c5b`](https://github.com/thirdweb-dev/js/commit/7304c5b0c7060080f302160dc9b24b2becc17524), [`a9ce10f`](https://github.com/thirdweb-dev/js/commit/a9ce10f39ad47f386e8086e230679093aab08754), [`321cf26`](https://github.com/thirdweb-dev/js/commit/321cf26342d0755204aa465bc2390e052d5ed071)]:
|
||||
- thirdweb@5.29.5
|
||||
- @thirdweb-dev/chains@0.1.120
|
||||
|
||||
## 4.0.97
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`79e6a04`](https://github.com/thirdweb-dev/js/commit/79e6a047d6ae6cb341fdad22137bd83ad6e611d4)]:
|
||||
- thirdweb@5.29.4
|
||||
|
||||
## 4.0.96
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`c94bcd5`](https://github.com/thirdweb-dev/js/commit/c94bcd574aa4eaf2bd76ab8b6379302de4731ed4), [`1c533ef`](https://github.com/thirdweb-dev/js/commit/1c533efcd5fbc8a72fd03c98510fa601ee5f34b5), [`ffaff74`](https://github.com/thirdweb-dev/js/commit/ffaff744f72d2cb22896e7501677b48f76ea857a), [`8b74602`](https://github.com/thirdweb-dev/js/commit/8b74602e3b7fbe011bf886b9d5ee0e2ea62f7447), [`9cf3a1d`](https://github.com/thirdweb-dev/js/commit/9cf3a1d6636fcd56559e889ab2bfe3249d51162a)]:
|
||||
- thirdweb@5.29.3
|
||||
- @thirdweb-dev/chains@0.1.119
|
||||
|
||||
## 4.0.95
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2880](https://github.com/thirdweb-dev/js/pull/2880) [`7768067`](https://github.com/thirdweb-dev/js/commit/7768067bf4f571a8c8ee6b646a58e2fc5f6bd052) Thanks [@kumaryash90](https://github.com/kumaryash90)! - Modular contract publish and deploy setup
|
||||
|
||||
- Updated dependencies [[`7768067`](https://github.com/thirdweb-dev/js/commit/7768067bf4f571a8c8ee6b646a58e2fc5f6bd052), [`fb6a07d`](https://github.com/thirdweb-dev/js/commit/fb6a07d4b84ba8ea6389ca04c73625f670a0d9c4)]:
|
||||
- thirdweb@5.29.2
|
||||
|
||||
## 4.0.94
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/sdk",
|
||||
"version": "4.0.94",
|
||||
"version": "4.0.98",
|
||||
"description": "The main thirdweb SDK.",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/legacy_packages/sdk",
|
||||
"license": "Apache-2.0",
|
||||
@@ -129,7 +129,7 @@
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@eth-optimism/sdk": "3.3.0",
|
||||
"@eth-optimism/sdk": "3.3.2",
|
||||
"@thirdweb-dev/chains": "workspace:*",
|
||||
"@thirdweb-dev/contracts-js": "workspace:*",
|
||||
"@thirdweb-dev/crypto": "workspace:*",
|
||||
|
||||
@@ -0,0 +1,158 @@
|
||||
import { providers, utils } from "ethers";
|
||||
import {
|
||||
coreContractAbi,
|
||||
extensionContractAbi,
|
||||
} from "../../constants/thirdweb-features";
|
||||
import { hasDuplicates } from "../utils";
|
||||
import { getChainByChainIdAsync, getChainRPC } from "@thirdweb-dev/chains";
|
||||
|
||||
type CallbackFunction = {
|
||||
selector: string;
|
||||
};
|
||||
|
||||
type FallbackFunction = {
|
||||
selector: string;
|
||||
permissionBits: string;
|
||||
};
|
||||
|
||||
type SupportedCallbackFunction = {
|
||||
selector: string;
|
||||
mode: number;
|
||||
};
|
||||
|
||||
export async function compatibleExtensions(
|
||||
coreBytecode: string,
|
||||
extensionBytecodes: string[],
|
||||
chainId: number,
|
||||
): Promise<boolean> {
|
||||
const chain = await getChainByChainIdAsync(chainId);
|
||||
const rpcUrl = getChainRPC(chain);
|
||||
const jsonRpcProvider = new providers.JsonRpcProvider(rpcUrl);
|
||||
const addr = "0x0000000000000000000000000000000000000124"; // arbitrary address
|
||||
|
||||
/**
|
||||
* Here we use state override with eth_call.
|
||||
*
|
||||
* This lets us call functions on a non-deployed contract, by using its deployed bytecode
|
||||
* to override code of an arbitrary address in eth_call.
|
||||
*
|
||||
* Encode function calldata, and perform eth_call with bytecode override.
|
||||
*/
|
||||
|
||||
const coreIface = new utils.Interface(coreContractAbi);
|
||||
const coreCalldata = coreIface.encodeFunctionData(
|
||||
"getSupportedCallbackFunctions",
|
||||
[],
|
||||
);
|
||||
if (!coreBytecode.startsWith("0x6080604052")) {
|
||||
const index = coreBytecode.indexOf("6080604052");
|
||||
coreBytecode = `0x${coreBytecode.substring(index)}`;
|
||||
} else if (coreBytecode.lastIndexOf("6080604052") > 0) {
|
||||
const index = coreBytecode.lastIndexOf("6080604052");
|
||||
coreBytecode = `0x${coreBytecode.substring(index)}`;
|
||||
}
|
||||
const core = await jsonRpcProvider.send("eth_call", [
|
||||
{ to: addr, data: coreCalldata },
|
||||
"latest",
|
||||
{ [addr]: { code: coreBytecode } }, // eth_call with bytecode override
|
||||
]);
|
||||
|
||||
const extensionIface = new utils.Interface(extensionContractAbi);
|
||||
const extensionCalldata = extensionIface.encodeFunctionData(
|
||||
"getExtensionConfig",
|
||||
[],
|
||||
);
|
||||
const extensions = await Promise.all(
|
||||
extensionBytecodes.map((b: string) => {
|
||||
// TODO: Upload deployed bytecode on publish metadata
|
||||
|
||||
if (!b.startsWith("0x6080604052")) {
|
||||
const index = b.indexOf("6080604052");
|
||||
b = `0x${b.substring(index)}`;
|
||||
} else if (b.lastIndexOf("6080604052") > 0) {
|
||||
const index = b.lastIndexOf("6080604052");
|
||||
b = `0x${b.substring(index)}`;
|
||||
}
|
||||
|
||||
return jsonRpcProvider.send("eth_call", [
|
||||
{ to: addr, data: extensionCalldata },
|
||||
"latest",
|
||||
{ [addr]: { code: b } }, // eth_call with bytecode override
|
||||
]);
|
||||
}),
|
||||
);
|
||||
|
||||
const decodedCore = coreIface.decodeFunctionResult(
|
||||
"getSupportedCallbackFunctions",
|
||||
core,
|
||||
);
|
||||
const coreCallbackSelectors = decodedCore.flat().map(
|
||||
(c: SupportedCallbackFunction) => c.selector,
|
||||
);
|
||||
|
||||
// extract callback/fallback selectors and required interfaces from extension config
|
||||
const requiredInterfaces: string[] = [];
|
||||
const extensionFallbackSelectors: string[] = [];
|
||||
const extensionCallbackSelectors: string[] = [];
|
||||
const selectors: string[] = [];
|
||||
|
||||
extensions.forEach((e: string) => {
|
||||
const decodedExtensionConfig = extensionIface.decodeFunctionResult(
|
||||
"getExtensionConfig",
|
||||
e,
|
||||
);
|
||||
|
||||
requiredInterfaces.push(...decodedExtensionConfig[0].requiredInterfaces);
|
||||
const fallbackSelectors =
|
||||
decodedExtensionConfig[0].fallbackFunctions.map(
|
||||
(a: FallbackFunction) => a.selector,
|
||||
);
|
||||
const callbackSelectors =
|
||||
decodedExtensionConfig[0].callbackFunctions.map(
|
||||
(a: CallbackFunction) => a.selector,
|
||||
);
|
||||
|
||||
extensionFallbackSelectors.push(...fallbackSelectors);
|
||||
extensionCallbackSelectors.push(...callbackSelectors);
|
||||
});
|
||||
|
||||
// check if callback selectors are supported
|
||||
for(const callback of extensionCallbackSelectors) {
|
||||
if(!coreCallbackSelectors.includes(callback)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// check if the core contract supports required interfaces by extensions above
|
||||
if(requiredInterfaces.length > 0) {
|
||||
const supportsInterfaceResult = await Promise.all(
|
||||
requiredInterfaces.map((r) => {
|
||||
const supportsInterfaceCalldata = coreIface.encodeFunctionData(
|
||||
"supportsInterface",
|
||||
[r],
|
||||
);
|
||||
return jsonRpcProvider.send("eth_call", [
|
||||
{ to: addr, data: supportsInterfaceCalldata },
|
||||
"latest",
|
||||
{ [addr]: { code: coreBytecode } },
|
||||
]);
|
||||
}),
|
||||
);
|
||||
const supportsInterfaceDecoded = supportsInterfaceResult.map(r => {
|
||||
return coreIface.decodeFunctionResult(
|
||||
"supportsInterface",
|
||||
r,
|
||||
);
|
||||
})
|
||||
if (supportsInterfaceDecoded.flat().some((element) => element === false)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// check duplicate callback/fallback signatures
|
||||
selectors.push(...extensionFallbackSelectors, ...extensionCallbackSelectors);
|
||||
return !hasDuplicates(
|
||||
selectors.flat(),
|
||||
(a: string, b: string): boolean => a === b,
|
||||
);
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
import {
|
||||
coreContractAbi,
|
||||
getAllExtensionsAbi,
|
||||
getAllPluginsAbi,
|
||||
} from "../../constants/thirdweb-features";
|
||||
@@ -38,6 +39,7 @@ export async function getCompositeABI(
|
||||
"DynamicContract",
|
||||
features,
|
||||
);
|
||||
const isModular: boolean = isExtensionEnabled(abi, "ModularCore", features);
|
||||
// check if the contract has fallback function - we'll further check for diamond pattern if needed
|
||||
const isFallback: boolean = isExtensionEnabled(abi, "Fallback", features);
|
||||
|
||||
@@ -59,6 +61,24 @@ export async function getCompositeABI(
|
||||
|
||||
// get ABIs of extension contracts --
|
||||
pluginABIs = await getPluginABI(pluginAddresses, provider, storage);
|
||||
} else if (isModular) {
|
||||
const contract = new ContractWrapper(
|
||||
provider,
|
||||
address,
|
||||
coreContractAbi,
|
||||
options,
|
||||
storage,
|
||||
);
|
||||
|
||||
const extensions = await contract.call("getInstalledExtensions");
|
||||
|
||||
// get extension addresses
|
||||
const extensionAddresses = extensions.map(
|
||||
(item: any) => item.implementation,
|
||||
);
|
||||
|
||||
// get ABIs of extension contracts --
|
||||
pluginABIs = await getPluginABI(extensionAddresses, provider, storage);
|
||||
} else if (isPluginRouter) {
|
||||
const contract = new ContractWrapper(
|
||||
provider,
|
||||
|
||||
@@ -30,6 +30,27 @@ export function unique<T>(a: T[], fn: (a: T, b: T) => boolean): T[] {
|
||||
return a;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
export function hasDuplicates<T>(arr: T[], fn: (a: T, b: T) => boolean): boolean {
|
||||
if (arr.length === 0 || arr.length === 1) {
|
||||
return false;
|
||||
}
|
||||
if (!fn) {
|
||||
throw new Error("Comparison function required");
|
||||
}
|
||||
|
||||
for (let i = 0; i < arr.length; i++) {
|
||||
for (let j = i + 1; j < arr.length; j++) {
|
||||
if (fn(arr[i], arr[j])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
|
||||
@@ -63,6 +63,8 @@ import {
|
||||
FEATURE_GASLESS,
|
||||
FEATURE_PACK_VRF,
|
||||
FEATURE_PLUGIN_ROUTER,
|
||||
FEATURE_MODULAR_CORE,
|
||||
FEATURE_MODULAR_EXTENSION,
|
||||
FEATURE_DIRECT_LISTINGS,
|
||||
FEATURE_ENGLISH_AUCTIONS,
|
||||
FEATURE_OFFERS,
|
||||
@@ -139,6 +141,8 @@ export type Feature =
|
||||
| typeof FEATURE_GASLESS
|
||||
| typeof FEATURE_PACK_VRF
|
||||
| typeof FEATURE_PLUGIN_ROUTER
|
||||
| typeof FEATURE_MODULAR_CORE
|
||||
| typeof FEATURE_MODULAR_EXTENSION
|
||||
| typeof FEATURE_DYNAMIC_CONTRACT
|
||||
| typeof FEATURE_DIRECT_LISTINGS
|
||||
| typeof FEATURE_ENGLISH_AUCTIONS
|
||||
@@ -189,6 +193,8 @@ export const SUPPORTED_FEATURES: Record<string, Feature> = /* @__PURE__ */ {
|
||||
[FEATURE_PACK_VRF.name]: FEATURE_PACK_VRF,
|
||||
[FEATURE_PLUGIN_ROUTER.name]: FEATURE_PLUGIN_ROUTER,
|
||||
[FEATURE_DYNAMIC_CONTRACT.name]: FEATURE_DYNAMIC_CONTRACT,
|
||||
[FEATURE_MODULAR_CORE.name]: FEATURE_MODULAR_CORE,
|
||||
[FEATURE_MODULAR_EXTENSION.name]: FEATURE_MODULAR_EXTENSION,
|
||||
[FEATURE_DIRECT_LISTINGS.name]: FEATURE_DIRECT_LISTINGS,
|
||||
[FEATURE_ENGLISH_AUCTIONS.name]: FEATURE_ENGLISH_AUCTIONS,
|
||||
[FEATURE_OFFERS.name]: FEATURE_OFFERS,
|
||||
|
||||
@@ -116,6 +116,450 @@ export const getAllExtensionsAbi = [
|
||||
},
|
||||
];
|
||||
|
||||
export const coreContractAbi = [
|
||||
{ type: "fallback", stateMutability: "payable" },
|
||||
{
|
||||
type: "function",
|
||||
name: "cancelOwnershipHandover",
|
||||
inputs: [],
|
||||
outputs: [],
|
||||
stateMutability: "payable",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "completeOwnershipHandover",
|
||||
inputs: [
|
||||
{ name: "pendingOwner", type: "address", internalType: "address" },
|
||||
],
|
||||
outputs: [],
|
||||
stateMutability: "payable",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "getInstalledExtensions",
|
||||
inputs: [],
|
||||
outputs: [
|
||||
{
|
||||
name: "_installedExtensions",
|
||||
type: "tuple[]",
|
||||
internalType: "struct IModularCore.InstalledExtension[]",
|
||||
components: [
|
||||
{
|
||||
name: "implementation",
|
||||
type: "address",
|
||||
internalType: "address",
|
||||
},
|
||||
{
|
||||
name: "config",
|
||||
type: "tuple",
|
||||
internalType: "struct IExtensionConfig.ExtensionConfig",
|
||||
components: [
|
||||
{
|
||||
name: "registerInstallationCallback",
|
||||
type: "bool",
|
||||
internalType: "bool",
|
||||
},
|
||||
{
|
||||
name: "requiredInterfaces",
|
||||
type: "bytes4[]",
|
||||
internalType: "bytes4[]",
|
||||
},
|
||||
{
|
||||
name: "supportedInterfaces",
|
||||
type: "bytes4[]",
|
||||
internalType: "bytes4[]",
|
||||
},
|
||||
{
|
||||
name: "callbackFunctions",
|
||||
type: "tuple[]",
|
||||
internalType: "struct IExtensionConfig.CallbackFunction[]",
|
||||
components: [
|
||||
{
|
||||
name: "selector",
|
||||
type: "bytes4",
|
||||
internalType: "bytes4",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "fallbackFunctions",
|
||||
type: "tuple[]",
|
||||
internalType: "struct IExtensionConfig.FallbackFunction[]",
|
||||
components: [
|
||||
{
|
||||
name: "selector",
|
||||
type: "bytes4",
|
||||
internalType: "bytes4",
|
||||
},
|
||||
{
|
||||
name: "permissionBits",
|
||||
type: "uint256",
|
||||
internalType: "uint256",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
stateMutability: "view",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "getSupportedCallbackFunctions",
|
||||
inputs: [],
|
||||
outputs: [
|
||||
{
|
||||
name: "",
|
||||
type: "tuple[]",
|
||||
internalType: "struct IModularCore.SupportedCallbackFunction[]",
|
||||
components: [
|
||||
{ name: "selector", type: "bytes4", internalType: "bytes4" },
|
||||
{
|
||||
name: "mode",
|
||||
type: "uint8",
|
||||
internalType: "enum IModularCore.CallbackMode",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
stateMutability: "pure",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "grantRoles",
|
||||
inputs: [
|
||||
{ name: "user", type: "address", internalType: "address" },
|
||||
{ name: "roles", type: "uint256", internalType: "uint256" },
|
||||
],
|
||||
outputs: [],
|
||||
stateMutability: "payable",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "hasAllRoles",
|
||||
inputs: [
|
||||
{ name: "user", type: "address", internalType: "address" },
|
||||
{ name: "roles", type: "uint256", internalType: "uint256" },
|
||||
],
|
||||
outputs: [{ name: "", type: "bool", internalType: "bool" }],
|
||||
stateMutability: "view",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "hasAnyRole",
|
||||
inputs: [
|
||||
{ name: "user", type: "address", internalType: "address" },
|
||||
{ name: "roles", type: "uint256", internalType: "uint256" },
|
||||
],
|
||||
outputs: [{ name: "", type: "bool", internalType: "bool" }],
|
||||
stateMutability: "view",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "installExtension",
|
||||
inputs: [
|
||||
{ name: "_extension", type: "address", internalType: "address" },
|
||||
{ name: "_data", type: "bytes", internalType: "bytes" },
|
||||
],
|
||||
outputs: [],
|
||||
stateMutability: "payable",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "owner",
|
||||
inputs: [],
|
||||
outputs: [{ name: "result", type: "address", internalType: "address" }],
|
||||
stateMutability: "view",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "ownershipHandoverExpiresAt",
|
||||
inputs: [
|
||||
{ name: "pendingOwner", type: "address", internalType: "address" },
|
||||
],
|
||||
outputs: [{ name: "result", type: "uint256", internalType: "uint256" }],
|
||||
stateMutability: "view",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "renounceOwnership",
|
||||
inputs: [],
|
||||
outputs: [],
|
||||
stateMutability: "payable",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "renounceRoles",
|
||||
inputs: [{ name: "roles", type: "uint256", internalType: "uint256" }],
|
||||
outputs: [],
|
||||
stateMutability: "payable",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "requestOwnershipHandover",
|
||||
inputs: [],
|
||||
outputs: [],
|
||||
stateMutability: "payable",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "revokeRoles",
|
||||
inputs: [
|
||||
{ name: "user", type: "address", internalType: "address" },
|
||||
{ name: "roles", type: "uint256", internalType: "uint256" },
|
||||
],
|
||||
outputs: [],
|
||||
stateMutability: "payable",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "rolesOf",
|
||||
inputs: [{ name: "user", type: "address", internalType: "address" }],
|
||||
outputs: [{ name: "roles", type: "uint256", internalType: "uint256" }],
|
||||
stateMutability: "view",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "supportsInterface",
|
||||
inputs: [{ name: "interfaceId", type: "bytes4", internalType: "bytes4" }],
|
||||
outputs: [{ name: "", type: "bool", internalType: "bool" }],
|
||||
stateMutability: "view",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "transferOwnership",
|
||||
inputs: [{ name: "newOwner", type: "address", internalType: "address" }],
|
||||
outputs: [],
|
||||
stateMutability: "payable",
|
||||
},
|
||||
{
|
||||
type: "function",
|
||||
name: "uninstallExtension",
|
||||
inputs: [
|
||||
{ name: "_extension", type: "address", internalType: "address" },
|
||||
{ name: "_data", type: "bytes", internalType: "bytes" },
|
||||
],
|
||||
outputs: [],
|
||||
stateMutability: "payable",
|
||||
},
|
||||
{
|
||||
type: "event",
|
||||
name: "ExtensionInstalled",
|
||||
inputs: [
|
||||
{
|
||||
name: "caller",
|
||||
type: "address",
|
||||
indexed: false,
|
||||
internalType: "address",
|
||||
},
|
||||
{
|
||||
name: "implementation",
|
||||
type: "address",
|
||||
indexed: false,
|
||||
internalType: "address",
|
||||
},
|
||||
{
|
||||
name: "installedExtension",
|
||||
type: "address",
|
||||
indexed: false,
|
||||
internalType: "address",
|
||||
},
|
||||
],
|
||||
anonymous: false,
|
||||
},
|
||||
{
|
||||
type: "event",
|
||||
name: "ExtensionUninstalled",
|
||||
inputs: [
|
||||
{
|
||||
name: "caller",
|
||||
type: "address",
|
||||
indexed: false,
|
||||
internalType: "address",
|
||||
},
|
||||
{
|
||||
name: "implementation",
|
||||
type: "address",
|
||||
indexed: false,
|
||||
internalType: "address",
|
||||
},
|
||||
{
|
||||
name: "installedExtension",
|
||||
type: "address",
|
||||
indexed: false,
|
||||
internalType: "address",
|
||||
},
|
||||
],
|
||||
anonymous: false,
|
||||
},
|
||||
{
|
||||
type: "event",
|
||||
name: "OwnershipHandoverCanceled",
|
||||
inputs: [
|
||||
{
|
||||
name: "pendingOwner",
|
||||
type: "address",
|
||||
indexed: true,
|
||||
internalType: "address",
|
||||
},
|
||||
],
|
||||
anonymous: false,
|
||||
},
|
||||
{
|
||||
type: "event",
|
||||
name: "OwnershipHandoverRequested",
|
||||
inputs: [
|
||||
{
|
||||
name: "pendingOwner",
|
||||
type: "address",
|
||||
indexed: true,
|
||||
internalType: "address",
|
||||
},
|
||||
],
|
||||
anonymous: false,
|
||||
},
|
||||
{
|
||||
type: "event",
|
||||
name: "OwnershipTransferred",
|
||||
inputs: [
|
||||
{
|
||||
name: "oldOwner",
|
||||
type: "address",
|
||||
indexed: true,
|
||||
internalType: "address",
|
||||
},
|
||||
{
|
||||
name: "newOwner",
|
||||
type: "address",
|
||||
indexed: true,
|
||||
internalType: "address",
|
||||
},
|
||||
],
|
||||
anonymous: false,
|
||||
},
|
||||
{
|
||||
type: "event",
|
||||
name: "RolesUpdated",
|
||||
inputs: [
|
||||
{
|
||||
name: "user",
|
||||
type: "address",
|
||||
indexed: true,
|
||||
internalType: "address",
|
||||
},
|
||||
{
|
||||
name: "roles",
|
||||
type: "uint256",
|
||||
indexed: true,
|
||||
internalType: "uint256",
|
||||
},
|
||||
],
|
||||
anonymous: false,
|
||||
},
|
||||
{ type: "error", name: "AlreadyInitialized", inputs: [] },
|
||||
{ type: "error", name: "CallbackExecutionReverted", inputs: [] },
|
||||
{
|
||||
type: "error",
|
||||
name: "CallbackFunctionAlreadyInstalled",
|
||||
inputs: [],
|
||||
},
|
||||
{ type: "error", name: "CallbackFunctionNotSupported", inputs: [] },
|
||||
{ type: "error", name: "CallbackFunctionRequired", inputs: [] },
|
||||
{
|
||||
type: "error",
|
||||
name: "CallbackFunctionUnauthorizedCall",
|
||||
inputs: [],
|
||||
},
|
||||
{ type: "error", name: "ExtensionAlreadyInstalled", inputs: [] },
|
||||
{
|
||||
type: "error",
|
||||
name: "ExtensionInterfaceNotCompatible",
|
||||
inputs: [
|
||||
{
|
||||
name: "requiredInterfaceId",
|
||||
type: "bytes4",
|
||||
internalType: "bytes4",
|
||||
},
|
||||
],
|
||||
},
|
||||
{ type: "error", name: "ExtensionNotInstalled", inputs: [] },
|
||||
{ type: "error", name: "ExtensionOutOfSync", inputs: [] },
|
||||
{
|
||||
type: "error",
|
||||
name: "FallbackFunctionAlreadyInstalled",
|
||||
inputs: [],
|
||||
},
|
||||
{ type: "error", name: "FallbackFunctionNotInstalled", inputs: [] },
|
||||
{ type: "error", name: "IndexOutOfBounds", inputs: [] },
|
||||
{ type: "error", name: "NewOwnerIsZeroAddress", inputs: [] },
|
||||
{ type: "error", name: "NoHandoverRequest", inputs: [] },
|
||||
{ type: "error", name: "Unauthorized", inputs: [] },
|
||||
];
|
||||
|
||||
export const extensionContractAbi = [
|
||||
{
|
||||
type: "function",
|
||||
name: "getExtensionConfig",
|
||||
inputs: [],
|
||||
outputs: [
|
||||
{
|
||||
name: "",
|
||||
type: "tuple",
|
||||
internalType: "struct IExtensionConfig.ExtensionConfig",
|
||||
components: [
|
||||
{
|
||||
name: "registerInstallationCallback",
|
||||
type: "bool",
|
||||
internalType: "bool",
|
||||
},
|
||||
{
|
||||
name: "requiredInterfaces",
|
||||
type: "bytes4[]",
|
||||
internalType: "bytes4[]",
|
||||
},
|
||||
{
|
||||
name: "supportedInterfaces",
|
||||
type: "bytes4[]",
|
||||
internalType: "bytes4[]",
|
||||
},
|
||||
{
|
||||
name: "callbackFunctions",
|
||||
type: "tuple[]",
|
||||
internalType: "struct IExtensionConfig.CallbackFunction[]",
|
||||
components: [
|
||||
{
|
||||
name: "selector",
|
||||
type: "bytes4",
|
||||
internalType: "bytes4",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "fallbackFunctions",
|
||||
type: "tuple[]",
|
||||
internalType: "struct IExtensionConfig.FallbackFunction[]",
|
||||
components: [
|
||||
{
|
||||
name: "selector",
|
||||
type: "bytes4",
|
||||
internalType: "bytes4",
|
||||
},
|
||||
{
|
||||
name: "permissionBits",
|
||||
type: "uint256",
|
||||
internalType: "uint256",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
stateMutability: "pure",
|
||||
},
|
||||
];
|
||||
|
||||
export const FEATURE_ROYALTY = {
|
||||
name: "Royalty",
|
||||
namespace: "royalty",
|
||||
@@ -255,6 +699,30 @@ export const FEATURE_DYNAMIC_CONTRACT = {
|
||||
features: {},
|
||||
} as const;
|
||||
|
||||
export const FEATURE_MODULAR_CORE = {
|
||||
name: "ModularCore",
|
||||
namespace: "modular.core",
|
||||
docLinks: {
|
||||
sdk: "",
|
||||
//TODO
|
||||
contracts: "",
|
||||
},
|
||||
abis: [coreContractAbi],
|
||||
features: {},
|
||||
} as const;
|
||||
|
||||
export const FEATURE_MODULAR_EXTENSION = {
|
||||
name: "ModularExtension",
|
||||
namespace: "modular.extension",
|
||||
docLinks: {
|
||||
sdk: "",
|
||||
//TODO
|
||||
contracts: "",
|
||||
},
|
||||
abis: [extensionContractAbi],
|
||||
features: {},
|
||||
} as const;
|
||||
|
||||
export const FEATURE_DIRECT_LISTINGS = {
|
||||
name: "DirectListings",
|
||||
namespace: "direct.listings",
|
||||
|
||||
@@ -406,11 +406,18 @@ export class ContractPublisher extends RPCConnectionHandler {
|
||||
"DynamicContract",
|
||||
features,
|
||||
);
|
||||
const isModular = isFeatureEnabled(
|
||||
compilerMetadata.abi,
|
||||
"ModularCore",
|
||||
features,
|
||||
);
|
||||
extraMetadataCleaned.routerType = isPlugin
|
||||
? "plugin"
|
||||
: isDynamic
|
||||
? "dynamic"
|
||||
: "none";
|
||||
: isModular
|
||||
? "modular"
|
||||
: "none";
|
||||
|
||||
// For a dynamic contract Router, try to fetch plugin/extension metadata
|
||||
if (isDynamic || isPlugin) {
|
||||
|
||||
@@ -102,6 +102,7 @@ export * from "./common/feature-detection/detectContractFeature";
|
||||
export * from "./common/feature-detection/hasFunction";
|
||||
export * from "./common/plugin/joinABIs";
|
||||
export * from "./common/plugin/getCompositePluginABI";
|
||||
export * from "./common/modular/compatibleExtensions";
|
||||
export * from "./common/version-checker";
|
||||
export * from "./common/fetchSourceFilesFromMetadata";
|
||||
export { isNativeToken } from "./common/currency/isNativeToken";
|
||||
|
||||
@@ -166,6 +166,14 @@ export const CustomFactoryInput = /* @__PURE__ */ (() =>
|
||||
customFactoryAddresses: ChainIdToAddressSchema,
|
||||
}))();
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
export const ModularFactoryInput = /* @__PURE__ */ (() =>
|
||||
z.object({
|
||||
hooksParamName: z.string(),
|
||||
}))();
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
@@ -174,6 +182,7 @@ export const FactoryDeploymentSchema = /* @__PURE__ */ (() =>
|
||||
implementationAddresses: ChainIdToAddressSchema,
|
||||
implementationInitializerFunction: z.string().default("initialize"),
|
||||
customFactoryInput: CustomFactoryInput.optional(),
|
||||
modularFactoryInput: ModularFactoryInput.optional(),
|
||||
factoryAddresses: ChainIdToAddressSchema.optional(),
|
||||
}))();
|
||||
|
||||
@@ -191,7 +200,12 @@ export const DeployTypeInput = /* @__PURE__ */ (() =>
|
||||
* @internal
|
||||
*/
|
||||
export const RouterTypeInput = /* @__PURE__ */ (() =>
|
||||
z.union([z.literal("none"), z.literal("plugin"), z.literal("dynamic")]))();
|
||||
z.union([
|
||||
z.literal("none"),
|
||||
z.literal("plugin"),
|
||||
z.literal("dynamic"),
|
||||
z.literal("modular"),
|
||||
]))();
|
||||
|
||||
/**
|
||||
* @internal
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
export const mockExtensionWithInterfaceBytecode = "0x6080604052348015600f57600080fd5b506106f08061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100de5760003560e01c80637c173ecc1161008c5780638dc5fd9e116100665780638dc5fd9e146100e3578063ae7c8cb7146100e3578063edf8bf0514610141578063f2c9ecd81461014957600080fd5b80637c173ecc1461012c57806389242efb146100e35780638a91b0e31461010057600080fd5b80633fb5c1cb116100bd5780633fb5c1cb146100ed5780636d61fe7014610100578063774237fc1461011157600080fd5b8062862ba3146100e35780630a340d43146100e357806313efddd6146100e5575b600080fd5b005b6100e3610151565b6100e36100fb366004610388565b600055565b6100e361010e3660046103d0565b50565b610119602081565b6040519081526020015b60405180910390f35b61013461017c565b604051610123919061055b565b6100e3610249565b600054610119565b6040517f6a94d761ae01a14a6739229452f57b368e87612171065a3d5019e116a9d396f290600090a1565b6101b06040518060a00160405280600015158152602001606081526020016060815260200160608152602001606081525090565b6101b8610274565b606082015260408051600180825281830190925290602080830190803683375050506020820181905280517f123456780000000000000000000000000000000000000000000000000000000091906000906102155761021561064b565b7fffffffff000000000000000000000000000000000000000000000000000000009092166020928302919091019091015290565b6040517f79201cdedb9b351e17bd1274b3465126723ac336d7a6b1546a2f0e97b8f0a73090600090a1565b6060610282600a600161067a565b67ffffffffffffffff81111561029a5761029a6103a1565b6040519080825280602002602001820160405280156102da57816020015b6040805160208101909152600081528152602001906001900390816102b85790505b50905060005b600a811015610338578060e01b8282815181106102ff576102ff61064b565b60209081029190910101517fffffffff0000000000000000000000000000000000000000000000000000000090911690526001016102e0565b5063edf8bf0560e01b81600a815181106103545761035461064b565b60209081029190910101517fffffffff00000000000000000000000000000000000000000000000000000000909116905290565b60006020828403121561039a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103e257600080fd5b813567ffffffffffffffff808211156103fa57600080fd5b818401915084601f83011261040e57600080fd5b813581811115610420576104206103a1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610466576104666103a1565b8160405282815287602084870101111561047f57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008151808452602080850194506020840160005b838110156104f25781517fffffffff0000000000000000000000000000000000000000000000000000000016875295820195908201906001016104b4565b509495945050505050565b60008151808452602080850194506020840160005b838110156104f257815180517fffffffff000000000000000000000000000000000000000000000000000000001688528301518388015260409096019590820190600101610512565b6000602080835283511515818401528084015160a0604085015261058260c085018261049f565b905060408501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0808684030160608701526105be838361049f565b6060880151878203830160808901528051808352908601945060009350908501905b80841015610623578451517fffffffff000000000000000000000000000000000000000000000000000000001682529385019360019390930192908501906105e0565b5060808801519450818782030160a088015261063f81866104fd565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b808201808211156106b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291505056fea26469706673582212201665fc4a987397715b9892065ad27121276fc1052ea227a5f5cff3da42d5c25764736f6c63430008190033";
|
||||
@@ -0,0 +1,144 @@
|
||||
import {
|
||||
extendedMetadataMock,
|
||||
jsonProvider,
|
||||
signers,
|
||||
sdk,
|
||||
} from "./before-setup";
|
||||
import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers";
|
||||
import { expect } from "chai";
|
||||
import { mockUploadMetadataWithBytecode } from "./utils";
|
||||
import {
|
||||
mockCoreBytecode,
|
||||
mockCoreCompilerMetadata,
|
||||
mockCoreDeployedBytecode,
|
||||
} from "./mock/mockCoreMetadata";
|
||||
import {
|
||||
mockExtensionWithFunctionsBytecode,
|
||||
mockExtensionWithFunctionsCompilerMetadata,
|
||||
} from "./mock/mockExtensionWithFunctionsMetadata";
|
||||
import { compatibleExtensions } from "../../src/evm/common/modular/compatibleExtensions";
|
||||
import { mockExtensionWithInterfaceBytecode } from "./mock/mockExtensionWithInterface";
|
||||
|
||||
describe("Modular contract deployment", async () => {
|
||||
let adminWallet: SignerWithAddress;
|
||||
|
||||
async function mockPublishExtension() {
|
||||
const mockPublisher = process.env.contractPublisherAddress;
|
||||
process.env.contractPublisherAddress =
|
||||
"0xf5b896Ddb5146D5dA77efF4efBb3Eae36E300808";
|
||||
|
||||
const publishUri = await mockUploadMetadataWithBytecode(
|
||||
"DemoExtensionWithFunctions",
|
||||
mockExtensionWithFunctionsCompilerMetadata.output.abi,
|
||||
mockExtensionWithFunctionsBytecode,
|
||||
"",
|
||||
{
|
||||
...extendedMetadataMock,
|
||||
deployType: "standard",
|
||||
networksForDeployment: {
|
||||
allNetworks: true,
|
||||
networksEnabled: [],
|
||||
},
|
||||
publisher: await adminWallet.getAddress(),
|
||||
},
|
||||
"ipfs://QmbAYkPwB2V8E8Phs62TFAoAa9fuP74DZFD2uCiSNAHpVb/0",
|
||||
);
|
||||
|
||||
process.env.contractPublisherAddress = mockPublisher;
|
||||
|
||||
return publishUri;
|
||||
}
|
||||
|
||||
async function mockPublishAndDeployMockCore() {
|
||||
const mockPublisher = process.env.contractPublisherAddress;
|
||||
process.env.contractPublisherAddress =
|
||||
"0xf5b896Ddb5146D5dA77efF4efBb3Eae36E300808";
|
||||
|
||||
const publishUri = await mockUploadMetadataWithBytecode(
|
||||
"DemoCore",
|
||||
mockCoreCompilerMetadata.output.abi,
|
||||
mockCoreBytecode,
|
||||
mockCoreDeployedBytecode,
|
||||
{
|
||||
...extendedMetadataMock,
|
||||
deployType: "autoFactory",
|
||||
routerType: "modular",
|
||||
defaultExtensions: [
|
||||
{
|
||||
extensionName: "DemoExtensionWithFunctions",
|
||||
extensionVersion: "",
|
||||
publisherAddress: await adminWallet.getAddress(),
|
||||
},
|
||||
],
|
||||
factoryDeploymentData: {
|
||||
implementationAddresses: {},
|
||||
factoryAddresses: {},
|
||||
implementationInitializerFunction: "initialize",
|
||||
|
||||
modularFactoryInput: { hooksParamName: "extensions" },
|
||||
},
|
||||
networksForDeployment: {
|
||||
allNetworks: true,
|
||||
networksEnabled: [],
|
||||
},
|
||||
publisher: await adminWallet.getAddress(),
|
||||
},
|
||||
"ipfs://QmbQLyXkhkF2tF6nSbB9TaXUShaLbEWMi11zuR5U5mfz2X/0",
|
||||
);
|
||||
|
||||
const walletAddress = await sdk.wallet.getAddress();
|
||||
|
||||
const address = await sdk.deployer.deployContractFromUri(
|
||||
publishUri,
|
||||
[walletAddress, [], ["0x"]],
|
||||
{
|
||||
forceDirectDeploy: false,
|
||||
},
|
||||
);
|
||||
|
||||
const core = await sdk.getContract(address);
|
||||
|
||||
process.env.contractPublisherAddress = mockPublisher;
|
||||
|
||||
return core;
|
||||
}
|
||||
|
||||
before(async () => {
|
||||
[adminWallet] = signers;
|
||||
});
|
||||
|
||||
beforeEach(async () => {
|
||||
sdk.updateSignerOrProvider(adminWallet);
|
||||
await jsonProvider.send("hardhat_reset", []);
|
||||
});
|
||||
|
||||
it("should deploy core but not install hooks", async () => {
|
||||
// await mockPublishModularFactory();
|
||||
await mockPublishExtension();
|
||||
const mockCore = await mockPublishAndDeployMockCore();
|
||||
|
||||
const extensions = await mockCore.call("getInstalledExtensions");
|
||||
|
||||
expect(extensions.length).to.equal(0);
|
||||
});
|
||||
|
||||
it("should check extension compatibility", async () => {
|
||||
// duplicate callback/fallback
|
||||
let isCompatible = await compatibleExtensions(
|
||||
mockCoreBytecode,
|
||||
[mockExtensionWithFunctionsBytecode, mockExtensionWithFunctionsBytecode],
|
||||
11155111,
|
||||
);
|
||||
|
||||
expect(isCompatible).to.be.false;
|
||||
|
||||
// required interface not supported
|
||||
isCompatible = await compatibleExtensions(
|
||||
mockCoreBytecode,
|
||||
[mockExtensionWithInterfaceBytecode],
|
||||
11155111,
|
||||
);
|
||||
|
||||
expect(isCompatible).to.be.false;
|
||||
});
|
||||
});
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,45 @@
|
||||
# @thirdweb-dev/unity-js-bridge
|
||||
|
||||
## 0.6.47
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`321cf26`](https://github.com/thirdweb-dev/js/commit/321cf26342d0755204aa465bc2390e052d5ed071)]:
|
||||
- @thirdweb-dev/chains@0.1.120
|
||||
- @thirdweb-dev/sdk@4.0.98
|
||||
- @thirdweb-dev/wallets@2.5.38
|
||||
- @thirdweb-dev/auth@4.1.96
|
||||
|
||||
## 0.6.46
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/sdk@4.0.97
|
||||
- @thirdweb-dev/wallets@2.5.37
|
||||
- @thirdweb-dev/auth@4.1.95
|
||||
|
||||
## 0.6.45
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#3317](https://github.com/thirdweb-dev/js/pull/3317) [`198f72c`](https://github.com/thirdweb-dev/js/commit/198f72c4933633d44185ff7b1d7e995e90c4d618) Thanks [@0xFirekeeper](https://github.com/0xFirekeeper)! - [Unity] fix tx builder type parsing
|
||||
|
||||
- Updated dependencies [[`8b74602`](https://github.com/thirdweb-dev/js/commit/8b74602e3b7fbe011bf886b9d5ee0e2ea62f7447)]:
|
||||
- @thirdweb-dev/chains@0.1.119
|
||||
- @thirdweb-dev/sdk@4.0.96
|
||||
- @thirdweb-dev/wallets@2.5.36
|
||||
- @thirdweb-dev/auth@4.1.94
|
||||
|
||||
## 0.6.44
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`7768067`](https://github.com/thirdweb-dev/js/commit/7768067bf4f571a8c8ee6b646a58e2fc5f6bd052)]:
|
||||
- @thirdweb-dev/sdk@4.0.95
|
||||
- @thirdweb-dev/wallets@2.5.35
|
||||
- @thirdweb-dev/auth@4.1.93
|
||||
|
||||
## 0.6.43
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/unity-js-bridge",
|
||||
"version": "0.6.43",
|
||||
"version": "0.6.47",
|
||||
"main": "dist/thirdweb-unity-bridge.js",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/unity-js-bridge",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -173,7 +173,7 @@ class ThirdwebBridge implements TWBridge {
|
||||
// biome-ignore lint/suspicious/noExplicitAny: TODO: fix use of any
|
||||
(globalThis as any).X_SDK_PLATFORM = "unity";
|
||||
// biome-ignore lint/suspicious/noExplicitAny: TODO: fix use of any
|
||||
(globalThis as any).X_SDK_VERSION = "4.16.3";
|
||||
(globalThis as any).X_SDK_VERSION = "4.16.4";
|
||||
// biome-ignore lint/suspicious/noExplicitAny: TODO: fix use of any
|
||||
(globalThis as any).X_SDK_OS = browser?.os ?? "unknown";
|
||||
}
|
||||
@@ -610,7 +610,9 @@ class ThirdwebBridge implements TWBridge {
|
||||
maxFeePerGas: txInput?.maxFeePerGas,
|
||||
maxPriorityFeePerGas: txInput?.maxPriorityFeePerGas,
|
||||
nonce: txInput?.nonce,
|
||||
type: txInput?.type?.toNumber(),
|
||||
type: txInput?.type
|
||||
? BigNumber.from(txInput.type).toNumber()
|
||||
: undefined,
|
||||
accessList: txInput?.accessList,
|
||||
// customData: txInput.data,
|
||||
// ccipReadEnabled: txInput.ccipReadEnabled,
|
||||
|
||||
@@ -1,5 +1,35 @@
|
||||
# @thirdweb-dev/wallets
|
||||
|
||||
## 2.5.38
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`321cf26`](https://github.com/thirdweb-dev/js/commit/321cf26342d0755204aa465bc2390e052d5ed071)]:
|
||||
- @thirdweb-dev/chains@0.1.120
|
||||
- @thirdweb-dev/sdk@4.0.98
|
||||
|
||||
## 2.5.37
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/sdk@4.0.97
|
||||
|
||||
## 2.5.36
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`8b74602`](https://github.com/thirdweb-dev/js/commit/8b74602e3b7fbe011bf886b9d5ee0e2ea62f7447)]:
|
||||
- @thirdweb-dev/chains@0.1.119
|
||||
- @thirdweb-dev/sdk@4.0.96
|
||||
|
||||
## 2.5.35
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`7768067`](https://github.com/thirdweb-dev/js/commit/7768067bf4f571a8c8ee6b646a58e2fc5f6bd052)]:
|
||||
- @thirdweb-dev/sdk@4.0.95
|
||||
|
||||
## 2.5.34
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/wallets",
|
||||
"version": "2.5.34",
|
||||
"version": "2.5.38",
|
||||
"main": "dist/thirdweb-dev-wallets.cjs.js",
|
||||
"module": "dist/thirdweb-dev-wallets.esm.js",
|
||||
"browser": {
|
||||
|
||||
Binary file not shown.
+9
-6
@@ -12,7 +12,7 @@
|
||||
"scripts": {
|
||||
"preinstall": "npx only-allow pnpm",
|
||||
"test": "turbo run test --filter=./packages/*",
|
||||
"test:legacy": "turbo run test --filter=./legacy_packages/* --filter=!sdk --filter=!auth",
|
||||
"test:legacy": "turbo run test --filter=./legacy_packages/* --filter=!@thirdweb-dev/sdk --filter=!@thirdweb-dev/auth",
|
||||
"e2e": "turbo run e2e --filter=./packages/*",
|
||||
"e2e:legacy": "turbo run e2e --filter=./legacy_packages/*",
|
||||
"build:packages": "turbo run build --filter=./packages/*",
|
||||
@@ -44,7 +44,7 @@
|
||||
"@manypkg/get-packages": "2.2.1",
|
||||
"@playwright/test": "1.31.2",
|
||||
"@types/node": "20.12.7",
|
||||
"turbo": "1.13.3",
|
||||
"turbo": "2.0.4",
|
||||
"yalc": "1.0.0-pre.53"
|
||||
},
|
||||
"_______ALL_PACKAGE_DEV_DEPENDENCIES_GO_IN_HERE_SO_CONSUMERS_DONT_END_UP_INSTALLING_THEM______": "_______ALL_PACKAGE_DEV_DEPENDENCIES_GO_IN_HERE_SO_CONSUMERS_DONT_END_UP_INSTALLING_THEM______",
|
||||
@@ -62,13 +62,13 @@
|
||||
"@viem/anvil": "0.0.9",
|
||||
"@vitest/coverage-v8": "1.5.0",
|
||||
"dotenv-mono": "1.3.14",
|
||||
"ethers5": "npm:[email protected]",
|
||||
"ethers6": "npm:[email protected]",
|
||||
"eslint-plugin-i18next": "^6.0.3",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-inclusive-language": "^2.2.1",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-tsdoc": "^0.2.17",
|
||||
"ethers5": "npm:[email protected]",
|
||||
"ethers6": "npm:[email protected]",
|
||||
"knip": "5.9.4",
|
||||
"mitata": "0.1.11",
|
||||
"react": "18.2.0",
|
||||
@@ -98,7 +98,10 @@
|
||||
"protobufjs@>=6.10.0 <7.2.4": ">=7.2.4",
|
||||
"tough-cookie@<4.1.3": ">=4.1.3",
|
||||
"@ethereumjs/util@<9.0.0": ">=9.0.0",
|
||||
"axios@<0.28.0": ">=0.28.0"
|
||||
"axios@<0.28.0": ">=0.28.0",
|
||||
"@grpc/grpc-js@<1.10.9": "1.10.9",
|
||||
"braces@<3.0.3": "3.0.3"
|
||||
}
|
||||
}
|
||||
},
|
||||
"packageManager": "[email protected]"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,41 @@
|
||||
# thirdweb
|
||||
|
||||
## 5.29.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#3356](https://github.com/thirdweb-dev/js/pull/3356) [`2d7ebe2`](https://github.com/thirdweb-dev/js/commit/2d7ebe2111d24448dd85ace25fc9fdbef987a57d) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Fix ConnectButton theming prop
|
||||
|
||||
- [#3364](https://github.com/thirdweb-dev/js/pull/3364) [`7304c5b`](https://github.com/thirdweb-dev/js/commit/7304c5b0c7060080f302160dc9b24b2becc17524) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Respect coinbase wallet create settings when preloading the provider
|
||||
|
||||
- [#3347](https://github.com/thirdweb-dev/js/pull/3347) [`a9ce10f`](https://github.com/thirdweb-dev/js/commit/a9ce10f39ad47f386e8086e230679093aab08754) Thanks [@kien-ngo](https://github.com/kien-ngo)! - Add ERC721 extension: updateMetadata
|
||||
|
||||
## 5.29.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#3345](https://github.com/thirdweb-dev/js/pull/3345) [`79e6a04`](https://github.com/thirdweb-dev/js/commit/79e6a047d6ae6cb341fdad22137bd83ad6e611d4) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Fix react native inAppWallet creation
|
||||
|
||||
## 5.29.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#3329](https://github.com/thirdweb-dev/js/pull/3329) [`c94bcd5`](https://github.com/thirdweb-dev/js/commit/c94bcd574aa4eaf2bd76ab8b6379302de4731ed4) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Dynamically import coinbase sdk to avoid cloudflare bundler issues
|
||||
|
||||
- [#3341](https://github.com/thirdweb-dev/js/pull/3341) [`1c533ef`](https://github.com/thirdweb-dev/js/commit/1c533efcd5fbc8a72fd03c98510fa601ee5f34b5) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Fix transaction button not respecting theme prop
|
||||
|
||||
- [#3298](https://github.com/thirdweb-dev/js/pull/3298) [`ffaff74`](https://github.com/thirdweb-dev/js/commit/ffaff744f72d2cb22896e7501677b48f76ea857a) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - refactor exports to handle native vs non-native dependencies
|
||||
|
||||
- [#3330](https://github.com/thirdweb-dev/js/pull/3330) [`9cf3a1d`](https://github.com/thirdweb-dev/js/commit/9cf3a1d6636fcd56559e889ab2bfe3249d51162a) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Fix coinbase wallet popup sometimes not opening on safari + improve inAppWallet web performance
|
||||
|
||||
## 5.29.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#2880](https://github.com/thirdweb-dev/js/pull/2880) [`7768067`](https://github.com/thirdweb-dev/js/commit/7768067bf4f571a8c8ee6b646a58e2fc5f6bd052) Thanks [@kumaryash90](https://github.com/kumaryash90)! - Modular contract publish and deploy setup
|
||||
|
||||
- [#3318](https://github.com/thirdweb-dev/js/pull/3318) [`fb6a07d`](https://github.com/thirdweb-dev/js/commit/fb6a07d4b84ba8ea6389ca04c73625f670a0d9c4) Thanks [@jnsdls](https://github.com/jnsdls)! - add missing erc4337 extensions
|
||||
|
||||
## 5.29.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "thirdweb",
|
||||
"version": "5.29.1",
|
||||
"version": "5.29.5",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/thirdweb-dev/js.git#main"
|
||||
@@ -68,7 +68,7 @@
|
||||
"./react": {
|
||||
"types": "./dist/types/exports/react.d.ts",
|
||||
"import": "./dist/esm/exports/react.js",
|
||||
"react-native": "./dist/esm/exports/react-native.js",
|
||||
"react-native": "./dist/esm/exports/react.native.js",
|
||||
"default": "./dist/cjs/exports/react.js"
|
||||
},
|
||||
"./react-native": {
|
||||
@@ -99,8 +99,15 @@
|
||||
"./wallets": {
|
||||
"types": "./dist/types/exports/wallets.d.ts",
|
||||
"import": "./dist/esm/exports/wallets.js",
|
||||
"react-native": "./dist/esm/exports/wallets.native.js",
|
||||
"default": "./dist/cjs/exports/wallets.js"
|
||||
},
|
||||
"./wallets/in-app": {
|
||||
"types": "./dist/types/exports/wallets/in-app.d.ts",
|
||||
"import": "./dist/esm/exports/wallets/in-app.js",
|
||||
"react-native": "./dist/esm/exports/wallets/in-app.native.js",
|
||||
"default": "./dist/cjs/exports/wallets/in-app.js"
|
||||
},
|
||||
"./wallets/*": {
|
||||
"types": "./dist/types/exports/wallets/*.d.ts",
|
||||
"import": "./dist/esm/exports/wallets/*.js",
|
||||
@@ -258,7 +265,7 @@
|
||||
"scripts": {
|
||||
"bench:compare": "bun run ./benchmarks/run.ts",
|
||||
"bench": "vitest -c ./test/vitest.config.ts bench",
|
||||
"format": "biome format 'src/**/*' --write",
|
||||
"format": "biome format src/ --write",
|
||||
"lint": "biome check src/",
|
||||
"fix": "biome check src/ --apply",
|
||||
"knip": "knip",
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
"function getAccountsOfSigner(address signer) view returns (address[] accounts)",
|
||||
"function getAddress(address adminSigner, bytes data) view returns (address)",
|
||||
"function getAllAccounts() view returns (address[])",
|
||||
"function getAccounts(uint256 start, uint256 end) view returns (address[])",
|
||||
"function onSignerAdded(address signer, address creatorAdmin, bytes data)",
|
||||
"function onSignerRemoved(address signer, address creatorAdmin, bytes data)"
|
||||
"function onSignerRemoved(address signer, address creatorAdmin, bytes data)",
|
||||
"function totalAccounts() view returns (uint256)",
|
||||
"function isRegistered(address account) view returns (bool)"
|
||||
]
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
[
|
||||
"function updateBatchBaseURI(uint256 _index, string calldata _uri)",
|
||||
"function freezeBatchBaseURI(uint256 _index)",
|
||||
"function setMaxTotalSupply(uint256 _maxTotalSupply)"
|
||||
]
|
||||
@@ -0,0 +1,131 @@
|
||||
[
|
||||
{
|
||||
"type": "function",
|
||||
"name": "getInstalledExtensions",
|
||||
"inputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "",
|
||||
"type": "tuple[]",
|
||||
"internalType": "struct IModularCore.InstalledExtension[]",
|
||||
"components": [
|
||||
{
|
||||
"name": "implementation",
|
||||
"type": "address",
|
||||
"internalType": "address"
|
||||
},
|
||||
{
|
||||
"name": "config",
|
||||
"type": "tuple",
|
||||
"internalType": "struct IExtensionConfig.ExtensionConfig",
|
||||
"components": [
|
||||
{
|
||||
"name": "registerInstallationCallback",
|
||||
"type": "bool",
|
||||
"internalType": "bool"
|
||||
},
|
||||
{
|
||||
"name": "requiredInterfaces",
|
||||
"type": "bytes4[]",
|
||||
"internalType": "bytes4[]"
|
||||
},
|
||||
{
|
||||
"name": "supportedInterfaces",
|
||||
"type": "bytes4[]",
|
||||
"internalType": "bytes4[]"
|
||||
},
|
||||
{
|
||||
"name": "callbackFunctions",
|
||||
"type": "tuple[]",
|
||||
"internalType": "struct IExtensionConfig.CallbackFunction[]",
|
||||
"components": [
|
||||
{
|
||||
"name": "selector",
|
||||
"type": "bytes4",
|
||||
"internalType": "bytes4"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "fallbackFunctions",
|
||||
"type": "tuple[]",
|
||||
"internalType": "struct IExtensionConfig.FallbackFunction[]",
|
||||
"components": [
|
||||
{
|
||||
"name": "selector",
|
||||
"type": "bytes4",
|
||||
"internalType": "bytes4"
|
||||
},
|
||||
{
|
||||
"name": "permissionBits",
|
||||
"type": "uint256",
|
||||
"internalType": "uint256"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"stateMutability": "view"
|
||||
},
|
||||
{
|
||||
"type": "function",
|
||||
"name": "getSupportedCallbackFunctions",
|
||||
"inputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "",
|
||||
"type": "tuple[]",
|
||||
"internalType": "struct IModularCore.SupportedCallbackFunction[]",
|
||||
"components": [
|
||||
{ "name": "selector", "type": "bytes4", "internalType": "bytes4" },
|
||||
{
|
||||
"name": "mode",
|
||||
"type": "uint8",
|
||||
"internalType": "enum IModularCore.CallbackMode"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"stateMutability": "pure"
|
||||
},
|
||||
{
|
||||
"type": "function",
|
||||
"name": "installExtension",
|
||||
"inputs": [
|
||||
{
|
||||
"name": "extensionContract",
|
||||
"type": "address",
|
||||
"internalType": "address"
|
||||
},
|
||||
{ "name": "data", "type": "bytes", "internalType": "bytes" }
|
||||
],
|
||||
"outputs": [],
|
||||
"stateMutability": "payable"
|
||||
},
|
||||
{
|
||||
"type": "function",
|
||||
"name": "supportsInterface",
|
||||
"inputs": [
|
||||
{ "name": "interfaceID", "type": "bytes4", "internalType": "bytes4" }
|
||||
],
|
||||
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
|
||||
"stateMutability": "view"
|
||||
},
|
||||
{
|
||||
"type": "function",
|
||||
"name": "uninstallExtension",
|
||||
"inputs": [
|
||||
{
|
||||
"name": "extensionContract",
|
||||
"type": "address",
|
||||
"internalType": "address"
|
||||
},
|
||||
{ "name": "data", "type": "bytes", "internalType": "bytes" }
|
||||
],
|
||||
"outputs": [],
|
||||
"stateMutability": "payable"
|
||||
}
|
||||
]
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user