Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cbfd445ae7 | ||
|
|
137f46a547 | ||
|
|
1b8accde30 | ||
|
|
07544252b4 | ||
|
|
8708519cad | ||
|
|
6c30b7efc7 | ||
|
|
8b5e344f72 | ||
|
|
010955ff5c | ||
|
|
956b5645e4 |
@@ -1,5 +1,33 @@
|
||||
# @thirdweb-dev/auth
|
||||
|
||||
## 4.0.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.0.7
|
||||
|
||||
## 4.0.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.0.6
|
||||
|
||||
## 4.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.0.5
|
||||
|
||||
## 4.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/wallets@2.0.4
|
||||
|
||||
## 4.0.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/auth",
|
||||
"version": "4.0.3",
|
||||
"version": "4.0.7",
|
||||
"main": "dist/thirdweb-dev-auth.cjs.js",
|
||||
"module": "dist/thirdweb-dev-auth.esm.js",
|
||||
"browser": {
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
# @thirdweb-dev/chains
|
||||
|
||||
## 0.1.55
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1783](https://github.com/thirdweb-dev/js/pull/1783) [`137f46a5`](https://github.com/thirdweb-dev/js/commit/137f46a5470d2b5f9d7f9eda9b2d839a53ddeb64) Thanks [@jnsdls](https://github.com/jnsdls)! - sync chains
|
||||
|
||||
## 0.1.54
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -4,13 +4,13 @@ export default {
|
||||
"chainId": 100,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "gnosisscan",
|
||||
"url": "https://gnosisscan.io",
|
||||
"name": "blockscout",
|
||||
"url": "https://gnosis.blockscout.com",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://gnosis.blockscout.com",
|
||||
"name": "gnosisscan",
|
||||
"url": "https://gnosisscan.io",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -4,13 +4,13 @@ export default {
|
||||
"chainId": 11110,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Astra PingPub Explorer",
|
||||
"url": "https://ping.astranaut.io/astra",
|
||||
"name": "Astra EVM Explorer (Blockscout)",
|
||||
"url": "https://explorer.astranaut.io",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "Astra EVM Explorer (Blockscout)",
|
||||
"url": "https://explorer.astranaut.io",
|
||||
"name": "Astra PingPub Explorer",
|
||||
"url": "https://ping.astranaut.io/astra",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -3,15 +3,15 @@ export default {
|
||||
"chain": "Astra",
|
||||
"chainId": 11115,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Astra PingPub Explorer",
|
||||
"url": "https://ping.astranaut.dev/astra",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "Astra EVM Explorer",
|
||||
"url": "https://explorer.astranaut.dev",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "Astra PingPub Explorer",
|
||||
"url": "https://ping.astranaut.dev/astra",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
|
||||
@@ -19,7 +19,6 @@ export default {
|
||||
},
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://localhost.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"http://localhost:8545"
|
||||
],
|
||||
"shortName": "local",
|
||||
|
||||
@@ -4,13 +4,13 @@ export default {
|
||||
"chainId": 2023,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Taycan Cosmos Explorer",
|
||||
"url": "https://cosmoscan-test.hupayx.io",
|
||||
"name": "Taycan Explorer(Blockscout)",
|
||||
"url": "https://evmscan-test.hupayx.io",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "Taycan Explorer(Blockscout)",
|
||||
"url": "https://evmscan-test.hupayx.io",
|
||||
"name": "Taycan Cosmos Explorer",
|
||||
"url": "https://cosmoscan-test.hupayx.io",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -30,7 +30,6 @@ export default {
|
||||
"rpc": [
|
||||
"https://kava-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://evm.testnet.kava.io",
|
||||
"https://kava-evm-testnet.rpc.thirdweb.com",
|
||||
"wss://wevm.testnet.kava.io"
|
||||
],
|
||||
"shortName": "tkava",
|
||||
|
||||
@@ -30,7 +30,6 @@ export default {
|
||||
"https://evm.kava.io",
|
||||
"https://evm2.kava.io",
|
||||
"https://kava-rpc.gateway.pokt.network",
|
||||
"https://kava-evm.rpc.thirdweb.com",
|
||||
"wss://wevm.kava.io",
|
||||
"wss://wevm2.kava.io",
|
||||
"https://kava-evm.publicnode.com",
|
||||
|
||||
@@ -4,13 +4,13 @@ export default {
|
||||
"chainId": 30,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Rootstock Explorer",
|
||||
"url": "https://explorer.rsk.co",
|
||||
"name": "blockscout",
|
||||
"url": "https://rootstock.blockscout.com",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://rootstock.blockscout.com",
|
||||
"name": "Rootstock Explorer",
|
||||
"url": "https://explorer.rsk.co",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -3,15 +3,15 @@ export default {
|
||||
"chain": "SDN",
|
||||
"chainId": 336,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "subscan",
|
||||
"url": "https://shiden.subscan.io",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://blockscout.com/shiden",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "subscan",
|
||||
"url": "https://shiden.subscan.io",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
|
||||
@@ -4,13 +4,13 @@ export default {
|
||||
"chainId": 369,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "otterscan",
|
||||
"url": "https://otter.pulsechain.com",
|
||||
"name": "blockscout",
|
||||
"url": "https://scan.pulsechain.com",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://scan.pulsechain.com",
|
||||
"name": "otterscan",
|
||||
"url": "https://otter.pulsechain.com",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -18,7 +18,7 @@ export default {
|
||||
"format": "png"
|
||||
},
|
||||
"infoURL": "http://doschain.io/",
|
||||
"name": "DOS Tesnet",
|
||||
"name": "DOS Testnet",
|
||||
"nativeCurrency": {
|
||||
"name": "DOS",
|
||||
"symbol": "DOS",
|
||||
@@ -26,10 +26,10 @@ export default {
|
||||
},
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://dos-tesnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://dos-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://test.doschain.com"
|
||||
],
|
||||
"shortName": "dost",
|
||||
"slug": "dos-tesnet",
|
||||
"slug": "dos-testnet",
|
||||
"testnet": true
|
||||
} as const satisfies Chain;
|
||||
@@ -27,8 +27,7 @@ export default {
|
||||
"redFlags": [],
|
||||
"rpc": [
|
||||
"https://wireshape-floripa-testnet.rpc.thirdweb.com/${THIRDWEB_API_KEY}",
|
||||
"https://rpc-floripa.wireshape.org",
|
||||
"https://wireshape-floripa-testnet.rpc.thirdweb.com"
|
||||
"https://rpc-floripa.wireshape.org"
|
||||
],
|
||||
"shortName": "floripa",
|
||||
"slug": "wireshape-floripa-testnet",
|
||||
|
||||
@@ -4,13 +4,13 @@ export default {
|
||||
"chainId": 50,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blocksscan",
|
||||
"url": "https://xdc.blocksscan.io",
|
||||
"name": "xdcscan",
|
||||
"url": "https://xdcscan.io",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "xdcscan",
|
||||
"url": "https://xdcscan.io",
|
||||
"name": "blocksscan",
|
||||
"url": "https://xdc.blocksscan.io",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -4,13 +4,13 @@ export default {
|
||||
"chainId": 51,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "blocksscan",
|
||||
"url": "https://apothem.blocksscan.io",
|
||||
"name": "xdcscan",
|
||||
"url": "https://apothem.xinfinscan.com",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "xdcscan",
|
||||
"url": "https://apothem.xinfinscan.com",
|
||||
"name": "blocksscan",
|
||||
"url": "https://apothem.blocksscan.io",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -3,15 +3,15 @@ export default {
|
||||
"chain": "Imversed",
|
||||
"chainId": 5555555,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Imversed Cosmos Explorer (Big Dipper)",
|
||||
"url": "https://tex-c.imversed.com",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "Imversed EVM explorer (Blockscout)",
|
||||
"url": "https://txe.imversed.network",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "Imversed Cosmos Explorer (Big Dipper)",
|
||||
"url": "https://tex-c.imversed.com",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
|
||||
@@ -3,15 +3,15 @@ export default {
|
||||
"chain": "Imversed",
|
||||
"chainId": 5555558,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Imversed Cosmos Explorer (Big Dipper)",
|
||||
"url": "https://tex-t.imversed.com",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "Imversed EVM Explorer (Blockscout)",
|
||||
"url": "https://txe-test.imversed.network",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "Imversed Cosmos Explorer (Big Dipper)",
|
||||
"url": "https://tex-t.imversed.com",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
|
||||
@@ -4,13 +4,13 @@ export default {
|
||||
"chainId": 59140,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Blockscout",
|
||||
"url": "https://explorer.goerli.linea.build",
|
||||
"name": "Etherscan",
|
||||
"url": "https://goerli.lineascan.build",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "Etherscan",
|
||||
"url": "https://goerli.lineascan.build",
|
||||
"name": "Blockscout",
|
||||
"url": "https://explorer.goerli.linea.build",
|
||||
"standard": "EIP3091"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -7,11 +7,6 @@ export default {
|
||||
"name": "lineascan",
|
||||
"url": "https://lineascan.build",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "Linea Scan",
|
||||
"url": "https://lineascan.build",
|
||||
"standard": ""
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
|
||||
@@ -3,15 +3,15 @@ export default {
|
||||
"chain": "ASTR",
|
||||
"chainId": 592,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "subscan",
|
||||
"url": "https://astar.subscan.io",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "blockscout",
|
||||
"url": "https://blockscout.com/astar",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "subscan",
|
||||
"url": "https://astar.subscan.io",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
|
||||
@@ -4,13 +4,13 @@ export default {
|
||||
"chainId": 8000,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Teleport Cosmos Explorer (Big Dipper)",
|
||||
"url": "https://explorer.teleport.network",
|
||||
"name": "Teleport EVM Explorer (Blockscout)",
|
||||
"url": "https://evm-explorer.teleport.network",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "Teleport EVM Explorer (Blockscout)",
|
||||
"url": "https://evm-explorer.teleport.network",
|
||||
"name": "Teleport Cosmos Explorer (Big Dipper)",
|
||||
"url": "https://explorer.teleport.network",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -4,13 +4,13 @@ export default {
|
||||
"chainId": 8001,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "Teleport Cosmos Explorer (Big Dipper)",
|
||||
"url": "https://explorer.testnet.teleport.network",
|
||||
"name": "Teleport EVM Explorer (Blockscout)",
|
||||
"url": "https://evm-explorer.testnet.teleport.network",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "Teleport EVM Explorer (Blockscout)",
|
||||
"url": "https://evm-explorer.testnet.teleport.network",
|
||||
"name": "Teleport Cosmos Explorer (Big Dipper)",
|
||||
"url": "https://explorer.testnet.teleport.network",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
|
||||
@@ -3,15 +3,15 @@ export default {
|
||||
"chain": "ETH",
|
||||
"chainId": 8453,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "basescan",
|
||||
"url": "https://basescan.org",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "basescout",
|
||||
"url": "https://base.blockscout.com",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "basescan",
|
||||
"url": "https://basescan.org",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [],
|
||||
|
||||
@@ -3,15 +3,15 @@ export default {
|
||||
"chain": "ETH",
|
||||
"chainId": 84531,
|
||||
"explorers": [
|
||||
{
|
||||
"name": "basescan",
|
||||
"url": "https://goerli.basescan.org",
|
||||
"standard": "none"
|
||||
},
|
||||
{
|
||||
"name": "basescout",
|
||||
"url": "https://base-goerli.blockscout.com",
|
||||
"standard": "EIP3091"
|
||||
},
|
||||
{
|
||||
"name": "basescan",
|
||||
"url": "https://goerli.basescan.org",
|
||||
"standard": "none"
|
||||
}
|
||||
],
|
||||
"faucets": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/chains",
|
||||
"version": "0.1.54",
|
||||
"version": "0.1.55",
|
||||
"main": "dist/thirdweb-dev-chains.cjs.js",
|
||||
"module": "dist/thirdweb-dev-chains.esm.js",
|
||||
"browser": {
|
||||
|
||||
@@ -6,7 +6,7 @@ const BASE_URI = (process.env.BASE_URI as string) || "https://api.thirdweb.com";
|
||||
|
||||
async function getAllPaginatedChains(
|
||||
chains: any[] = [],
|
||||
pathname = "/v1/chains",
|
||||
pathname = "/v1/chains?limit=100",
|
||||
) {
|
||||
const url = new URL(BASE_URI);
|
||||
url.pathname = pathname;
|
||||
@@ -33,31 +33,37 @@ async function sync() {
|
||||
|
||||
const results = await Promise.all(
|
||||
allChainsInDB.map(async (chain) => {
|
||||
let chainId = chain.chainId;
|
||||
// try to convert to number for legacy reasons
|
||||
try {
|
||||
chainId = Number(chainId);
|
||||
} catch {
|
||||
// if we fail here then we cannot use this chain in the chains package for now, so we skip it
|
||||
return null;
|
||||
}
|
||||
|
||||
const pkgChain: Chain = {
|
||||
...chain,
|
||||
chainId: Number(chain.chainId),
|
||||
// assing back the chainId
|
||||
chainId,
|
||||
// map the features to the legacy format
|
||||
features: chain.features?.map((feature) => ({ name: feature })),
|
||||
};
|
||||
// remove all null values
|
||||
Object.keys(pkgChain).forEach((key) => {
|
||||
// @ts-ignore
|
||||
if (pkgChain[key] === null || pkgChain[key] === undefined) {
|
||||
// @ts-ignore
|
||||
delete pkgChain[key];
|
||||
}
|
||||
});
|
||||
|
||||
// sort top level keys alphabetically
|
||||
// @ts-ignore
|
||||
const sortedChain: Chain = {};
|
||||
const sortedChain = {} as Chain;
|
||||
Object.keys(pkgChain)
|
||||
.sort()
|
||||
.forEach((key) => {
|
||||
// @ts-ignore
|
||||
sortedChain[key] = pkgChain[key];
|
||||
});
|
||||
|
||||
// @ts-ignore
|
||||
await fs.writeFile(
|
||||
`${chainsDir}/${sortedChain.chainId}.ts`,
|
||||
`import type { Chain } from "../src/types";
|
||||
@@ -78,17 +84,8 @@ export default ${JSON.stringify(
|
||||
exportName = `_${exportName}`;
|
||||
}
|
||||
|
||||
// imports.push(`import c${chain.chainId} from "../chains/${chain.chainId}";`);
|
||||
|
||||
// exports.push(
|
||||
// `export { default as ${exportName} } from "../chains/${chain.chainId}"`,
|
||||
// );
|
||||
|
||||
const key = `c${sortedChain.chainId}`;
|
||||
|
||||
// exportNames.push(key);
|
||||
// exportNameToChain[key] = chain;
|
||||
|
||||
return {
|
||||
imp: `import c${sortedChain.chainId} from "../chains/${sortedChain.chainId}";`,
|
||||
exp: `export { default as ${exportName} } from "../chains/${sortedChain.chainId}"`,
|
||||
@@ -101,20 +98,21 @@ export default ${JSON.stringify(
|
||||
|
||||
const { imports, exports, exportNames, exportNameToChain } = results.reduce(
|
||||
(acc, result) => {
|
||||
// @ts-ignore
|
||||
// if it's a null result skip it (can happen when we skip chains above because their chainID is out of bounds)
|
||||
if (result === null) {
|
||||
return acc;
|
||||
}
|
||||
acc.imports.push(result.imp);
|
||||
// @ts-ignore
|
||||
acc.exports.push(result.exp);
|
||||
// @ts-ignore
|
||||
acc.exportNames.push(result.key);
|
||||
acc.exportNameToChain[result.key] = result.chain;
|
||||
return acc;
|
||||
},
|
||||
{
|
||||
imports: [],
|
||||
exports: [],
|
||||
exportNames: [],
|
||||
exportNameToChain: {},
|
||||
imports: [] as string[],
|
||||
exports: [] as string[],
|
||||
exportNames: [] as string[],
|
||||
exportNameToChain: {} as Record<string, Chain>,
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
@@ -1587,7 +1587,7 @@ export { default as Alveychain } from "../chains/3797"
|
||||
export { default as Kalychain } from "../chains/3888"
|
||||
export { default as KalychainTestnet } from "../chains/3889"
|
||||
export { default as DracNetwork } from "../chains/3912"
|
||||
export { default as DosTesnet } from "../chains/3939"
|
||||
export { default as DosTestnet } from "../chains/3939"
|
||||
export { default as Dyno } from "../chains/3966"
|
||||
export { default as DynoTestnet } from "../chains/3967"
|
||||
export { default as Yuanchain } from "../chains/3999"
|
||||
@@ -3727,7 +3727,7 @@ type ChainIdsBySlug = {
|
||||
"kalychain": 3888,
|
||||
"kalychain-testnet": 3889,
|
||||
"drac-network": 3912,
|
||||
"dos-tesnet": 3939,
|
||||
"dos-testnet": 3939,
|
||||
"dyno": 3966,
|
||||
"dyno-testnet": 3967,
|
||||
"yuanchain": 3999,
|
||||
|
||||
@@ -1,5 +1,42 @@
|
||||
# thirdweb
|
||||
|
||||
## 0.13.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`137f46a5`](https://github.com/thirdweb-dev/js/commit/137f46a5470d2b5f9d7f9eda9b2d839a53ddeb64)]:
|
||||
- @thirdweb-dev/chains@0.1.55
|
||||
- @thirdweb-dev/sdk@4.0.6
|
||||
- @thirdweb-dev/wallets@2.0.7
|
||||
- @thirdweb-dev/auth@4.0.7
|
||||
|
||||
## 0.13.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`07544252`](https://github.com/thirdweb-dev/js/commit/07544252b49163e1ae84ba2cc76b99597a1c4553)]:
|
||||
- @thirdweb-dev/sdk@4.0.5
|
||||
- @thirdweb-dev/wallets@2.0.6
|
||||
- @thirdweb-dev/auth@4.0.6
|
||||
|
||||
## 0.13.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/sdk@4.0.4
|
||||
- @thirdweb-dev/wallets@2.0.5
|
||||
- @thirdweb-dev/auth@4.0.5
|
||||
|
||||
## 0.13.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`956b5645`](https://github.com/thirdweb-dev/js/commit/956b5645e4266cba536abd27ee250dab5aa9a177)]:
|
||||
- @thirdweb-dev/sdk@4.0.3
|
||||
- @thirdweb-dev/wallets@2.0.4
|
||||
- @thirdweb-dev/auth@4.0.4
|
||||
|
||||
## 0.13.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "thirdweb",
|
||||
"main": "dist/cli/index.js",
|
||||
"version": "0.13.3",
|
||||
"version": "0.13.7",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/cli",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
# @thirdweb-dev/contracts-js
|
||||
|
||||
## 1.3.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1771](https://github.com/thirdweb-dev/js/pull/1771) [`6c30b7ef`](https://github.com/thirdweb-dev/js/commit/6c30b7efc708e1244f3be3e10eac8f3b8b14a8c3) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Updated to latest contracts package
|
||||
|
||||
## 1.3.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1756](https://github.com/thirdweb-dev/js/pull/1756) [`956b5645`](https://github.com/thirdweb-dev/js/commit/956b5645e4266cba536abd27ee250dab5aa9a177) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Enable adding smart wallet admins via bundler for new account contracts
|
||||
|
||||
## 1.3.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/contracts-js",
|
||||
"version": "1.3.14",
|
||||
"version": "1.3.16",
|
||||
"main": "dist/thirdweb-dev-contracts-js.cjs.js",
|
||||
"module": "dist/thirdweb-dev-contracts-js.esm.js",
|
||||
"browser": {
|
||||
@@ -10,7 +10,7 @@
|
||||
"license": "Apache-2.0",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/contracts-js",
|
||||
"dependencies": {
|
||||
"@thirdweb-dev/contracts": "3.10.2-3"
|
||||
"@thirdweb-dev/contracts": "3.10.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/preset-env": "^7.22.9",
|
||||
|
||||
@@ -1,5 +1,42 @@
|
||||
# @thirdweb-dev/react-core
|
||||
|
||||
## 4.0.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`137f46a5`](https://github.com/thirdweb-dev/js/commit/137f46a5470d2b5f9d7f9eda9b2d839a53ddeb64)]:
|
||||
- @thirdweb-dev/chains@0.1.55
|
||||
- @thirdweb-dev/sdk@4.0.6
|
||||
- @thirdweb-dev/wallets@2.0.7
|
||||
- @thirdweb-dev/auth@4.0.7
|
||||
|
||||
## 4.0.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`07544252`](https://github.com/thirdweb-dev/js/commit/07544252b49163e1ae84ba2cc76b99597a1c4553)]:
|
||||
- @thirdweb-dev/sdk@4.0.5
|
||||
- @thirdweb-dev/wallets@2.0.6
|
||||
- @thirdweb-dev/auth@4.0.6
|
||||
|
||||
## 4.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/sdk@4.0.4
|
||||
- @thirdweb-dev/wallets@2.0.5
|
||||
- @thirdweb-dev/auth@4.0.5
|
||||
|
||||
## 4.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`956b5645`](https://github.com/thirdweb-dev/js/commit/956b5645e4266cba536abd27ee250dab5aa9a177)]:
|
||||
- @thirdweb-dev/sdk@4.0.3
|
||||
- @thirdweb-dev/wallets@2.0.4
|
||||
- @thirdweb-dev/auth@4.0.4
|
||||
|
||||
## 4.0.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/react-core",
|
||||
"version": "4.0.3",
|
||||
"version": "4.0.7",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react-core",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
# @thirdweb-dev/react-native-compat
|
||||
|
||||
## 0.3.12
|
||||
|
||||
## 0.3.11
|
||||
|
||||
## 0.3.10
|
||||
|
||||
## 0.3.9
|
||||
|
||||
## 0.3.8
|
||||
|
||||
## 0.3.7
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/react-native-compat",
|
||||
"description": "Shims for Thirdweb in React Native Projects",
|
||||
"version": "0.3.8",
|
||||
"version": "0.3.12",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react-native-compat",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,42 @@
|
||||
# @thirdweb-dev/react-native
|
||||
|
||||
## 0.3.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`137f46a5`](https://github.com/thirdweb-dev/js/commit/137f46a5470d2b5f9d7f9eda9b2d839a53ddeb64)]:
|
||||
- @thirdweb-dev/chains@0.1.55
|
||||
- @thirdweb-dev/react-core@4.0.7
|
||||
- @thirdweb-dev/sdk@4.0.6
|
||||
- @thirdweb-dev/wallets@2.0.7
|
||||
|
||||
## 0.3.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`07544252`](https://github.com/thirdweb-dev/js/commit/07544252b49163e1ae84ba2cc76b99597a1c4553)]:
|
||||
- @thirdweb-dev/sdk@4.0.5
|
||||
- @thirdweb-dev/react-core@4.0.6
|
||||
- @thirdweb-dev/wallets@2.0.6
|
||||
|
||||
## 0.3.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/sdk@4.0.4
|
||||
- @thirdweb-dev/wallets@2.0.5
|
||||
- @thirdweb-dev/react-core@4.0.5
|
||||
|
||||
## 0.3.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`956b5645`](https://github.com/thirdweb-dev/js/commit/956b5645e4266cba536abd27ee250dab5aa9a177)]:
|
||||
- @thirdweb-dev/sdk@4.0.3
|
||||
- @thirdweb-dev/wallets@2.0.4
|
||||
- @thirdweb-dev/react-core@4.0.4
|
||||
|
||||
## 0.3.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/react-native",
|
||||
"version": "0.3.8",
|
||||
"version": "0.3.12",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react-native",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,44 @@
|
||||
# @thirdweb-dev/react
|
||||
|
||||
## 4.0.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`137f46a5`](https://github.com/thirdweb-dev/js/commit/137f46a5470d2b5f9d7f9eda9b2d839a53ddeb64)]:
|
||||
- @thirdweb-dev/chains@0.1.55
|
||||
- @thirdweb-dev/react-core@4.0.7
|
||||
- @thirdweb-dev/sdk@4.0.6
|
||||
- @thirdweb-dev/wallets@2.0.7
|
||||
|
||||
## 4.0.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`07544252`](https://github.com/thirdweb-dev/js/commit/07544252b49163e1ae84ba2cc76b99597a1c4553)]:
|
||||
- @thirdweb-dev/sdk@4.0.5
|
||||
- @thirdweb-dev/react-core@4.0.6
|
||||
- @thirdweb-dev/wallets@2.0.6
|
||||
|
||||
## 4.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/sdk@4.0.4
|
||||
- @thirdweb-dev/wallets@2.0.5
|
||||
- @thirdweb-dev/react-core@4.0.5
|
||||
|
||||
## 4.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1769](https://github.com/thirdweb-dev/js/pull/1769) [`010955ff`](https://github.com/thirdweb-dev/js/commit/010955ff5cc35a975b54c25992b8e65b40e033a1) Thanks [@MananTank](https://github.com/MananTank)! - Fix OTP input not working well with Japanese keyboard
|
||||
|
||||
- Updated dependencies [[`956b5645`](https://github.com/thirdweb-dev/js/commit/956b5645e4266cba536abd27ee250dab5aa9a177)]:
|
||||
- @thirdweb-dev/sdk@4.0.3
|
||||
- @thirdweb-dev/wallets@2.0.4
|
||||
- @thirdweb-dev/react-core@4.0.4
|
||||
|
||||
## 4.0.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/react",
|
||||
"version": "4.0.3",
|
||||
"version": "4.0.7",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/react",
|
||||
"author": "thirdweb eng <[email protected]>",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -38,7 +38,9 @@ export function OTPInput(props: {
|
||||
key={i}
|
||||
value={otp[i] ?? ""}
|
||||
type="number"
|
||||
pattern="[0-9]*"
|
||||
variant="outline"
|
||||
inputMode="numeric"
|
||||
onPaste={(e) => {
|
||||
const pastedData = e.clipboardData.getData("text/plain");
|
||||
const newOTP = pastedData
|
||||
|
||||
@@ -1,5 +1,34 @@
|
||||
# @thirdweb-dev/sdk
|
||||
|
||||
## 4.0.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`137f46a5`](https://github.com/thirdweb-dev/js/commit/137f46a5470d2b5f9d7f9eda9b2d839a53ddeb64)]:
|
||||
- @thirdweb-dev/chains@0.1.55
|
||||
|
||||
## 4.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1781](https://github.com/thirdweb-dev/js/pull/1781) [`07544252`](https://github.com/thirdweb-dev/js/commit/07544252b49163e1ae84ba2cc76b99597a1c4553) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Expose utility functions for fetching ABI / sources
|
||||
|
||||
## 4.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`6c30b7ef`](https://github.com/thirdweb-dev/js/commit/6c30b7efc708e1244f3be3e10eac8f3b8b14a8c3)]:
|
||||
- @thirdweb-dev/contracts-js@1.3.16
|
||||
|
||||
## 4.0.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- [#1756](https://github.com/thirdweb-dev/js/pull/1756) [`956b5645`](https://github.com/thirdweb-dev/js/commit/956b5645e4266cba536abd27ee250dab5aa9a177) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Enable adding smart wallet admins via bundler for new account contracts
|
||||
|
||||
- Updated dependencies [[`956b5645`](https://github.com/thirdweb-dev/js/commit/956b5645e4266cba536abd27ee250dab5aa9a177)]:
|
||||
- @thirdweb-dev/contracts-js@1.3.15
|
||||
|
||||
## 4.0.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/sdk",
|
||||
"version": "4.0.2",
|
||||
"version": "4.0.6",
|
||||
"description": "The main thirdweb SDK.",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/sdk",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -73,6 +73,7 @@ import {
|
||||
FEATURE_ACCOUNT,
|
||||
FEATURE_ACCOUNT_FACTORY,
|
||||
FEATURE_ACCOUNT_PERMISSIONS,
|
||||
FEATURE_ACCOUNT_PERMISSIONS_V1,
|
||||
} from "./thirdweb-features";
|
||||
|
||||
/**
|
||||
@@ -146,6 +147,7 @@ export type Feature =
|
||||
| typeof FEATURE_AIRDROP_ERC1155
|
||||
| typeof FEATURE_ACCOUNT
|
||||
| typeof FEATURE_ACCOUNT_PERMISSIONS
|
||||
| typeof FEATURE_ACCOUNT_PERMISSIONS_V1
|
||||
| typeof FEATURE_ACCOUNT_FACTORY;
|
||||
|
||||
export type Extension = Feature;
|
||||
|
||||
@@ -16,6 +16,7 @@ import IAirdropERC721 from "@thirdweb-dev/contracts-js/dist/abis/IAirdropERC721.
|
||||
import IAirdropERC1155 from "@thirdweb-dev/contracts-js/dist/abis/IAirdropERC1155.json";
|
||||
import IAccountFactoryCore from "@thirdweb-dev/contracts-js/dist/abis/IAccountFactoryCore.json";
|
||||
import IAccountPermissions from "@thirdweb-dev/contracts-js/dist/abis/IAccountPermissions.json";
|
||||
import IAccountPermissionsV1 from "@thirdweb-dev/contracts-js/dist/abis/IAccountPermissions_V1.json";
|
||||
import IAccount from "@thirdweb-dev/contracts-js/dist/abis/IAccount.json";
|
||||
|
||||
export const getAllPluginsAbi = [
|
||||
@@ -295,6 +296,18 @@ export const FEATURE_ACCOUNT_FACTORY = {
|
||||
features: {},
|
||||
} as const;
|
||||
|
||||
export const FEATURE_ACCOUNT_PERMISSIONS_V1 = {
|
||||
name: "AccountPermissionsV1",
|
||||
namespace: "accountPermissions",
|
||||
docLinks: {
|
||||
// TODO
|
||||
sdk: "sdk.account",
|
||||
contracts: "IAccountPermissions",
|
||||
},
|
||||
abis: [IAccountPermissionsV1],
|
||||
features: {},
|
||||
} as const;
|
||||
|
||||
export const FEATURE_ACCOUNT_PERMISSIONS = {
|
||||
name: "AccountPermissions",
|
||||
namespace: "accountPermissions",
|
||||
@@ -316,7 +329,10 @@ export const FEATURE_ACCOUNT = {
|
||||
contracts: "IAccount",
|
||||
},
|
||||
abis: [IAccount],
|
||||
features: { [FEATURE_ACCOUNT_PERMISSIONS.name]: FEATURE_ACCOUNT_PERMISSIONS },
|
||||
features: {
|
||||
[FEATURE_ACCOUNT_PERMISSIONS.name]: FEATURE_ACCOUNT_PERMISSIONS,
|
||||
[FEATURE_ACCOUNT_PERMISSIONS_V1.name]: FEATURE_ACCOUNT_PERMISSIONS_V1,
|
||||
},
|
||||
} as const;
|
||||
|
||||
export const FEATURE_AIRDROP_ERC20 = {
|
||||
|
||||
@@ -7,24 +7,30 @@ import { Transaction } from "./transactions";
|
||||
import type {
|
||||
IAccountCore,
|
||||
IAccountPermissions,
|
||||
IAccountPermissions_V1,
|
||||
} from "@thirdweb-dev/contracts-js";
|
||||
import invariant from "tiny-invariant";
|
||||
import { resolveAddress } from "../../common";
|
||||
import { detectContractFeature, resolveAddress } from "../../common";
|
||||
import { resolveOrGenerateId } from "../../common/signature-minting";
|
||||
import { buildTransactionFunction } from "../../common/transactions";
|
||||
import { AddressOrEns } from "../../schema";
|
||||
import {
|
||||
AdminFlag,
|
||||
DEFAULT_PERMISSIONS,
|
||||
PermissionSnapshotInput,
|
||||
PermissionSnapshotOutput,
|
||||
PermissionSnapshotSchema,
|
||||
SignedSignerPermissionsPayload,
|
||||
SignedSignerPermissionsPayloadV1,
|
||||
SignerPermissionRequest,
|
||||
SignerPermissionRequestV1,
|
||||
SignerPermissions,
|
||||
SignerPermissionsInput,
|
||||
SignerPermissionsOutput,
|
||||
SignerPermissionsSchema,
|
||||
SignerWithPermissions,
|
||||
} from "../../types";
|
||||
import { AddressZero } from "../../constants/addresses/AddressZero";
|
||||
|
||||
export class AccountPermissions implements DetectableFeature {
|
||||
featureName = FEATURE_ACCOUNT_PERMISSIONS.name;
|
||||
@@ -85,21 +91,44 @@ export class AccountPermissions implements DetectableFeature {
|
||||
private async sendSignerPermissionRequest(
|
||||
signerAddress: string,
|
||||
permissions: SignerPermissionsOutput,
|
||||
adminFlag: AdminFlag,
|
||||
): Promise<Transaction> {
|
||||
if (
|
||||
detectContractFeature<IAccountPermissions_V1>(
|
||||
this.contractWrapper,
|
||||
"AccountPermissionsV1",
|
||||
)
|
||||
) {
|
||||
// legacy account permissions contract
|
||||
// admin is set only via EOA
|
||||
// signer permissions are set via EOA or admin but no wildcard
|
||||
if (
|
||||
adminFlag === AdminFlag.AddAdmin ||
|
||||
adminFlag === AdminFlag.RemoveAdmin
|
||||
) {
|
||||
return Transaction.fromContractWrapper({
|
||||
contractWrapper: this.contractWrapper,
|
||||
method: "setAdmin",
|
||||
args: [signerAddress, adminFlag === AdminFlag.AddAdmin],
|
||||
});
|
||||
} else {
|
||||
const { payload, signature } = await this.generateLegacyPayload(
|
||||
signerAddress,
|
||||
permissions,
|
||||
);
|
||||
return Transaction.fromContractWrapper({
|
||||
contractWrapper: this.contractWrapper,
|
||||
method: "setPermissionsForSigner",
|
||||
args: [payload, signature],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const { payload, signature } = await this.generatePayload(
|
||||
signerAddress,
|
||||
permissions,
|
||||
adminFlag,
|
||||
);
|
||||
|
||||
const [success] = await this.contractWrapper.read(
|
||||
"verifySignerPermissionRequest",
|
||||
[payload, signature],
|
||||
);
|
||||
|
||||
if (!success) {
|
||||
throw new Error(`Invalid signature.`);
|
||||
}
|
||||
|
||||
return Transaction.fromContractWrapper({
|
||||
contractWrapper: this.contractWrapper,
|
||||
method: "setPermissionsForSigner",
|
||||
@@ -107,29 +136,6 @@ export class AccountPermissions implements DetectableFeature {
|
||||
});
|
||||
}
|
||||
|
||||
private async buildSignerPermissionRequest(
|
||||
signerAddress: string,
|
||||
permissions: SignerPermissionsOutput,
|
||||
): Promise<string> {
|
||||
const { payload, signature } = await this.generatePayload(
|
||||
signerAddress,
|
||||
permissions,
|
||||
);
|
||||
|
||||
const isValidSigner = await this.contractWrapper.read(
|
||||
"verifySignerPermissionRequest",
|
||||
[payload, signature],
|
||||
);
|
||||
if (!isValidSigner) {
|
||||
throw new Error(`Invalid signature.`);
|
||||
}
|
||||
|
||||
return this.contractWrapper.writeContract.interface.encodeFunctionData(
|
||||
"setPermissionsForSigner",
|
||||
[payload, signature],
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate and sign a payload to grant or revoke a signer's access to the account.
|
||||
*
|
||||
@@ -141,11 +147,16 @@ export class AccountPermissions implements DetectableFeature {
|
||||
private async generatePayload(
|
||||
signerAddress: string,
|
||||
permissions: SignerPermissionsOutput,
|
||||
isAdmin: AdminFlag,
|
||||
): Promise<SignedSignerPermissionsPayload> {
|
||||
// Get payload struct.
|
||||
const payload: IAccountPermissions.SignerPermissionRequestStruct = {
|
||||
signer: signerAddress,
|
||||
approvedTargets: permissions.approvedCallTargets,
|
||||
isAdmin: isAdmin.valueOf(),
|
||||
approvedTargets:
|
||||
permissions.approvedCallTargets === "*"
|
||||
? [AddressZero]
|
||||
: permissions.approvedCallTargets,
|
||||
nativeTokenLimitPerTransaction: utils.parseEther(
|
||||
permissions.nativeTokenLimitPerTransaction,
|
||||
),
|
||||
@@ -182,6 +193,53 @@ export class AccountPermissions implements DetectableFeature {
|
||||
return { payload, signature };
|
||||
}
|
||||
|
||||
private async generateLegacyPayload(
|
||||
signerAddress: string,
|
||||
permissions: SignerPermissionsOutput,
|
||||
): Promise<SignedSignerPermissionsPayloadV1> {
|
||||
if (permissions.approvedCallTargets === "*") {
|
||||
throw new Error(
|
||||
"Wildcard call targets are not supported on legacy account permissions contract, please deploy an updated contract factory.",
|
||||
);
|
||||
}
|
||||
// legacy account permissions contract
|
||||
// admin is set only via EOA
|
||||
// signer permissions are set via EOA or admin but no wildcard
|
||||
const payload: IAccountPermissions_V1.SignerPermissionRequestStruct = {
|
||||
signer: signerAddress,
|
||||
approvedTargets: permissions.approvedCallTargets,
|
||||
nativeTokenLimitPerTransaction: utils.parseEther(
|
||||
permissions.nativeTokenLimitPerTransaction,
|
||||
),
|
||||
permissionStartTimestamp: permissions.startDate,
|
||||
permissionEndTimestamp: permissions.expirationDate,
|
||||
reqValidityStartTimestamp: 0,
|
||||
// Req validity ends 10 years from now.
|
||||
reqValidityEndTimestamp: BigNumber.from(
|
||||
Math.floor(
|
||||
new Date(Date.now() + 1000 * 60 * 60 * 24 * 365 * 10).getTime() /
|
||||
1000,
|
||||
),
|
||||
),
|
||||
uid: resolveOrGenerateId(undefined),
|
||||
};
|
||||
const chainId = await this.contractWrapper.getChainID();
|
||||
const connectedSigner = this.contractWrapper.getSigner();
|
||||
invariant(connectedSigner, "No signer available");
|
||||
const signature = await this.contractWrapper.signTypedData(
|
||||
connectedSigner,
|
||||
{
|
||||
name: "Account",
|
||||
version: "1",
|
||||
chainId,
|
||||
verifyingContract: this.getAddress(),
|
||||
},
|
||||
{ SignerPermissionRequest: SignerPermissionRequestV1 },
|
||||
payload,
|
||||
);
|
||||
return { payload, signature };
|
||||
}
|
||||
|
||||
/*********************************
|
||||
* READ FUNCTIONS
|
||||
********************************/
|
||||
@@ -320,11 +378,11 @@ export class AccountPermissions implements DetectableFeature {
|
||||
grantAdminPermissions = /* @__PURE__ */ buildTransactionFunction(
|
||||
async (signerAddress: AddressOrEns): Promise<Transaction> => {
|
||||
const resolvedSignerAddress = await resolveAddress(signerAddress);
|
||||
return Transaction.fromContractWrapper({
|
||||
contractWrapper: this.contractWrapper,
|
||||
method: "setAdmin",
|
||||
args: [resolvedSignerAddress, true],
|
||||
});
|
||||
return await this.sendSignerPermissionRequest(
|
||||
resolvedSignerAddress,
|
||||
DEFAULT_PERMISSIONS,
|
||||
AdminFlag.AddAdmin,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -346,11 +404,11 @@ export class AccountPermissions implements DetectableFeature {
|
||||
revokeAdminPermissions = /* @__PURE__ */ buildTransactionFunction(
|
||||
async (signerAddress: AddressOrEns): Promise<Transaction> => {
|
||||
const resolvedSignerAddress = await resolveAddress(signerAddress);
|
||||
return Transaction.fromContractWrapper({
|
||||
contractWrapper: this.contractWrapper,
|
||||
method: "setAdmin",
|
||||
args: [resolvedSignerAddress, false],
|
||||
});
|
||||
return await this.sendSignerPermissionRequest(
|
||||
resolvedSignerAddress,
|
||||
DEFAULT_PERMISSIONS,
|
||||
AdminFlag.RemoveAdmin,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -395,6 +453,7 @@ export class AccountPermissions implements DetectableFeature {
|
||||
return await this.sendSignerPermissionRequest(
|
||||
resolvedSignerAddress,
|
||||
resolvedPermissions,
|
||||
AdminFlag.None,
|
||||
);
|
||||
},
|
||||
);
|
||||
@@ -440,6 +499,7 @@ export class AccountPermissions implements DetectableFeature {
|
||||
return await this.sendSignerPermissionRequest(
|
||||
resolvedSignerAddress,
|
||||
resolvedPermissions,
|
||||
AdminFlag.None,
|
||||
);
|
||||
},
|
||||
);
|
||||
@@ -475,12 +535,16 @@ export class AccountPermissions implements DetectableFeature {
|
||||
);
|
||||
}
|
||||
|
||||
return await this.sendSignerPermissionRequest(resolvedSignerAddress, {
|
||||
startDate: BigNumber.from(0),
|
||||
expirationDate: BigNumber.from(0),
|
||||
approvedCallTargets: [],
|
||||
nativeTokenLimitPerTransaction: "0",
|
||||
});
|
||||
return await this.sendSignerPermissionRequest(
|
||||
resolvedSignerAddress,
|
||||
{
|
||||
startDate: BigNumber.from(0),
|
||||
expirationDate: BigNumber.from(0),
|
||||
approvedCallTargets: [],
|
||||
nativeTokenLimitPerTransaction: "0",
|
||||
},
|
||||
AdminFlag.None,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -531,13 +595,17 @@ export class AccountPermissions implements DetectableFeature {
|
||||
|
||||
const newTargets = [...permissions.approvedTargets, resolvedTarget];
|
||||
|
||||
return await this.sendSignerPermissionRequest(resolvedSignerAddress, {
|
||||
startDate: BigNumber.from(permissions.startTimestamp),
|
||||
expirationDate: BigNumber.from(permissions.endTimestamp),
|
||||
approvedCallTargets: newTargets,
|
||||
nativeTokenLimitPerTransaction:
|
||||
permissions.nativeTokenLimitPerTransaction.toString(),
|
||||
});
|
||||
return await this.sendSignerPermissionRequest(
|
||||
resolvedSignerAddress,
|
||||
{
|
||||
startDate: BigNumber.from(permissions.startTimestamp),
|
||||
expirationDate: BigNumber.from(permissions.endTimestamp),
|
||||
approvedCallTargets: newTargets,
|
||||
nativeTokenLimitPerTransaction:
|
||||
permissions.nativeTokenLimitPerTransaction.toString(),
|
||||
},
|
||||
AdminFlag.None,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -591,13 +659,17 @@ export class AccountPermissions implements DetectableFeature {
|
||||
utils.getAddress(approvedTarget) !== utils.getAddress(resolvedTarget),
|
||||
);
|
||||
|
||||
return await this.sendSignerPermissionRequest(resolvedSignerAddress, {
|
||||
startDate: BigNumber.from(permissions.startTimestamp),
|
||||
expirationDate: BigNumber.from(permissions.endTimestamp),
|
||||
approvedCallTargets: newTargets,
|
||||
nativeTokenLimitPerTransaction:
|
||||
permissions.nativeTokenLimitPerTransaction.toString(),
|
||||
});
|
||||
return await this.sendSignerPermissionRequest(
|
||||
resolvedSignerAddress,
|
||||
{
|
||||
startDate: BigNumber.from(permissions.startTimestamp),
|
||||
expirationDate: BigNumber.from(permissions.endTimestamp),
|
||||
approvedCallTargets: newTargets,
|
||||
nativeTokenLimitPerTransaction:
|
||||
permissions.nativeTokenLimitPerTransaction.toString(),
|
||||
},
|
||||
AdminFlag.None,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
@@ -651,14 +723,16 @@ export class AccountPermissions implements DetectableFeature {
|
||||
const allToMakeAdmin = resolvedSnapshot
|
||||
.filter((item) => item.makeAdmin)
|
||||
.map((item) => item.signer);
|
||||
allAdmins.forEach((admin) => {
|
||||
allAdmins.forEach(async (admin) => {
|
||||
if (!allToMakeAdmin.includes(admin)) {
|
||||
removeAdminData.push(
|
||||
this.contractWrapper.writeContract.interface.encodeFunctionData(
|
||||
"setAdmin",
|
||||
[admin, false],
|
||||
),
|
||||
);
|
||||
const data = (
|
||||
await this.sendSignerPermissionRequest(
|
||||
admin,
|
||||
DEFAULT_PERMISSIONS,
|
||||
AdminFlag.RemoveAdmin,
|
||||
)
|
||||
).encode();
|
||||
removeAdminData.push(data);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -672,13 +746,13 @@ export class AccountPermissions implements DetectableFeature {
|
||||
await Promise.all(
|
||||
allSigners.map(async (item) => {
|
||||
if (!allToMakeSigners.includes(item.signer)) {
|
||||
const data = await this.buildSignerPermissionRequest(item.signer, {
|
||||
startDate: BigNumber.from(0),
|
||||
expirationDate: BigNumber.from(0),
|
||||
approvedCallTargets: [],
|
||||
nativeTokenLimitPerTransaction: "0",
|
||||
});
|
||||
|
||||
const data = (
|
||||
await this.sendSignerPermissionRequest(
|
||||
item.signer,
|
||||
DEFAULT_PERMISSIONS,
|
||||
AdminFlag.None,
|
||||
)
|
||||
).encode();
|
||||
removeSignerData.push(data);
|
||||
}
|
||||
}),
|
||||
@@ -687,18 +761,23 @@ export class AccountPermissions implements DetectableFeature {
|
||||
for (const member of resolvedSnapshot) {
|
||||
// Add new admin
|
||||
if (member.makeAdmin) {
|
||||
addAdminData.push(
|
||||
this.contractWrapper.writeContract.interface.encodeFunctionData(
|
||||
"setAdmin",
|
||||
[member.signer, true],
|
||||
),
|
||||
);
|
||||
const data = (
|
||||
await this.sendSignerPermissionRequest(
|
||||
member.signer,
|
||||
DEFAULT_PERMISSIONS,
|
||||
AdminFlag.AddAdmin,
|
||||
)
|
||||
).encode();
|
||||
addAdminData.push(data);
|
||||
} else {
|
||||
// Add new scoped
|
||||
const data = await this.buildSignerPermissionRequest(
|
||||
member.signer,
|
||||
member.permissions,
|
||||
);
|
||||
const data = (
|
||||
await this.sendSignerPermissionRequest(
|
||||
member.signer,
|
||||
member.permissions,
|
||||
AdminFlag.None,
|
||||
)
|
||||
).encode();
|
||||
addOrUpdateSignerData.push(data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@ import {
|
||||
SignerPermissionsInput,
|
||||
SignerWithPermissions,
|
||||
} from "../../types";
|
||||
import { AccountPermissions } from "./account-permissions";
|
||||
import { buildTransactionFunction } from "../../common/transactions";
|
||||
import { AccountPermissions } from "./account-permissions";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- TO BE REMOVED IN V4
|
||||
export class Account<TContract extends IAccountCore>
|
||||
@@ -34,6 +34,10 @@ export class Account<TContract extends IAccountCore>
|
||||
detectContractFeature<IAccountCore>(
|
||||
this.contractWrapper,
|
||||
"AccountPermissions",
|
||||
) ||
|
||||
detectContractFeature<IAccountCore>(
|
||||
this.contractWrapper,
|
||||
"AccountPermissionsV1",
|
||||
)
|
||||
) {
|
||||
return new AccountPermissions(this.contractWrapper);
|
||||
|
||||
@@ -7,9 +7,11 @@ import {
|
||||
AbiEvent,
|
||||
AbiFunction,
|
||||
AbiSchema,
|
||||
ContractSource,
|
||||
PublishedMetadata,
|
||||
} from "../../schema/contracts/custom";
|
||||
import { ContractWrapper } from "./contract-wrapper";
|
||||
import { fetchSourceFilesFromMetadata } from "../../common";
|
||||
|
||||
/**
|
||||
* Handles publish metadata for a contract
|
||||
@@ -47,6 +49,14 @@ export class ContractPublishedMetadata<TContract extends BaseContract> {
|
||||
return this._cachedMetadata;
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
public async extractSources(): Promise<ContractSource[]> {
|
||||
const publishedMetadata = await this.get();
|
||||
return fetchSourceFilesFromMetadata(publishedMetadata, this.storage);
|
||||
}
|
||||
|
||||
/**
|
||||
* @public
|
||||
*/
|
||||
|
||||
@@ -27,6 +27,7 @@ import { buildTransactionFunction } from "../../common/transactions";
|
||||
import { isIncrementalVersion } from "../../common/version-checker";
|
||||
import { getContractPublisherAddress } from "../../constants/addresses/getContractPublisherAddress";
|
||||
import {
|
||||
Abi,
|
||||
AbiFunction,
|
||||
AbiSchema,
|
||||
ContractParam,
|
||||
@@ -41,6 +42,7 @@ import {
|
||||
PublishedContract,
|
||||
PublishedContractFetched,
|
||||
PublishedContractSchema,
|
||||
PublishedMetadata,
|
||||
} from "../../schema/contracts/custom";
|
||||
import { SDKOptions } from "../../schema/sdk-options";
|
||||
import { AddressOrEns } from "../../schema/shared/AddressOrEnsSchema";
|
||||
@@ -137,10 +139,11 @@ export class ContractPublisher extends RPCConnectionHandler {
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @param address
|
||||
*/
|
||||
public async fetchCompilerMetadataFromAddress(address: AddressOrEns) {
|
||||
public async fetchCompilerMetadataFromAddress(
|
||||
address: AddressOrEns,
|
||||
): Promise<PublishedMetadata> {
|
||||
const resolvedAddress = await resolveAddress(address);
|
||||
return fetchContractMetadataFromAddress(
|
||||
resolvedAddress,
|
||||
@@ -217,7 +220,7 @@ export class ContractPublisher extends RPCConnectionHandler {
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* Fetch all sources for a contract from its address
|
||||
* @param address
|
||||
*/
|
||||
public async fetchContractSourcesFromAddress(
|
||||
@@ -230,6 +233,22 @@ export class ContractPublisher extends RPCConnectionHandler {
|
||||
return await fetchSourceFilesFromMetadata(metadata, this.storage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch ABI from a contract, or undefined if not found
|
||||
* @param address
|
||||
*/
|
||||
public async fetchContractAbiFromAddress(
|
||||
address: AddressOrEns,
|
||||
): Promise<Abi | undefined> {
|
||||
const resolvedAddress = await resolveAddress(address);
|
||||
const meta = await fetchContractMetadataFromAddress(
|
||||
resolvedAddress,
|
||||
this.getProvider(),
|
||||
this.storage,
|
||||
);
|
||||
return meta.abi;
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @param profileMetadata
|
||||
|
||||
@@ -15,7 +15,6 @@ import { generateExtensionFunctions } from "../../common/plugin/generatePluginFu
|
||||
import { Abi, AbiSchema, CommonContractSchema } from "../../schema";
|
||||
import { utils } from "ethers";
|
||||
import invariant from "tiny-invariant";
|
||||
import { ExtensionAddedEvent } from "@thirdweb-dev/contracts-js/dist/declarations/src/CoreRouter";
|
||||
import {
|
||||
THIRDWEB_DEPLOYER,
|
||||
deployContractDeterministic,
|
||||
@@ -26,9 +25,12 @@ import {
|
||||
} from "../../common";
|
||||
import { joinABIs } from "../../common/plugin/joinABIs";
|
||||
import { TransactionReceipt } from "@ethersproject/abstract-provider";
|
||||
import { ExtensionRemovedEvent } from "@thirdweb-dev/contracts-js/dist/declarations/src/CoreRouter";
|
||||
import { ExtensionReplacedEvent } from "@thirdweb-dev/contracts-js/dist/declarations/src/BaseRouter";
|
||||
import { DynamicContractExtensionMetadataOrUri } from "../../types";
|
||||
import {
|
||||
ExtensionAddedEvent,
|
||||
ExtensionRemovedEvent,
|
||||
ExtensionReplacedEvent,
|
||||
} from "@thirdweb-dev/contracts-js/dist/declarations/src/BaseRouter";
|
||||
|
||||
export class ExtensionManager implements DetectableFeature {
|
||||
featureName = FEATURE_DYNAMIC_CONTRACT.name;
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
import type { IAccountPermissions } from "@thirdweb-dev/contracts-js";
|
||||
import type {
|
||||
IAccountPermissions,
|
||||
IAccountPermissions_V1,
|
||||
} from "@thirdweb-dev/contracts-js";
|
||||
import { BigNumber, BytesLike } from "ethers";
|
||||
import { z } from "zod";
|
||||
import { AmountSchema } from "../../core/schema/shared";
|
||||
@@ -12,12 +15,27 @@ export type SignerPermissions = {
|
||||
approvedCallTargets: string[];
|
||||
};
|
||||
|
||||
export enum AdminFlag {
|
||||
None = 0,
|
||||
AddAdmin = 1,
|
||||
RemoveAdmin = 2,
|
||||
}
|
||||
|
||||
export const DEFAULT_PERMISSIONS = {
|
||||
// eslint-disable-next-line better-tree-shaking/no-top-level-side-effects
|
||||
startDate: BigNumber.from(0),
|
||||
// eslint-disable-next-line better-tree-shaking/no-top-level-side-effects
|
||||
expirationDate: BigNumber.from(0),
|
||||
approvedCallTargets: [],
|
||||
nativeTokenLimitPerTransaction: "0",
|
||||
};
|
||||
|
||||
export const SignerPermissionsSchema = /* @__PURE__ */ (() =>
|
||||
z.object({
|
||||
startDate: StartDateSchema,
|
||||
expirationDate: EndDateSchema,
|
||||
nativeTokenLimitPerTransaction: AmountSchema.default(0),
|
||||
approvedCallTargets: z.array(AddressOrEnsSchema),
|
||||
approvedCallTargets: z.union([z.array(AddressOrEnsSchema), z.literal("*")]),
|
||||
}))();
|
||||
|
||||
export type SignerPermissionsInput = z.input<typeof SignerPermissionsSchema>;
|
||||
@@ -48,7 +66,12 @@ export type SignedSignerPermissionsPayload = {
|
||||
signature: BytesLike;
|
||||
};
|
||||
|
||||
export const SignerPermissionRequest = [
|
||||
export type SignedSignerPermissionsPayloadV1 = {
|
||||
payload: IAccountPermissions_V1.SignerPermissionRequestStruct;
|
||||
signature: BytesLike;
|
||||
};
|
||||
|
||||
export const SignerPermissionRequestV1 = [
|
||||
{ name: "signer", type: "address" },
|
||||
{ name: "approvedTargets", type: "address[]" },
|
||||
{ name: "nativeTokenLimitPerTransaction", type: "uint256" },
|
||||
@@ -58,3 +81,15 @@ export const SignerPermissionRequest = [
|
||||
{ name: "reqValidityEndTimestamp", type: "uint128" },
|
||||
{ name: "uid", type: "bytes32" },
|
||||
];
|
||||
|
||||
export const SignerPermissionRequest = [
|
||||
{ name: "signer", type: "address" },
|
||||
{ name: "isAdmin", type: "uint8" },
|
||||
{ name: "approvedTargets", type: "address[]" },
|
||||
{ name: "nativeTokenLimitPerTransaction", type: "uint256" },
|
||||
{ name: "permissionStartTimestamp", type: "uint128" },
|
||||
{ name: "permissionEndTimestamp", type: "uint128" },
|
||||
{ name: "reqValidityStartTimestamp", type: "uint128" },
|
||||
{ name: "reqValidityEndTimestamp", type: "uint128" },
|
||||
{ name: "uid", type: "bytes32" },
|
||||
];
|
||||
|
||||
@@ -9,7 +9,6 @@ import {
|
||||
} from "../../src/evm";
|
||||
import { ContractFactory, utils } from "ethers";
|
||||
import EntrypointArtifact from "./mock/EntryPoint.json";
|
||||
import AccountFactoryArtifact from "./mock/AccountFactory.json";
|
||||
|
||||
// Target ABIs
|
||||
import IAccountCoreAbi from "@thirdweb-dev/contracts-js/dist/abis/IAccountCore.json";
|
||||
@@ -17,7 +16,12 @@ import {
|
||||
deployContractAndUploadMetadata,
|
||||
mockUploadContractMetadata,
|
||||
} from "./utils";
|
||||
import { IAccountCore, IAccountFactory } from "@thirdweb-dev/contracts-js";
|
||||
import {
|
||||
AccountFactory__factory,
|
||||
IAccountCore,
|
||||
IAccountFactory,
|
||||
} from "@thirdweb-dev/contracts-js";
|
||||
import { AddressZero } from "../../src/evm/constants/addresses/AddressZero";
|
||||
|
||||
describe("Accounts with account factory", function () {
|
||||
let accountFactory: AccountFactory<IAccountFactory>;
|
||||
@@ -57,8 +61,8 @@ describe("Accounts with account factory", function () {
|
||||
adminWallet,
|
||||
).deploy();
|
||||
const factoryAddress = await deployContractAndUploadMetadata(
|
||||
AccountFactoryArtifact.abi,
|
||||
AccountFactoryArtifact.bytecode.object,
|
||||
AccountFactory__factory.abi,
|
||||
AccountFactory__factory.bytecode,
|
||||
adminWallet,
|
||||
[entrypoint.address],
|
||||
);
|
||||
@@ -124,8 +128,8 @@ describe("Accounts with account factory", function () {
|
||||
accountAddress,
|
||||
IAccountCoreAbi,
|
||||
);
|
||||
const account = (await sdk.getContract(accountAddress)).account;
|
||||
const allAdmins = await account.getAllAdmins();
|
||||
const acc = (await sdk.getContract(accountAddress)).account;
|
||||
const allAdmins = await acc.getAllAdmins();
|
||||
assert.isTrue(
|
||||
allAdmins.length === 1,
|
||||
"Account should only have one admin.",
|
||||
@@ -139,8 +143,9 @@ describe("Accounts with account factory", function () {
|
||||
"Correct admin for account.",
|
||||
);
|
||||
|
||||
const associatedAccounts =
|
||||
await accountFactory.getAssociatedAccounts(admin);
|
||||
const associatedAccounts = await accountFactory.getAssociatedAccounts(
|
||||
admin,
|
||||
);
|
||||
|
||||
assert.isTrue(
|
||||
associatedAccounts.length === 1,
|
||||
@@ -185,65 +190,65 @@ describe("Accounts with account factory", function () {
|
||||
account = (await sdk.getContract(accountAddress)).account;
|
||||
});
|
||||
|
||||
// it("Should be able to add another admin to the account.", async () => {
|
||||
// assert.isFalse(
|
||||
// await account.isAdmin(signer1Wallet.address),
|
||||
// "New signer1 should not be an admin on the account.",
|
||||
// );
|
||||
it("Should be able to add another admin to the account.", async () => {
|
||||
assert.isFalse(
|
||||
await account.isAdmin(signer1Wallet.address),
|
||||
"New signer1 should not be an admin on the account.",
|
||||
);
|
||||
|
||||
// await account.grantAdminPermissions(signer1Wallet.address);
|
||||
await account.grantAdminPermissions(signer1Wallet.address);
|
||||
|
||||
// assert.isTrue(
|
||||
// await account.isAdmin(signer1Wallet.address),
|
||||
// "New signer1 should be an admin on the account.",
|
||||
// );
|
||||
assert.isTrue(
|
||||
await account.isAdmin(signer1Wallet.address),
|
||||
"New signer1 should be an admin on the account.",
|
||||
);
|
||||
|
||||
// const isAdmin = (await account.getAllAdmins()).includes(
|
||||
// utils.getAddress(signer1Wallet.address),
|
||||
// );
|
||||
const isAdmin = (await account.getAllAdmins()).includes(
|
||||
utils.getAddress(signer1Wallet.address),
|
||||
);
|
||||
|
||||
// assert.isTrue(isAdmin, "New signer1 should be an admin on the account.");
|
||||
assert.isTrue(isAdmin, "New signer1 should be an admin on the account.");
|
||||
|
||||
// assert.isTrue(
|
||||
// (
|
||||
// await accountFactory.getAssociatedAccounts(signer1Wallet.address)
|
||||
// ).includes(account.getAddress()),
|
||||
// "Wallet is an associated account of the signer.",
|
||||
// );
|
||||
// });
|
||||
assert.isTrue(
|
||||
(
|
||||
await accountFactory.getAssociatedAccounts(signer1Wallet.address)
|
||||
).includes(account.getAddress()),
|
||||
"Wallet is an associated account of the signer.",
|
||||
);
|
||||
});
|
||||
|
||||
// it("Should be able to remove an admin from the account.", async () => {
|
||||
// await account.grantAdminPermissions(signer1Wallet.address);
|
||||
// assert.isTrue(
|
||||
// await account.isAdmin(signer1Wallet.address),
|
||||
// "New signer1 should be an admin on the account.",
|
||||
// );
|
||||
it("Should be able to remove an admin from the account.", async () => {
|
||||
await account.grantAdminPermissions(signer1Wallet.address);
|
||||
assert.isTrue(
|
||||
await account.isAdmin(signer1Wallet.address),
|
||||
"New signer1 should be an admin on the account.",
|
||||
);
|
||||
|
||||
// await account.revokeAdminPermissions(signer1Wallet.address);
|
||||
await account.revokeAdminPermissions(signer1Wallet.address);
|
||||
|
||||
// assert.isFalse(
|
||||
// await account.isAdmin(signer1Wallet.address),
|
||||
// "New signer1 should not be an admin on the account.",
|
||||
// );
|
||||
assert.isFalse(
|
||||
await account.isAdmin(signer1Wallet.address),
|
||||
"New signer1 should not be an admin on the account.",
|
||||
);
|
||||
|
||||
// assert.isFalse(
|
||||
// (await account.getAllSigners())
|
||||
// .map((result) => utils.getAddress(result.signer))
|
||||
// .includes(signer1Wallet.address),
|
||||
// "New signer1 should not be an admin on the account.",
|
||||
// );
|
||||
assert.isFalse(
|
||||
(await account.getAllSigners())
|
||||
.map((result) => utils.getAddress(result.signer))
|
||||
.includes(signer1Wallet.address),
|
||||
"New signer1 should not be an admin on the account.",
|
||||
);
|
||||
|
||||
// assert.isFalse(
|
||||
// (await account.getAllAdmins()).includes(signer1Wallet.address),
|
||||
// "New signer1 is not an associated signer of the account.",
|
||||
// );
|
||||
// assert.isFalse(
|
||||
// (
|
||||
// await accountFactory.getAssociatedAccounts(signer1Wallet.address)
|
||||
// ).includes(account.getAddress()),
|
||||
// "Wallet is not an associated account of the signer.",
|
||||
// );
|
||||
// });
|
||||
assert.isFalse(
|
||||
(await account.getAllAdmins()).includes(signer1Wallet.address),
|
||||
"New signer1 is not an associated signer of the account.",
|
||||
);
|
||||
assert.isFalse(
|
||||
(
|
||||
await accountFactory.getAssociatedAccounts(signer1Wallet.address)
|
||||
).includes(account.getAddress()),
|
||||
"Wallet is not an associated account of the signer.",
|
||||
);
|
||||
});
|
||||
|
||||
it("Should be able to grant restricted access to a new signer.", async () => {
|
||||
const signersWithRestrictions = await account.getAllSigners();
|
||||
@@ -306,6 +311,56 @@ describe("Accounts with account factory", function () {
|
||||
);
|
||||
});
|
||||
|
||||
it("Should be able to restrict approved targets.", async () => {
|
||||
// Grant access
|
||||
await account.grantPermissions(signer1Wallet.address, {
|
||||
nativeTokenLimitPerTransaction: "1",
|
||||
approvedCallTargets: [adminWallet.address],
|
||||
});
|
||||
|
||||
const s = await account.getAllSigners();
|
||||
const restrictions = s.find(
|
||||
(result) =>
|
||||
utils.getAddress(result.signer) ===
|
||||
utils.getAddress(signer1Wallet.address),
|
||||
)?.permissions as SignerPermissions;
|
||||
assert.strictEqual(
|
||||
restrictions.approvedCallTargets.length,
|
||||
1,
|
||||
"New signer1 should have one approved call targets.",
|
||||
);
|
||||
assert.strictEqual(
|
||||
restrictions.approvedCallTargets[0],
|
||||
adminWallet.address,
|
||||
"New signer1 should have the expected approved call targets.",
|
||||
);
|
||||
});
|
||||
|
||||
it("Should be able to approve any target.", async () => {
|
||||
// Grant access
|
||||
await account.grantPermissions(signer1Wallet.address, {
|
||||
nativeTokenLimitPerTransaction: "1",
|
||||
approvedCallTargets: "*",
|
||||
});
|
||||
|
||||
const s = await account.getAllSigners();
|
||||
const restrictions = s.find(
|
||||
(result) =>
|
||||
utils.getAddress(result.signer) ===
|
||||
utils.getAddress(signer1Wallet.address),
|
||||
)?.permissions as SignerPermissions;
|
||||
assert.strictEqual(
|
||||
restrictions.approvedCallTargets.length,
|
||||
1,
|
||||
"New signer1 should have one approved call targets.",
|
||||
);
|
||||
assert.strictEqual(
|
||||
restrictions.approvedCallTargets[0],
|
||||
AddressZero,
|
||||
"New signer1 should have the expected approved call targets.",
|
||||
);
|
||||
});
|
||||
|
||||
it("Should not be able to grant restricted access to a signer who already has access.", async () => {
|
||||
// Grant access to signer1
|
||||
await account.grantPermissions(signer1Wallet.address, {
|
||||
|
||||
@@ -230,7 +230,7 @@ export const mochaHooks = {
|
||||
if (contractType === "custom" || contractType === "marketplace-v3") {
|
||||
continue;
|
||||
}
|
||||
let factories: any[] = [];
|
||||
const factories: any[] = [];
|
||||
switch (contractType) {
|
||||
case TokenInitializer.contractType:
|
||||
factories.push(TokenERC20__factory);
|
||||
@@ -367,7 +367,7 @@ async function setupMultichainRegistry(
|
||||
|
||||
// Setup marketplace-v3 for tests
|
||||
async function setupMarketplaceV3(): Promise<string> {
|
||||
let extensions: Extension[] = [];
|
||||
const extensions: Extension[] = [];
|
||||
|
||||
// Direct Listings
|
||||
const directListingsExtensionAddress = await deployContractAndUploadMetadata(
|
||||
|
||||
@@ -1,5 +1,42 @@
|
||||
# @thirdweb-dev/unity-js-bridge
|
||||
|
||||
## 0.2.93
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`137f46a5`](https://github.com/thirdweb-dev/js/commit/137f46a5470d2b5f9d7f9eda9b2d839a53ddeb64)]:
|
||||
- @thirdweb-dev/chains@0.1.55
|
||||
- @thirdweb-dev/sdk@4.0.6
|
||||
- @thirdweb-dev/wallets@2.0.7
|
||||
- @thirdweb-dev/auth@4.0.7
|
||||
|
||||
## 0.2.92
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`07544252`](https://github.com/thirdweb-dev/js/commit/07544252b49163e1ae84ba2cc76b99597a1c4553)]:
|
||||
- @thirdweb-dev/sdk@4.0.5
|
||||
- @thirdweb-dev/wallets@2.0.6
|
||||
- @thirdweb-dev/auth@4.0.6
|
||||
|
||||
## 0.2.91
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies []:
|
||||
- @thirdweb-dev/sdk@4.0.4
|
||||
- @thirdweb-dev/wallets@2.0.5
|
||||
- @thirdweb-dev/auth@4.0.5
|
||||
|
||||
## 0.2.90
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`956b5645`](https://github.com/thirdweb-dev/js/commit/956b5645e4266cba536abd27ee250dab5aa9a177)]:
|
||||
- @thirdweb-dev/sdk@4.0.3
|
||||
- @thirdweb-dev/wallets@2.0.4
|
||||
- @thirdweb-dev/auth@4.0.4
|
||||
|
||||
## 0.2.89
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/unity-js-bridge",
|
||||
"version": "0.2.89",
|
||||
"version": "0.2.93",
|
||||
"main": "dist/thirdweb-unity-bridge.js",
|
||||
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/unity-js-bridge",
|
||||
"license": "Apache-2.0",
|
||||
|
||||
@@ -1,5 +1,36 @@
|
||||
# @thirdweb-dev/wallets
|
||||
|
||||
## 2.0.7
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`137f46a5`](https://github.com/thirdweb-dev/js/commit/137f46a5470d2b5f9d7f9eda9b2d839a53ddeb64)]:
|
||||
- @thirdweb-dev/chains@0.1.55
|
||||
- @thirdweb-dev/sdk@4.0.6
|
||||
|
||||
## 2.0.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`07544252`](https://github.com/thirdweb-dev/js/commit/07544252b49163e1ae84ba2cc76b99597a1c4553)]:
|
||||
- @thirdweb-dev/sdk@4.0.5
|
||||
|
||||
## 2.0.5
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`6c30b7ef`](https://github.com/thirdweb-dev/js/commit/6c30b7efc708e1244f3be3e10eac8f3b8b14a8c3)]:
|
||||
- @thirdweb-dev/contracts-js@1.3.16
|
||||
- @thirdweb-dev/sdk@4.0.4
|
||||
|
||||
## 2.0.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [[`956b5645`](https://github.com/thirdweb-dev/js/commit/956b5645e4266cba536abd27ee250dab5aa9a177)]:
|
||||
- @thirdweb-dev/contracts-js@1.3.15
|
||||
- @thirdweb-dev/sdk@4.0.3
|
||||
|
||||
## 2.0.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@thirdweb-dev/wallets",
|
||||
"version": "2.0.3",
|
||||
"version": "2.0.7",
|
||||
"main": "dist/thirdweb-dev-wallets.cjs.js",
|
||||
"module": "dist/thirdweb-dev-wallets.esm.js",
|
||||
"types": "dist/thirdweb-dev-wallets.cjs.d.ts",
|
||||
|
||||
Generated
+7
-6
@@ -380,8 +380,8 @@ importers:
|
||||
packages/contracts-js:
|
||||
dependencies:
|
||||
'@thirdweb-dev/contracts':
|
||||
specifier: 3.10.2-3
|
||||
version: 3.10.2-3([email protected])
|
||||
specifier: 3.10.3
|
||||
version: 3.10.3([email protected])
|
||||
devDependencies:
|
||||
'@babel/preset-env':
|
||||
specifier: ^7.22.9
|
||||
@@ -12033,8 +12033,9 @@ packages:
|
||||
use-sync-external-store: 1.2.0([email protected])
|
||||
dev: false
|
||||
|
||||
/@thirdweb-dev/[email protected].2-3([email protected]):
|
||||
resolution: {integrity: sha512-QWO9HT4k3s86oMyE/SbDWhgm/Na9FnxOkVjhyuOigmrwq5NlNp7NCcmecQgILxvUiLXO9if9OeFlYCFGsJinng==}
|
||||
/@thirdweb-dev/[email protected]([email protected]):
|
||||
resolution: {integrity: sha512-wSVNaEoosn0AgUtnxlvv7rgK+3EUMzJm2ZasofPgJgqGS3gYH5nDBmK29VMquA2BLc38OAPyYMWc/iQCiCikMg==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
dependencies:
|
||||
'@chainlink/contracts': 0.6.1([email protected])
|
||||
'@openzeppelin/contracts': 4.9.3
|
||||
@@ -17545,7 +17546,7 @@ packages:
|
||||
minimatch: 3.1.2
|
||||
object.values: 1.1.6
|
||||
resolve: 1.22.1
|
||||
semver: 7.5.4
|
||||
semver: 7.5.3
|
||||
tsconfig-paths: 3.14.2
|
||||
transitivePeerDependencies:
|
||||
- eslint-import-resolver-typescript
|
||||
@@ -25549,7 +25550,7 @@ packages:
|
||||
engines: {node: '>=12.0.0'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
protobufjs: ^7.0.0
|
||||
protobufjs: '>=7.2.4'
|
||||
dependencies:
|
||||
chalk: 4.1.2
|
||||
escodegen: 1.14.3
|
||||
|
||||
Reference in New Issue
Block a user