@the_library/web3-registry-addresses 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +88 -0
- package/dist/index.d.ts +46 -2
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/package.json +5 -7
package/README.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# @the_library/web3-registry-addresses
|
|
2
|
+
|
|
3
|
+
This package provides the essential address resolution and caching sessions for the decentralized **D-Library** project located at [https://datapond.earth](https://datapond.earth).
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The `web3-registry-addresses` module acts as the canonical bridge to our immutable blockchain infrastructure. It is responsible for translating decentralized records and managing Web3 sessions, ensuring that clients always connect to the accurate, certified ledgers endorsed by [dsafe.us](https://dsafe.us).
|
|
8
|
+
|
|
9
|
+
## Legal Notice & D-CODE OPEN SOVEREIGN LICENCE
|
|
10
|
+
|
|
11
|
+
**WARNING: PROPRIETARY PUBLIC SOURCE | D-SAFE COMPLIANT**
|
|
12
|
+
|
|
13
|
+
This software is released strictly under the **D-CODE OPEN SOVEREIGN LICENCE (v1.2)**. By utilizing this package, you agree to its binding conditions.
|
|
14
|
+
|
|
15
|
+
### Critical Infrastructure Clause
|
|
16
|
+
As defined in **Section 3: Technical Anchors & Hard-Fork Resilience** of the license:
|
|
17
|
+
|
|
18
|
+
> **Immutable Addresses:** You are prohibited from manually modifying the hard-coded Smart Contract addresses or D-SAFE Source URLs embedded in this package to point to non-certified ledgers.
|
|
19
|
+
|
|
20
|
+
**Modifying the registry endpoints or overriding the canonical lookup configuration within this package to point to private, uncertified, or centralized ledgers constitutes a material breach of the provided D-CODE OPEN SOVEREIGN LICENCE.**
|
|
21
|
+
|
|
22
|
+
This restriction prevents forking intended to restrict public access or bypass the D-SAFE Specification requirements.
|
|
23
|
+
|
|
24
|
+
## Installation
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install @the_library/web3-registry-addresses
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## API Surface
|
|
31
|
+
|
|
32
|
+
The primary export of this package is the singleton instance `registryAddressLoader`. It handles querying the blockchain for deployed official contracts and managing the local browser cache to prevent redundant reads.
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { registryAddressLoader } from '@the_library/web3-registry-addresses';
|
|
36
|
+
import { AddressRegistryReadAPI, Tech } from '@the_library/web3-core';
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Methods
|
|
40
|
+
|
|
41
|
+
#### `Initialize(tech: Tech, chainId: string | number, registry: AddressRegistryReadAPI): Promise<Record<string, string>>`
|
|
42
|
+
Bootstraps the registry by querying the on-chain Factory contract. It fetches all official contract names, resolves their addresses, and retrieves their ABIs from Arweave.
|
|
43
|
+
- Results are cached in `localStorage` for 24 hours to accelerate sub-sequent pageloads.
|
|
44
|
+
- Returns a normalized dictionary of contract addresses.
|
|
45
|
+
|
|
46
|
+
#### `getAddress(tech: string, chainId: string | number, name: string): string | undefined`
|
|
47
|
+
A synchronous, zero-latency lookup that retrieves the certified smart contract address from the active loader cache.
|
|
48
|
+
|
|
49
|
+
#### `getAbi(tech: string, chainId: string | number, name: string): any`
|
|
50
|
+
Synchronously retrieves the parsed Arweave ABI JSON structure from the local cache.
|
|
51
|
+
|
|
52
|
+
### Canonical Contract Configuration (`config`)
|
|
53
|
+
This package also actively re-exports the canonical baseline `config` from `@the_library/web3-contracts`. This allows developers to easily loop over every endorsed network and instantiate the Web3 architecture programmatically:
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
import { config, registryAddressLoader } from '@the_library/web3-registry-addresses';
|
|
57
|
+
import { Tech } from '@the_library/web3-core';
|
|
58
|
+
|
|
59
|
+
const loadDCODEContracts = async () => {
|
|
60
|
+
// Iterate over all endorsed technologies (e.g. EVM, Tron)
|
|
61
|
+
for (const tech of Object.keys(config)) {
|
|
62
|
+
// Iterate over all official network configurations for that tech
|
|
63
|
+
for (const network of Object.keys(config[tech as Tech])) {
|
|
64
|
+
const networkConfig = config[tech as Tech][network];
|
|
65
|
+
|
|
66
|
+
console.log(`Loading ${tech} network ${network}...`);
|
|
67
|
+
|
|
68
|
+
// Example: Instantiate your network-specific read API
|
|
69
|
+
// const registryApi = new EvmRegistryReadAPI(networkConfig);
|
|
70
|
+
|
|
71
|
+
// Fetch and resolve the canonical smart contracts
|
|
72
|
+
/*
|
|
73
|
+
const addresses = await registryAddressLoader.Initialize(
|
|
74
|
+
tech as Tech,
|
|
75
|
+
network,
|
|
76
|
+
registryApi
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
console.log(`Resolved Contracts for ${tech}:${network}:`, addresses);
|
|
80
|
+
*/
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
**COPYRIGHT:** © 2026 DATAPOND PUBLIC LIBRARY TRUST - Australia
|
|
88
|
+
**TECHNICAL GUARDIAN:** POND ENTERPRISE PTY LTD - Australia
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
type Tech = 'evm' | 'tron';
|
|
2
|
+
interface AddressRegistryContractRecord {
|
|
3
|
+
contractAddress: string;
|
|
4
|
+
abiUrl: string;
|
|
5
|
+
}
|
|
6
|
+
interface AddressRegistryReadAPI {
|
|
7
|
+
getLatestContract(name: string): Promise<[address: string, abiUrl: string]>;
|
|
8
|
+
getContractHistory(name: string): Promise<AddressRegistryContractRecord[]>;
|
|
9
|
+
getAllContractNames(): Promise<string[]>;
|
|
10
|
+
}
|
|
2
11
|
|
|
3
12
|
interface CacheEntry {
|
|
4
13
|
address: string;
|
|
@@ -24,4 +33,39 @@ declare class RegistryAddressLoader {
|
|
|
24
33
|
}
|
|
25
34
|
declare const registryAddressLoader: RegistryAddressLoader;
|
|
26
35
|
|
|
27
|
-
|
|
36
|
+
interface ProviderConfig {
|
|
37
|
+
"chainId": number | string;
|
|
38
|
+
"main": boolean;
|
|
39
|
+
"symbol": string;
|
|
40
|
+
"website": string;
|
|
41
|
+
"rpc": string;
|
|
42
|
+
"explorer": string;
|
|
43
|
+
"name": string;
|
|
44
|
+
"original": string;
|
|
45
|
+
"shortName": string;
|
|
46
|
+
"deployed": boolean;
|
|
47
|
+
"addresses"?: {
|
|
48
|
+
"addressRegistry"?: string;
|
|
49
|
+
"factory"?: string;
|
|
50
|
+
"bouncerStorage"?: string;
|
|
51
|
+
"scientistStorage"?: string;
|
|
52
|
+
"backupStorage"?: string;
|
|
53
|
+
"projectManagerStorage"?: string;
|
|
54
|
+
};
|
|
55
|
+
brand: 'CORE' | 'TRON';
|
|
56
|
+
"decimals": number;
|
|
57
|
+
faucet?: string;
|
|
58
|
+
faucetAmount?: number;
|
|
59
|
+
}
|
|
60
|
+
interface ContractConfigs {
|
|
61
|
+
evm: {
|
|
62
|
+
[chainId: string]: ProviderConfig;
|
|
63
|
+
};
|
|
64
|
+
tron: {
|
|
65
|
+
[chainId: string]: ProviderConfig;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
declare const _default: ContractConfigs;
|
|
70
|
+
|
|
71
|
+
export { type CacheEntry, RegistryAddressLoader, type RegistryCache, _default as config, registryAddressLoader };
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
var
|
|
2
|
-
export{d as RegistryAddressLoader,$ as registryAddressLoader};//# sourceMappingURL=index.js.map
|
|
1
|
+
var f="dcode_registry_cache_v2_",b=1440*60*1e3,y=class{constructor(){this.memoryCache=new Map}getCacheKey(t,e){return`${f}${t}_${e}`}getFromLocalStorage(t){let e=localStorage.getItem(t);if(!e)return null;try{return JSON.parse(e)}catch(a){return console.error(`[RegistryLoader] Failed to parse cache for ${t}`,a),null}}saveToLocalStorage(t,e){localStorage.setItem(t,JSON.stringify(e))}async fetchAbiFromArweave(t){if(!t)return null;try{let e=await fetch(`https://arweave.net/${t}`);if(e.ok){let a=await e.json();return`${t}`,a}console.error(`[RegistryLoader] Arweave fetch failed for ${t}: ${e.status} ${e.statusText}`)}catch(e){console.warn(`[RegistryLoader] Failed to fetch ABI from Arweave (${t}):`,e)}return null}async Initialize(t,e,a){let s=this.getCacheKey(t,e),d=Date.now(),r=this.memoryCache.get(s)||this.getFromLocalStorage(s);if(r&&d-r.timestamp<b){`${t}${e}`,this.memoryCache.set(s,r);let n={};return Object.values(r.entries).forEach(i=>{let o=i.originalName.charAt(0).toLowerCase()+i.originalName.slice(1);n[o]=i.address}),n}`${t}${e}`;let p=await a.getAllContractNames();`${p.length}${t}${e}`;let m={},g={};for(let n of p)try{let[i,o]=await a.getLatestContract(n),c=n.toLowerCase(),h=n.charAt(0).toLowerCase()+n.slice(1),l=null;r&&r.entries[c]&&r.entries[c].txId===o?l=r.entries[c].abi:o?(`${n}${o}`,l=await this.fetchAbiFromArweave(o)):console.warn(`[RegistryLoader] No ABI URL found for ${n} on ${t}:${e}`),m[c]={address:i,abi:l,txId:o,originalName:n},g[h]=i}catch(i){console.warn(`[RegistryLoader] Failed to load contract ${n} for ${t}:${e}:`,i)}let u={timestamp:d,entries:m};return this.memoryCache.set(s,u),this.saveToLocalStorage(s,u),g}getAddress(t,e,a){let s=this.getCacheKey(t,e);return this.memoryCache.get(s)?.entries[a.toLowerCase()]?.address}getAbi(t,e,a){let s=this.getCacheKey(t,e);return this.memoryCache.get(s)?.entries[a.toLowerCase()]?.abi}},w=new y;var T={evm:{1114:{chainId:1114,main:!1,symbol:"tCORE2",shortName:"SUN",original:"Core Blockchain TestNet",faucet:"https://scan.test2.btcs.network/faucet",faucetAmount:1,decimals:18,website:"https://coredao.org/",rpc:"https://rpc.test2.btcs.network",explorer:"https://scan.test2.btcs.network",name:"Two Core Test",brand:"CORE",deployed:!0,addresses:{addressRegistry:"0x77A0Cf8a9B82dEE29ca82Bb6A773463a02E6Cf60"}},1116:{chainId:1116,main:!0,symbol:"CORE",shortName:"TREE",decimals:18,website:"https://coredao.org/",rpc:"https://rpc.coredao.org",explorer:"https://scan.coredao.org",name:"Main",original:"Core Blockchain MainNet",brand:"CORE",deployed:!0,addresses:{addressRegistry:"0xD85bED3c96F36647BE073D120bfA5E7AcE491864"}}},tron:{nile:{main:!1,website:"https://nile.trongrid.io/",chainId:"nile",symbol:"NileTRX",shortName:"WATER",decimals:6,rpc:"https://nile.trongrid.io",explorer:"https://nilescan.org",name:"Nile",original:"Nile TestNet",faucet:"https://nilescan.org/faucet",faucetAmount:2e3,brand:"TRON",deployed:!0,addresses:{addressRegistry:"419368123d6c77ae9e4a17af4e6c21dd30a79596f5"}},shasta:{main:!1,chainId:"shasta",website:"https://shasta.trongrid.io",rpc:"https://api.shasta.trongrid.io",explorer:"https://shastanet.tronscan.org",name:"Shasta",original:"Shasta TestNet",symbol:"ShastaTRX",shortName:"SUN",decimals:6,faucet:"https://shasta.tronex.io/join/getJoinPage",faucetAmount:2e3,brand:"TRON",deployed:!0,addresses:{addressRegistry:"41028907b1ca0729597624643ae939ccdb9293fc15"}},mainnet:{main:!0,chainId:"mainnet",rpc:"https://api.trongrid.io",explorer:"https://tronscan.org",name:"Tron",decimals:6,original:"Tron MainNet",symbol:"TRX",shortName:"TREE",website:"https://tron.network/",brand:"TRON",deployed:!1,addresses:{}}}},A={abi:[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"oldAdmin",type:"address"},{indexed:!0,internalType:"address",name:"newAdmin",type:"address"}],name:"AdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"string",name:"name",type:"string"},{indexed:!0,internalType:"address",name:"contractAddress",type:"address"},{indexed:!1,internalType:"string",name:"abiUrl",type:"string"},{indexed:!1,internalType:"uint256",name:"version",type:"uint256"}],name:"ContractAdded",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"address",name:"contractAddress",type:"address"},{internalType:"string",name:"abiUrl",type:"string"}],name:"addContract",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"admin",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newAdmin",type:"address"}],name:"changeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getAllContractNames",outputs:[{internalType:"string[]",name:"",type:"string[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"name",type:"string"}],name:"getContractHistory",outputs:[{components:[{internalType:"address",name:"contractAddress",type:"address"},{internalType:"string",name:"abiUrl",type:"string"}],internalType:"struct AddressRegistry.ContractRecord[]",name:"",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"name",type:"string"}],name:"getLatestContract",outputs:[{internalType:"address",name:"",type:"address"},{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}]},C={abi:[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"oldAdmin",type:"address"},{indexed:!0,internalType:"address",name:"newAdmin",type:"address"}],name:"AdminChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"string",name:"name",type:"string"},{indexed:!0,internalType:"address",name:"contractAddress",type:"address"},{indexed:!1,internalType:"string",name:"abiUrl",type:"string"},{indexed:!1,internalType:"uint256",name:"version",type:"uint256"}],name:"ContractAdded",type:"event"},{inputs:[{internalType:"string",name:"name",type:"string"},{internalType:"address",name:"contractAddress",type:"address"},{internalType:"string",name:"abiUrl",type:"string"}],name:"addContract",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"admin",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newAdmin",type:"address"}],name:"changeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"getAllContractNames",outputs:[{internalType:"string[]",name:"",type:"string[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"name",type:"string"}],name:"getContractHistory",outputs:[{components:[{internalType:"address",name:"contractAddress",type:"address"},{internalType:"string",name:"abiUrl",type:"string"}],internalType:"struct AddressRegistry.ContractRecord[]",name:"",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"name",type:"string"}],name:"getLatestContract",outputs:[{internalType:"address",name:"",type:"address"},{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"}]},N=A.abi,x=C.abi;export{y as RegistryAddressLoader,T as config,w as registryAddressLoader};
|
|
3
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/loader.ts"],"names":["CACHE_KEY_PREFIX","CACHE_DURATION_MS","RegistryAddressLoader","tech","chainId","key","data","e","cache","abiUrl","res","abi","registry","cacheKey","now","addresses","entry","camelCaseName","contractNames","newEntries","name","address","normalizedName","newCache","registryAddressLoader"],"mappings":"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","file":"index.js","sourcesContent":["import { ReadOnlyDomainAPI, Tech, AddressRegistryReadAPI } from '@the_library/web3-core';\n\nconst CACHE_KEY_PREFIX = 'dcode_registry_cache_v2_';\nconst CACHE_DURATION_MS = 24 * 60 * 60 * 1000; // 24 hours\n\nexport interface CacheEntry {\n address: string;\n abi: any;\n txId: string;\n originalName: string;\n}\n\nexport interface RegistryCache {\n timestamp: number;\n entries: {\n [contractName: string]: CacheEntry;\n };\n}\n\nexport class RegistryAddressLoader {\n private memoryCache: Map<string, RegistryCache> = new Map();\n\n private getCacheKey(tech: string, chainId: string | number): string {\n return `${CACHE_KEY_PREFIX}${tech}_${chainId}`;\n }\n\n private getFromLocalStorage(key: string): RegistryCache | null {\n const data = localStorage.getItem(key);\n if (!data) return null;\n try {\n return JSON.parse(data);\n } catch (e) {\n console.error(`[RegistryLoader] Failed to parse cache for ${key}`, e);\n return null;\n }\n }\n\n private saveToLocalStorage(key: string, cache: RegistryCache): void {\n localStorage.setItem(key, JSON.stringify(cache));\n }\n\n private async fetchAbiFromArweave(abiUrl: string): Promise<any> {\n if (!abiUrl) return null;\n try {\n const res = await fetch(`https://arweave.net/${abiUrl}`);\n if (res.ok) {\n const abi = await res.json();\n console.log(`[RegistryLoader] Successfully fetched ABI for ${abiUrl}`);\n return abi;\n }\n console.error(`[RegistryLoader] Arweave fetch failed for ${abiUrl}: ${res.status} ${res.statusText}`);\n } catch (e) {\n console.warn(`[RegistryLoader] Failed to fetch ABI from Arweave (${abiUrl}):`, e);\n }\n return null;\n }\n\n public async Initialize(tech: Tech, chainId: number | string, registry: AddressRegistryReadAPI): Promise<Record<string, string>> {\n const cacheKey = this.getCacheKey(tech, chainId);\n const now = Date.now();\n\n let cache = this.memoryCache.get(cacheKey) || this.getFromLocalStorage(cacheKey);\n\n // Time Check: Has it been less than 24 hours?\n if (cache && (now - cache.timestamp < CACHE_DURATION_MS)) {\n console.log(`[RegistryLoader] Cache valid for ${tech}:${chainId}`);\n this.memoryCache.set(cacheKey, cache);\n const addresses: Record<string, string> = {};\n Object.values(cache.entries).forEach(entry => {\n const camelCaseName = entry.originalName.charAt(0).toLowerCase() + entry.originalName.slice(1);\n addresses[camelCaseName] = entry.address;\n });\n return addresses;\n }\n\n console.log(`[RegistryLoader] Cache expired or missing for ${tech}:${chainId}. Performing Full Sync...`);\n\n const contractNames = await registry.getAllContractNames();\n console.log(`[RegistryLoader] Retrieved ${contractNames.length} contract names for ${tech}:${chainId}:`, contractNames);\n const newEntries: { [name: string]: CacheEntry } = {};\n const addresses: Record<string, string> = {};\n\n for (const name of contractNames) {\n try {\n const [address, abiUrl] = await registry.getLatestContract(name);\n const normalizedName = name.toLowerCase();\n const camelCaseName = name.charAt(0).toLowerCase() + name.slice(1);\n\n let abi = null;\n // Try to reuse ABI from old cache if txId matches\n if (cache && cache.entries[normalizedName] && cache.entries[normalizedName].txId === abiUrl) {\n abi = cache.entries[normalizedName].abi;\n } else if (abiUrl) {\n console.log(`[RegistryLoader] Fetching new ABI for ${name} (${abiUrl})...`);\n abi = await this.fetchAbiFromArweave(abiUrl);\n } else {\n console.warn(`[RegistryLoader] No ABI URL found for ${name} on ${tech}:${chainId}`);\n }\n\n newEntries[normalizedName] = {\n address,\n abi,\n txId: abiUrl,\n originalName: name\n };\n addresses[camelCaseName] = address;\n } catch (e) {\n console.warn(`[RegistryLoader] Failed to load contract ${name} for ${tech}:${chainId}:`, e);\n }\n }\n\n const newCache: RegistryCache = {\n timestamp: now,\n entries: newEntries\n };\n\n this.memoryCache.set(cacheKey, newCache);\n this.saveToLocalStorage(cacheKey, newCache);\n return addresses;\n }\n\n public getAddress(tech: string, chainId: string | number, name: string): string | undefined {\n const cacheKey = this.getCacheKey(tech, chainId);\n const cache = this.memoryCache.get(cacheKey);\n return cache?.entries[name.toLowerCase()]?.address;\n }\n\n public getAbi(tech: string, chainId: string | number, name: string): any {\n const cacheKey = this.getCacheKey(tech, chainId);\n const cache = this.memoryCache.get(cacheKey);\n return cache?.entries[name.toLowerCase()]?.abi;\n }\n}\n\nexport const registryAddressLoader = new RegistryAddressLoader();\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/loader.ts","../../web3-contracts/src/config.ts","../../web3-contracts/src/abis/evm/AddressRegistry.json","../../web3-contracts/src/abis/tron/AddressRegistry.json","../../web3-contracts/src/index.ts"],"sourcesContent":["import { ReadOnlyDomainAPI, Tech, AddressRegistryReadAPI } from '@the_library/web3-core';\n\nconst CACHE_KEY_PREFIX = 'dcode_registry_cache_v2_';\nconst CACHE_DURATION_MS = 24 * 60 * 60 * 1000; // 24 hours\n\nexport interface CacheEntry {\n address: string;\n abi: any;\n txId: string;\n originalName: string;\n}\n\nexport interface RegistryCache {\n timestamp: number;\n entries: {\n [contractName: string]: CacheEntry;\n };\n}\n\nexport class RegistryAddressLoader {\n private memoryCache: Map<string, RegistryCache> = new Map();\n\n private getCacheKey(tech: string, chainId: string | number): string {\n return `${CACHE_KEY_PREFIX}${tech}_${chainId}`;\n }\n\n private getFromLocalStorage(key: string): RegistryCache | null {\n const data = localStorage.getItem(key);\n if (!data) return null;\n try {\n return JSON.parse(data);\n } catch (e) {\n console.error(`[RegistryLoader] Failed to parse cache for ${key}`, e);\n return null;\n }\n }\n\n private saveToLocalStorage(key: string, cache: RegistryCache): void {\n localStorage.setItem(key, JSON.stringify(cache));\n }\n\n private async fetchAbiFromArweave(abiUrl: string): Promise<any> {\n if (!abiUrl) return null;\n try {\n const res = await fetch(`https://arweave.net/${abiUrl}`);\n if (res.ok) {\n const abi = await res.json();\n console.log(`[RegistryLoader] Successfully fetched ABI for ${abiUrl}`);\n return abi;\n }\n console.error(`[RegistryLoader] Arweave fetch failed for ${abiUrl}: ${res.status} ${res.statusText}`);\n } catch (e) {\n console.warn(`[RegistryLoader] Failed to fetch ABI from Arweave (${abiUrl}):`, e);\n }\n return null;\n }\n\n public async Initialize(tech: Tech, chainId: number | string, registry: AddressRegistryReadAPI): Promise<Record<string, string>> {\n const cacheKey = this.getCacheKey(tech, chainId);\n const now = Date.now();\n\n let cache = this.memoryCache.get(cacheKey) || this.getFromLocalStorage(cacheKey);\n\n // Time Check: Has it been less than 24 hours?\n if (cache && (now - cache.timestamp < CACHE_DURATION_MS)) {\n console.log(`[RegistryLoader] Cache valid for ${tech}:${chainId}`);\n this.memoryCache.set(cacheKey, cache);\n const addresses: Record<string, string> = {};\n Object.values(cache.entries).forEach(entry => {\n const camelCaseName = entry.originalName.charAt(0).toLowerCase() + entry.originalName.slice(1);\n addresses[camelCaseName] = entry.address;\n });\n return addresses;\n }\n\n console.log(`[RegistryLoader] Cache expired or missing for ${tech}:${chainId}. Performing Full Sync...`);\n\n const contractNames = await registry.getAllContractNames();\n console.log(`[RegistryLoader] Retrieved ${contractNames.length} contract names for ${tech}:${chainId}:`, contractNames);\n const newEntries: { [name: string]: CacheEntry } = {};\n const addresses: Record<string, string> = {};\n\n for (const name of contractNames) {\n try {\n const [address, abiUrl] = await registry.getLatestContract(name);\n const normalizedName = name.toLowerCase();\n const camelCaseName = name.charAt(0).toLowerCase() + name.slice(1);\n\n let abi = null;\n // Try to reuse ABI from old cache if txId matches\n if (cache && cache.entries[normalizedName] && cache.entries[normalizedName].txId === abiUrl) {\n abi = cache.entries[normalizedName].abi;\n } else if (abiUrl) {\n console.log(`[RegistryLoader] Fetching new ABI for ${name} (${abiUrl})...`);\n abi = await this.fetchAbiFromArweave(abiUrl);\n } else {\n console.warn(`[RegistryLoader] No ABI URL found for ${name} on ${tech}:${chainId}`);\n }\n\n newEntries[normalizedName] = {\n address,\n abi,\n txId: abiUrl,\n originalName: name\n };\n addresses[camelCaseName] = address;\n } catch (e) {\n console.warn(`[RegistryLoader] Failed to load contract ${name} for ${tech}:${chainId}:`, e);\n }\n }\n\n const newCache: RegistryCache = {\n timestamp: now,\n entries: newEntries\n };\n\n this.memoryCache.set(cacheKey, newCache);\n this.saveToLocalStorage(cacheKey, newCache);\n return addresses;\n }\n\n public getAddress(tech: string, chainId: string | number, name: string): string | undefined {\n const cacheKey = this.getCacheKey(tech, chainId);\n const cache = this.memoryCache.get(cacheKey);\n return cache?.entries[name.toLowerCase()]?.address;\n }\n\n public getAbi(tech: string, chainId: string | number, name: string): any {\n const cacheKey = this.getCacheKey(tech, chainId);\n const cache = this.memoryCache.get(cacheKey);\n return cache?.entries[name.toLowerCase()]?.abi;\n }\n}\n\nexport const registryAddressLoader = new RegistryAddressLoader();\n","\nimport {ContractConfigs} from \"./interfaces\";\n \nexport default {\n \"evm\": {\n \"1114\": {\n \"chainId\": 1114,\n \"main\": false,\n \"symbol\": \"tCORE2\",\n \"shortName\": \"SUN\",\n \"original\": \"Core Blockchain TestNet\",\n \"faucet\": \"https://scan.test2.btcs.network/faucet\",\n \"faucetAmount\": 1,\n \"decimals\": 18,\n \"website\": \"https://coredao.org/\",\n \"rpc\": \"https://rpc.test2.btcs.network\",\n \"explorer\": \"https://scan.test2.btcs.network\",\n \"name\": \"Two Core Test\",\n \"brand\": \"CORE\",\n \"deployed\": true,\n \"addresses\": {\n \"addressRegistry\": \"0x77A0Cf8a9B82dEE29ca82Bb6A773463a02E6Cf60\"\n }\n },\n \"1116\": {\n \"chainId\": 1116,\n \"main\": true,\n \"symbol\": \"CORE\",\n \"shortName\": \"TREE\",\n \"decimals\": 18,\n \"website\": \"https://coredao.org/\",\n \"rpc\": \"https://rpc.coredao.org\",\n \"explorer\": \"https://scan.coredao.org\",\n \"name\": \"Main\",\n \"original\": \"Core Blockchain MainNet\",\n \"brand\": \"CORE\",\n \"deployed\": true,\n \"addresses\": {\n \"addressRegistry\": \"0xD85bED3c96F36647BE073D120bfA5E7AcE491864\"\n }\n }\n },\n \"tron\": {\n \"nile\": {\n \"main\": false,\n \"website\": \"https://nile.trongrid.io/\",\n \"chainId\": \"nile\",\n \"symbol\": \"NileTRX\",\n \"shortName\": \"WATER\",\n \"decimals\": 6,\n \"rpc\": \"https://nile.trongrid.io\",\n \"explorer\": \"https://nilescan.org\",\n \"name\": \"Nile\",\n \"original\": \"Nile TestNet\",\n \"faucet\": \"https://nilescan.org/faucet\",\n \"faucetAmount\": 2000,\n \"brand\": \"TRON\",\n \"deployed\": true,\n \"addresses\": {\n \"addressRegistry\": \"419368123d6c77ae9e4a17af4e6c21dd30a79596f5\"\n }\n },\n \"shasta\": {\n \"main\": false,\n \"chainId\": \"shasta\",\n \"website\": \"https://shasta.trongrid.io\",\n \"rpc\": \"https://api.shasta.trongrid.io\",\n \"explorer\": \"https://shastanet.tronscan.org\",\n \"name\": \"Shasta\",\n \"original\": \"Shasta TestNet\",\n \"symbol\": \"ShastaTRX\",\n \"shortName\": \"SUN\",\n \"decimals\": 6,\n \"faucet\": \"https://shasta.tronex.io/join/getJoinPage\",\n \"faucetAmount\": 2000,\n \"brand\": \"TRON\",\n \"deployed\": true,\n \"addresses\": {\n \"addressRegistry\": \"41028907b1ca0729597624643ae939ccdb9293fc15\"\n }\n },\n \"mainnet\": {\n \"main\": true,\n \"chainId\": \"mainnet\",\n \"rpc\": \"https://api.trongrid.io\",\n \"explorer\": \"https://tronscan.org\",\n \"name\": \"Tron\",\n \"decimals\": 6,\n \"original\": \"Tron MainNet\",\n \"symbol\": \"TRX\",\n \"shortName\": \"TREE\",\n \"website\": \"https://tron.network/\",\n \"brand\": \"TRON\",\n \"deployed\": false,\n \"addresses\": {}\n }\n }\n} as ContractConfigs","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"AddressRegistry\",\n \"sourceName\": \"contracts/generated/evm/AddressRegistry.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"version\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ContractAdded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addContract\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"admin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllContractNames\",\n \"outputs\": [\n {\n \"internalType\": \"string[]\",\n \"name\": \"\",\n \"type\": \"string[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"getContractHistory\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n }\n ],\n \"internalType\": \"struct AddressRegistry.ContractRecord[]\",\n \"name\": \"\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"getLatestContract\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60808060405234610027575f80546001600160a01b03191633179055610bcf908161002c8239f35b5f80fdfe604060808152600480361015610013575f80fd5b5f3560e01c9081637d6929e0146104be5781638f283970146103d15781639dc4a3ec14610290578163d7a9b816146101b0578163df40e56e14610088575063f851a4401461005f575f80fd5b34610084575f366003190112610084576020906001600160a01b035f54169051908152f35b5f80fd5b823461008457602091826003193601126100845780359067ffffffffffffffff8211610084576100bc90849236910161084b565b816100cf845192838151938492016108a1565b810190828160019360018152030190209283546100eb81610b81565b906100f883519283610829565b80825284820180965f52855f205f915b8383106101875750505050815193808501918186525180925282850192808360051b87010196935f915b84831061013f5787890388f35b9091929394958480610175839b603f198c820301875285838c516001600160a01b038151168452015191818582015201906108c2565b9a980196959491909101920190610132565b95600288829a9861019b859b98999b610b53565b81520192019201919097959796949396610108565b8234610084575f366003190112610084576002546101cd81610b81565b906101da83519283610829565b8082526020808301918260025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f915b83831061026e57505050508351928184019082855251809152848401948160051b85010192915f955b8287106102425785850386f35b90919293828061025e600193603f198a820301865288516108c2565b9601920196019592919092610235565b600185819261027f859a989a610ab1565b81520192019201919095939561020c565b8234610084576020918260031936011261008457803567ffffffffffffffff8111610084576102c2903690830161084b565b82518151908581818501936102d88183876108a1565b8101600181520301902054156103825784610319918551828186516102fe8183876108a1565b810160018152030190209386519384928392519283916108a1565b8101600181520301902054915f19830192831161036f575061034161036b9261034792610a84565b50610b53565b91836001600160a01b038451169301519080805195869586528501528301906108c2565b0390f35b601190634e487b7160e01b5f525260245ffd5b835162461bcd60e51b8152808401869052602360248201527f4164647265737352656769737472793a20636f6e7472616374206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b905034610084576020366003190112610084578035916001600160a01b0391828416809403610084575f549283169161040b8333146108e7565b841561045557505082907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f5f80a373ffffffffffffffffffffffffffffffffffffffff1916175f55005b906020608492519162461bcd60e51b8352820152602e60248201527f4164647265737352656769737472793a206e65772061646d696e20697320746860448201527f65207a65726f20616464726573730000000000000000000000000000000000006064820152fd5b82346100845760603660031901126100845767ffffffffffffffff918035838111610084576104f0903690830161084b565b906024928335936001600160a01b03958686168096036100845760443590811161008457610521903690850161084b565b92610530875f541633146108e7565b85156107925784511561072b5782519185519760209384818b81838c019d610558918f6108a1565b810160038152030190205460ff1615610687575b845184818061057f8d8c519283916108a1565b8101600181520301902091855190610596826107f9565b898252858201938885528054906801000000000000000082101561067557906105c491600182018155610a84565b9590956106655750509260017fbf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc57098999a93610616936106439651166001600160a01b031984541617835551910161097c565b8351838189516106278183876108a1565b81016001815203019020549684519283928392519283916108a1565b81010390209461065c83519484869586528501906108c2565b918301520390a3005b5f90634e487b7160e01b8252525ffd5b82604188634e487b7160e01b5f52525ffd5b845184818061069a8d8c519283916108a1565b81016003815203019020600160ff198254161790556002546801000000000000000081101561071957600181018060025581101561070757876107029160025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161097c565b61056c565b82603285634e487b7160e01b5f52525ffd5b82604185634e487b7160e01b5f52525ffd5b602e608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e7472616374206e616d65206360448201527f616e6e6f7420626520656d7074790000000000000000000000000000000000006064820152fd5b6030608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e74726163742061646472657360448201527f732063616e6e6f74206265207a65726f000000000000000000000000000000006064820152fd5b6040810190811067ffffffffffffffff82111761081557604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761081557604052565b81601f820112156100845780359067ffffffffffffffff82116108155760405192610880601f8401601f191660200185610829565b8284526020838301011161008457815f926020809301838601378301015290565b5f5b8381106108b25750505f910152565b81810151838201526020016108a3565b906020916108db815180928185528580860191016108a1565b601f01601f1916010190565b156108ee57565b60405162461bcd60e51b815260206004820152602860248201527f4164647265737352656769737472793a2063616c6c6572206973206e6f74207460448201526734329030b236b4b760c11b6064820152608490fd5b90600182811c92168015610972575b602083101461095e57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610953565b919091825167ffffffffffffffff81116108155761099a8254610944565b601f8111610a3f575b50602080601f83116001146109de5750819293945f926109d3575b50508160011b915f199060031b1c1916179055565b015190505f806109be565b90601f19831695845f5260205f20925f905b888210610a2757505083600195969710610a0f575b505050811b019055565b01515f1960f88460031b161c191690555f8080610a05565b806001859682949686015181550195019301906109f0565b825f5260205f20601f830160051c81019160208410610a7a575b601f0160051c01905b818110610a6f57506109a3565b5f8155600101610a62565b9091508190610a59565b8054821015610a9d575f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9060405191825f8254610ac381610944565b908184526020946001916001811690815f14610b315750600114610af3575b505050610af192500383610829565b565b5f90815285812095935091905b818310610b19575050610af193508201015f8080610ae2565b85548884018501529485019487945091830191610b00565b92505050610af194925060ff191682840152151560051b8201015f8080610ae2565b90604051610b60816107f9565b6020610b7c600183956001600160a01b03815416855201610ab1565b910152565b67ffffffffffffffff81116108155760051b6020019056fea264697066735822122025407833e309966fe7b3011ca855589d79596b3be02b1eeeec41ad068c60570964736f6c63430008180033\",\n \"deployedBytecode\": \"0x604060808152600480361015610013575f80fd5b5f3560e01c9081637d6929e0146104be5781638f283970146103d15781639dc4a3ec14610290578163d7a9b816146101b0578163df40e56e14610088575063f851a4401461005f575f80fd5b34610084575f366003190112610084576020906001600160a01b035f54169051908152f35b5f80fd5b823461008457602091826003193601126100845780359067ffffffffffffffff8211610084576100bc90849236910161084b565b816100cf845192838151938492016108a1565b810190828160019360018152030190209283546100eb81610b81565b906100f883519283610829565b80825284820180965f52855f205f915b8383106101875750505050815193808501918186525180925282850192808360051b87010196935f915b84831061013f5787890388f35b9091929394958480610175839b603f198c820301875285838c516001600160a01b038151168452015191818582015201906108c2565b9a980196959491909101920190610132565b95600288829a9861019b859b98999b610b53565b81520192019201919097959796949396610108565b8234610084575f366003190112610084576002546101cd81610b81565b906101da83519283610829565b8082526020808301918260025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f915b83831061026e57505050508351928184019082855251809152848401948160051b85010192915f955b8287106102425785850386f35b90919293828061025e600193603f198a820301865288516108c2565b9601920196019592919092610235565b600185819261027f859a989a610ab1565b81520192019201919095939561020c565b8234610084576020918260031936011261008457803567ffffffffffffffff8111610084576102c2903690830161084b565b82518151908581818501936102d88183876108a1565b8101600181520301902054156103825784610319918551828186516102fe8183876108a1565b810160018152030190209386519384928392519283916108a1565b8101600181520301902054915f19830192831161036f575061034161036b9261034792610a84565b50610b53565b91836001600160a01b038451169301519080805195869586528501528301906108c2565b0390f35b601190634e487b7160e01b5f525260245ffd5b835162461bcd60e51b8152808401869052602360248201527f4164647265737352656769737472793a20636f6e7472616374206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b905034610084576020366003190112610084578035916001600160a01b0391828416809403610084575f549283169161040b8333146108e7565b841561045557505082907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f5f80a373ffffffffffffffffffffffffffffffffffffffff1916175f55005b906020608492519162461bcd60e51b8352820152602e60248201527f4164647265737352656769737472793a206e65772061646d696e20697320746860448201527f65207a65726f20616464726573730000000000000000000000000000000000006064820152fd5b82346100845760603660031901126100845767ffffffffffffffff918035838111610084576104f0903690830161084b565b906024928335936001600160a01b03958686168096036100845760443590811161008457610521903690850161084b565b92610530875f541633146108e7565b85156107925784511561072b5782519185519760209384818b81838c019d610558918f6108a1565b810160038152030190205460ff1615610687575b845184818061057f8d8c519283916108a1565b8101600181520301902091855190610596826107f9565b898252858201938885528054906801000000000000000082101561067557906105c491600182018155610a84565b9590956106655750509260017fbf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc57098999a93610616936106439651166001600160a01b031984541617835551910161097c565b8351838189516106278183876108a1565b81016001815203019020549684519283928392519283916108a1565b81010390209461065c83519484869586528501906108c2565b918301520390a3005b5f90634e487b7160e01b8252525ffd5b82604188634e487b7160e01b5f52525ffd5b845184818061069a8d8c519283916108a1565b81016003815203019020600160ff198254161790556002546801000000000000000081101561071957600181018060025581101561070757876107029160025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161097c565b61056c565b82603285634e487b7160e01b5f52525ffd5b82604185634e487b7160e01b5f52525ffd5b602e608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e7472616374206e616d65206360448201527f616e6e6f7420626520656d7074790000000000000000000000000000000000006064820152fd5b6030608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e74726163742061646472657360448201527f732063616e6e6f74206265207a65726f000000000000000000000000000000006064820152fd5b6040810190811067ffffffffffffffff82111761081557604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761081557604052565b81601f820112156100845780359067ffffffffffffffff82116108155760405192610880601f8401601f191660200185610829565b8284526020838301011161008457815f926020809301838601378301015290565b5f5b8381106108b25750505f910152565b81810151838201526020016108a3565b906020916108db815180928185528580860191016108a1565b601f01601f1916010190565b156108ee57565b60405162461bcd60e51b815260206004820152602860248201527f4164647265737352656769737472793a2063616c6c6572206973206e6f74207460448201526734329030b236b4b760c11b6064820152608490fd5b90600182811c92168015610972575b602083101461095e57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610953565b919091825167ffffffffffffffff81116108155761099a8254610944565b601f8111610a3f575b50602080601f83116001146109de5750819293945f926109d3575b50508160011b915f199060031b1c1916179055565b015190505f806109be565b90601f19831695845f5260205f20925f905b888210610a2757505083600195969710610a0f575b505050811b019055565b01515f1960f88460031b161c191690555f8080610a05565b806001859682949686015181550195019301906109f0565b825f5260205f20601f830160051c81019160208410610a7a575b601f0160051c01905b818110610a6f57506109a3565b5f8155600101610a62565b9091508190610a59565b8054821015610a9d575f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9060405191825f8254610ac381610944565b908184526020946001916001811690815f14610b315750600114610af3575b505050610af192500383610829565b565b5f90815285812095935091905b818310610b19575050610af193508201015f8080610ae2565b85548884018501529485019487945091830191610b00565b92505050610af194925060ff191682840152151560051b8201015f8080610ae2565b90604051610b60816107f9565b6020610b7c600183956001600160a01b03815416855201610ab1565b910152565b67ffffffffffffffff81116108155760051b6020019056fea264697066735822122025407833e309966fe7b3011ca855589d79596b3be02b1eeeec41ad068c60570964736f6c63430008180033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"contractName\": \"AddressRegistry\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldAdmin\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"version\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ContractAdded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addContract\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"admin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newAdmin\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllContractNames\",\n \"outputs\": [\n {\n \"internalType\": \"string[]\",\n \"name\": \"\",\n \"type\": \"string[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"getContractHistory\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"contractAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"abiUrl\",\n \"type\": \"string\"\n }\n ],\n \"internalType\": \"struct AddressRegistry.ContractRecord[]\",\n \"name\": \"\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"getLatestContract\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60808060405234610027575f80546001600160a01b03191633179055610bae908161002c8239f35b5f80fdfe604060808152600480361015610013575f80fd5b5f3560e01c9081637d6929e0146104ad5781638f283970146103d35781639dc4a3ec14610290578163d7a9b816146101b0578163df40e56e14610089575063f851a4401461005f575f80fd5b34610085575f366003190112610085575f5490516001600160a01b039091168152602090f35b5f80fd5b823461008557602091826003193601126100855780359067ffffffffffffffff8211610085576100bd908492369101610827565b816100d08451928381519384920161087d565b810190828160019360018152030190209283546100ec81610b60565b906100f983519283610805565b80825284820180965f52855f205f915b8383106101875750505050815193808501918186525180925282850192808360051b87010196935f915b8483106101405787890388f35b9091929394958480610175839b603f198c820301875285838c5160018060a01b0381511684520151918185820152019061089e565b9a980196959491909101920190610133565b95600288829a9861019b859b98999b610b2f565b81520192019201919097959796949396610109565b8234610085575f366003190112610085576002546101cd81610b60565b906101da83519283610805565b8082526020808301918260025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f915b83831061026e57505050508351928184019082855251809152848401948160051b85010192915f955b8287106102425785850386f35b90919293828061025e600193603f198a8203018652885161089e565b9601920196019592919092610235565b600185819261027f859a989a610a8d565b81520192019201919095939561020c565b8234610085576020918260031936011261008557803567ffffffffffffffff8111610085576102c29036908301610827565b82518151908581818501936102d881838761087d565b8101600181520301902054156103845784610319918551828186516102fe81838761087d565b8101600181520301902093865193849283925192839161087d565b8101600181520301902054915f198301928311610371575061034161036d9261034792610a60565b50610b2f565b80519084015183516001600160a01b03909216825293810183905292839283019061089e565b0390f35b601190634e487b7160e01b5f525260245ffd5b835162461bcd60e51b8152808401869052602360248201527f4164647265737352656769737472793a20636f6e7472616374206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b8234610085576020366003190112610085578135906001600160a81b0382168203610085575f546001600160a01b039283169390928316916104163384146108c3565b841561045357505082907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f5f80a36001600160a01b031916175f55005b906020608492519162461bcd60e51b8352820152602e60248201527f4164647265737352656769737472793a206e65772061646d696e20697320746860448201526d65207a65726f206164647265737360901b6064820152fd5b9050346100855760603660031901126100855767ffffffffffffffff908035828111610085576104e09036908301610827565b6024803594919291906001600160a81b0386168603610085576001600160a01b03958616946044359081116100855761051c9036908501610827565b9261052b875f541633146108c3565b851561077b578451156107235782519185519760209384818b81838c019d610553918f61087d565b810160038152030190205460ff1615610684575b845184818061057a8d8c5192839161087d565b8101600181520301902091855190610591826107d5565b89825285820193888552805490600160401b82101561067257906105ba91600182018155610a60565b9590956106625750509260017fbf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc57098999a93610613936106409651166bffffffffffffffffffffffff60a01b845416178355519101610958565b83518381895161062481838761087d565b810160018152030190205496845192839283925192839161087d565b810103902094610659835194848695865285019061089e565b918301520390a3005b5f90634e487b7160e01b8252525ffd5b82604188634e487b7160e01b5f52525ffd5b84518481806106978d8c5192839161087d565b81016003815203019020600160ff19825416179055600254600160401b8110156107115760018101806002558110156106ff57876106fa9160025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01610958565b610567565b82603285634e487b7160e01b5f52525ffd5b82604185634e487b7160e01b5f52525ffd5b602e608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e7472616374206e616d65206360448201526d616e6e6f7420626520656d70747960901b6064820152fd5b6030608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e74726163742061646472657360448201526f732063616e6e6f74206265207a65726f60801b6064820152fd5b6040810190811067ffffffffffffffff8211176107f157604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176107f157604052565b81601f820112156100855780359067ffffffffffffffff82116107f1576040519261085c601f8401601f191660200185610805565b8284526020838301011161008557815f926020809301838601378301015290565b5f5b83811061088e5750505f910152565b818101518382015260200161087f565b906020916108b78151809281855285808601910161087d565b601f01601f1916010190565b156108ca57565b60405162461bcd60e51b815260206004820152602860248201527f4164647265737352656769737472793a2063616c6c6572206973206e6f74207460448201526734329030b236b4b760c11b6064820152608490fd5b90600182811c9216801561094e575b602083101461093a57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161092f565b919091825167ffffffffffffffff81116107f1576109768254610920565b601f8111610a1b575b50602080601f83116001146109ba5750819293945f926109af575b50508160011b915f199060031b1c1916179055565b015190505f8061099a565b90601f19831695845f5260205f20925f905b888210610a03575050836001959697106109eb575b505050811b019055565b01515f1960f88460031b161c191690555f80806109e1565b806001859682949686015181550195019301906109cc565b825f5260205f20601f830160051c81019160208410610a56575b601f0160051c01905b818110610a4b575061097f565b5f8155600101610a3e565b9091508190610a35565b8054821015610a79575f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9060405191825f8254610a9f81610920565b908184526020946001916001811690815f14610b0d5750600114610acf575b505050610acd92500383610805565b565b5f90815285812095935091905b818310610af5575050610acd93508201015f8080610abe565b85548884018501529485019487945091830191610adc565b92505050610acd94925060ff191682840152151560051b8201015f8080610abe565b90604051610b3c816107d5565b82546001600160a01b03168152918290602090610b5b90600101610a8d565b910152565b67ffffffffffffffff81116107f15760051b6020019056fea26474726f6e582212202099894a2163edc14ed6ceba66f8f37788a11fada2014f7d602de58c240b9bd564736f6c63430008180033\",\n \"deployedBytecode\": \"0x604060808152600480361015610013575f80fd5b5f3560e01c9081637d6929e0146104ad5781638f283970146103d35781639dc4a3ec14610290578163d7a9b816146101b0578163df40e56e14610089575063f851a4401461005f575f80fd5b34610085575f366003190112610085575f5490516001600160a01b039091168152602090f35b5f80fd5b823461008557602091826003193601126100855780359067ffffffffffffffff8211610085576100bd908492369101610827565b816100d08451928381519384920161087d565b810190828160019360018152030190209283546100ec81610b60565b906100f983519283610805565b80825284820180965f52855f205f915b8383106101875750505050815193808501918186525180925282850192808360051b87010196935f915b8483106101405787890388f35b9091929394958480610175839b603f198c820301875285838c5160018060a01b0381511684520151918185820152019061089e565b9a980196959491909101920190610133565b95600288829a9861019b859b98999b610b2f565b81520192019201919097959796949396610109565b8234610085575f366003190112610085576002546101cd81610b60565b906101da83519283610805565b8082526020808301918260025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f915b83831061026e57505050508351928184019082855251809152848401948160051b85010192915f955b8287106102425785850386f35b90919293828061025e600193603f198a8203018652885161089e565b9601920196019592919092610235565b600185819261027f859a989a610a8d565b81520192019201919095939561020c565b8234610085576020918260031936011261008557803567ffffffffffffffff8111610085576102c29036908301610827565b82518151908581818501936102d881838761087d565b8101600181520301902054156103845784610319918551828186516102fe81838761087d565b8101600181520301902093865193849283925192839161087d565b8101600181520301902054915f198301928311610371575061034161036d9261034792610a60565b50610b2f565b80519084015183516001600160a01b03909216825293810183905292839283019061089e565b0390f35b601190634e487b7160e01b5f525260245ffd5b835162461bcd60e51b8152808401869052602360248201527f4164647265737352656769737472793a20636f6e7472616374206e6f7420666f6044820152621d5b9960ea1b6064820152608490fd5b8234610085576020366003190112610085578135906001600160a81b0382168203610085575f546001600160a01b039283169390928316916104163384146108c3565b841561045357505082907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f5f80a36001600160a01b031916175f55005b906020608492519162461bcd60e51b8352820152602e60248201527f4164647265737352656769737472793a206e65772061646d696e20697320746860448201526d65207a65726f206164647265737360901b6064820152fd5b9050346100855760603660031901126100855767ffffffffffffffff908035828111610085576104e09036908301610827565b6024803594919291906001600160a81b0386168603610085576001600160a01b03958616946044359081116100855761051c9036908501610827565b9261052b875f541633146108c3565b851561077b578451156107235782519185519760209384818b81838c019d610553918f61087d565b810160038152030190205460ff1615610684575b845184818061057a8d8c5192839161087d565b8101600181520301902091855190610591826107d5565b89825285820193888552805490600160401b82101561067257906105ba91600182018155610a60565b9590956106625750509260017fbf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc57098999a93610613936106409651166bffffffffffffffffffffffff60a01b845416178355519101610958565b83518381895161062481838761087d565b810160018152030190205496845192839283925192839161087d565b810103902094610659835194848695865285019061089e565b918301520390a3005b5f90634e487b7160e01b8252525ffd5b82604188634e487b7160e01b5f52525ffd5b84518481806106978d8c5192839161087d565b81016003815203019020600160ff19825416179055600254600160401b8110156107115760018101806002558110156106ff57876106fa9160025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01610958565b610567565b82603285634e487b7160e01b5f52525ffd5b82604185634e487b7160e01b5f52525ffd5b602e608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e7472616374206e616d65206360448201526d616e6e6f7420626520656d70747960901b6064820152fd5b6030608492602085519362461bcd60e51b85528401528201527f4164647265737352656769737472793a20636f6e74726163742061646472657360448201526f732063616e6e6f74206265207a65726f60801b6064820152fd5b6040810190811067ffffffffffffffff8211176107f157604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176107f157604052565b81601f820112156100855780359067ffffffffffffffff82116107f1576040519261085c601f8401601f191660200185610805565b8284526020838301011161008557815f926020809301838601378301015290565b5f5b83811061088e5750505f910152565b818101518382015260200161087f565b906020916108b78151809281855285808601910161087d565b601f01601f1916010190565b156108ca57565b60405162461bcd60e51b815260206004820152602860248201527f4164647265737352656769737472793a2063616c6c6572206973206e6f74207460448201526734329030b236b4b760c11b6064820152608490fd5b90600182811c9216801561094e575b602083101461093a57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161092f565b919091825167ffffffffffffffff81116107f1576109768254610920565b601f8111610a1b575b50602080601f83116001146109ba5750819293945f926109af575b50508160011b915f199060031b1c1916179055565b015190505f8061099a565b90601f19831695845f5260205f20925f905b888210610a03575050836001959697106109eb575b505050811b019055565b01515f1960f88460031b161c191690555f80806109e1565b806001859682949686015181550195019301906109cc565b825f5260205f20601f830160051c81019160208410610a56575b601f0160051c01905b818110610a4b575061097f565b5f8155600101610a3e565b9091508190610a35565b8054821015610a79575f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b9060405191825f8254610a9f81610920565b908184526020946001916001811690815f14610b0d5750600114610acf575b505050610acd92500383610805565b565b5f90815285812095935091905b818310610af5575050610acd93508201015f8080610abe565b85548884018501529485019487945091830191610adc565b92505050610acd94925060ff191682840152151560051b8201015f8080610abe565b90604051610b3c816107d5565b82546001600160a01b03168152918290602090610b5b90600101610a8d565b910152565b67ffffffffffffffff81116107f15760051b6020019056fea26474726f6e582212202099894a2163edc14ed6ceba66f8f37788a11fada2014f7d602de58c240b9bd564736f6c63430008180033\",\n \"sourceMap\": \"325:3454:1:-:0;;;;;;;1269:18;325:3454;;-1:-1:-1;;;;;;325:3454:1;1277:10;325:3454;;;;;;;;;;;;;\",\n \"deployedSourceMap\": \"325:3454:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;325:3454:1;;;;;;;;-1:-1:-1;;;;;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;3532:16;;;;325:3454;3532:16;325:3454;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;325:3454:1;;;;3756:14;325:3454;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;3756:14;325:3454;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;2948:16;325:3454;;;;;;;2948:33;325:3454;;;;;;;;;;;;;;;;:::i;:::-;;;2948:16;325:3454;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2948:16;325:3454;;;;;;;;;;;;;;;;;3083:79;;325:3454;3083:79;325:3454;3083:79;;:::i;:::-;325:3454;;:::i;:::-;;;3204:13;;;;325:3454;;-1:-1:-1;;;;;325:3454:1;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;-1:-1:-1;;325:3454:1;;;;;;;-1:-1:-1;;;;;325:3454:1;;;;;;;;-1:-1:-1;;;;;325:3454:1;;;;;;;;;1115:106;1136:10;:19;;1115:106;:::i;:::-;1476:22;;325:3454;;1585:29;;;;;325:3454;1585:29;;-1:-1:-1;;;;;;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;-1:-1:-1;;325:3454:1;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;325:3454:1;;;;;;-1:-1:-1;;;;;325:3454:1;;;;;;;;;;;;;;;;;;:::i;:::-;;1115:106;325:3454;;;;1136:10;:19;1115:106;:::i;:::-;2002:29;;325:3454;;;;2136:22;325:3454;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2246:11;325:3454;;;;;;;;;2245:18;2241:112;;325:3454;;;;;;;;;;;;;;:::i;:::-;;;2363:16;325:3454;;;;;;;;;;;;;:::i;:::-;;;;2404:66;;;325:3454;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;2363:16;325:3454;;;;;:::i;:::-;;;;;;;;;2363:16;2579:58;325:3454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;2363:16;325:3454;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2579:58;;;325:3454;;;;;;;;;;;;;;;;;;;;;;;;2241:112;325:3454;;;;;;;;;;;;;:::i;:::-;;;2246:11;325:3454;;;;;;2299:4;325:3454;;;;;;;;2317:14;325:3454;-1:-1:-1;;;325:3454:1;;;;;2299:4;325:3454;;;2317:14;325:3454;;;;;;;;;2317:14;325:3454;;;;;:::i;:::-;2241:112;;325:3454;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;325:3454:1;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;325:3454:1;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;325:3454:1;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;325:3454:1;;;;:::o;:::-;;;;:::o;:::-;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;;;;-1:-1:-1;;;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;325:3454:1;;-1:-1:-1;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;325:3454:1;;;;;;;;;-1:-1:-1;325:3454:1;;;;;;;;;;;;-1:-1:-1;325:3454:1;;-1:-1:-1;325:3454:1;;;;;;-1:-1:-1;325:3454:1;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;325:3454:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;-1:-1:-1;325:3454:1;;;;;;;;-1:-1:-1;;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;325:3454:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;325:3454:1;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;:::o\",\n \"source\": \"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.24;\\n\\n/**\\n * @title Address Registry\\n * @dev An immutable registry that stores the historical and active deployment addresses for\\n * D-Library Core Contracts (Factory, BouncerStorage, BackupStorage, etc.).\\n * Designed to replace build-time static configuration.\\n */\\ncontract AddressRegistry {\\n address public admin;\\n\\n struct ContractRecord {\\n address contractAddress;\\n string abiUrl;\\n }\\n\\n // Mapping from Contract Name (e.g., \\\"Factory\\\") to a historical array of deployed records\\n mapping(string => ContractRecord[]) private _contractHistory;\\n\\n // Array to keep track of all registered contract names for easy enumeration\\n string[] private _contractNames;\\n // Mapping to prevent duplicates in _contractNames\\n mapping(string => bool) private _nameExists;\\n\\n event ContractAdded(\\n string indexed name,\\n address indexed contractAddress,\\n string abiUrl,\\n uint256 version\\n );\\n event AdminChanged(address indexed oldAdmin, address indexed newAdmin);\\n\\n modifier onlyAdmin() {\\n require(\\n msg.sender == admin,\\n \\\"AddressRegistry: caller is not the admin\\\"\\n );\\n _;\\n }\\n\\n constructor() {\\n admin = msg.sender;\\n }\\n\\n /**\\n * @dev Transfers administration of the registry to a new address.\\n */\\n function changeAdmin(address newAdmin) external onlyAdmin {\\n require(\\n newAdmin != address(0),\\n \\\"AddressRegistry: new admin is the zero address\\\"\\n );\\n emit AdminChanged(admin, newAdmin);\\n admin = newAdmin;\\n }\\n\\n /**\\n * @dev Appends a new deployed address to the history of a given contract name.\\n * The last appended address is considered the \\\"active\\\" or \\\"latest\\\" version.\\n */\\n function addContract(\\n string memory name,\\n address contractAddress,\\n string memory abiUrl\\n ) external onlyAdmin {\\n require(\\n contractAddress != address(0),\\n \\\"AddressRegistry: contract address cannot be zero\\\"\\n );\\n require(\\n bytes(name).length > 0,\\n \\\"AddressRegistry: contract name cannot be empty\\\"\\n );\\n\\n if (!_nameExists[name]) {\\n _nameExists[name] = true;\\n _contractNames.push(name);\\n }\\n\\n _contractHistory[name].push(\\n ContractRecord({contractAddress: contractAddress, abiUrl: abiUrl})\\n );\\n\\n uint256 versionIndex = _contractHistory[name].length; // 1-indexed version\\n emit ContractAdded(name, contractAddress, abiUrl, versionIndex);\\n }\\n\\n /**\\n * @dev Returns the most recently deployed (active) address for a given contract name.\\n * Reverts if the contract name has no history.\\n */\\n function getLatestContract(\\n string memory name\\n ) external view returns (address, string memory) {\\n require(\\n _contractHistory[name].length > 0,\\n \\\"AddressRegistry: contract not found\\\"\\n );\\n ContractRecord memory record = _contractHistory[name][\\n _contractHistory[name].length - 1\\n ];\\n return (record.contractAddress, record.abiUrl);\\n }\\n\\n /**\\n * @dev Returns the entire chronological history of records for a given contract name.\\n * The last record in the array is the current active version.\\n */\\n function getContractHistory(\\n string memory name\\n ) external view returns (ContractRecord[] memory) {\\n return _contractHistory[name];\\n }\\n\\n /**\\n * @dev Returns all recognized contract names currently tracked in the registry.\\n */\\n function getAllContractNames() external view returns (string[] memory) {\\n return _contractNames;\\n }\\n}\\n\",\n \"sourcePath\": \"/home/dme/Documents/blockchain/contracts/generated/tron/AddressRegistry.sol\",\n \"ast\": {\n \"absolutePath\": \"/home/dme/Documents/blockchain/contracts/generated/tron/AddressRegistry.sol\",\n \"exportedSymbols\": {\n \"AddressRegistry\": [\n 488\n ]\n },\n \"id\": 489,\n \"license\": \"Apache-2.0\",\n \"nodeType\": \"SourceUnit\",\n \"nodes\": [\n {\n \"id\": 259,\n \"literals\": [\n \"solidity\",\n \"^\",\n \"0.8\",\n \".24\"\n ],\n \"nodeType\": \"PragmaDirective\",\n \"src\": \"39:24:1\"\n },\n {\n \"abstract\": false,\n \"baseContracts\": [],\n \"canonicalName\": \"AddressRegistry\",\n \"contractDependencies\": [],\n \"contractKind\": \"contract\",\n \"documentation\": {\n \"id\": 260,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"65:259:1\",\n \"text\": \" @title Address Registry\\n @dev An immutable registry that stores the historical and active deployment addresses for\\n D-Library Core Contracts (Factory, BouncerStorage, BackupStorage, etc.).\\n Designed to replace build-time static configuration.\"\n },\n \"fullyImplemented\": true,\n \"id\": 488,\n \"linearizedBaseContracts\": [\n 488\n ],\n \"name\": \"AddressRegistry\",\n \"nameLocation\": \"334:15:1\",\n \"nodeType\": \"ContractDefinition\",\n \"nodes\": [\n {\n \"constant\": false,\n \"functionSelector\": \"f851a440\",\n \"id\": 262,\n \"mutability\": \"mutable\",\n \"name\": \"admin\",\n \"nameLocation\": \"371:5:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"356:20:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 261,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"356:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"public\"\n },\n {\n \"canonicalName\": \"AddressRegistry.ContractRecord\",\n \"id\": 267,\n \"members\": [\n {\n \"constant\": false,\n \"id\": 264,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"423:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 267,\n \"src\": \"415:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 263,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"415:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 266,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"455:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 267,\n \"src\": \"448:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 265,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"448:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"name\": \"ContractRecord\",\n \"nameLocation\": \"390:14:1\",\n \"nodeType\": \"StructDefinition\",\n \"scope\": 488,\n \"src\": \"383:85:1\",\n \"visibility\": \"public\"\n },\n {\n \"constant\": false,\n \"id\": 273,\n \"mutability\": \"mutable\",\n \"name\": \"_contractHistory\",\n \"nameLocation\": \"612:16:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"568:60:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string => struct AddressRegistry.ContractRecord[])\"\n },\n \"typeName\": {\n \"id\": 272,\n \"keyName\": \"\",\n \"keyNameLocation\": \"-1:-1:-1\",\n \"keyType\": {\n \"id\": 268,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"576:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"nodeType\": \"Mapping\",\n \"src\": \"568:35:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string => struct AddressRegistry.ContractRecord[])\"\n },\n \"valueName\": \"\",\n \"valueNameLocation\": \"-1:-1:-1\",\n \"valueType\": {\n \"baseType\": {\n \"id\": 270,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 269,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"586:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"586:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"586:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"id\": 271,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"586:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n }\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"constant\": false,\n \"id\": 276,\n \"mutability\": \"mutable\",\n \"name\": \"_contractNames\",\n \"nameLocation\": \"733:14:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"716:31:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 274,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"716:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"id\": 275,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"716:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage_ptr\",\n \"typeString\": \"string[]\"\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"constant\": false,\n \"id\": 280,\n \"mutability\": \"mutable\",\n \"name\": \"_nameExists\",\n \"nameLocation\": \"840:11:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"808:43:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string => bool)\"\n },\n \"typeName\": {\n \"id\": 279,\n \"keyName\": \"\",\n \"keyNameLocation\": \"-1:-1:-1\",\n \"keyType\": {\n \"id\": 277,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"816:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"nodeType\": \"Mapping\",\n \"src\": \"808:23:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string => bool)\"\n },\n \"valueName\": \"\",\n \"valueNameLocation\": \"-1:-1:-1\",\n \"valueType\": {\n \"id\": 278,\n \"name\": \"bool\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"826:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"anonymous\": false,\n \"eventSelector\": \"bf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc570\",\n \"id\": 290,\n \"name\": \"ContractAdded\",\n \"nameLocation\": \"864:13:1\",\n \"nodeType\": \"EventDefinition\",\n \"parameters\": {\n \"id\": 289,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 282,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"902:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"887:19:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 281,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"887:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 284,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"932:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"916:31:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 283,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"916:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 286,\n \"indexed\": false,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"964:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"957:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 285,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"957:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 288,\n \"indexed\": false,\n \"mutability\": \"mutable\",\n \"name\": \"version\",\n \"nameLocation\": \"988:7:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"980:15:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 287,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"980:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"877:124:1\"\n },\n \"src\": \"858:144:1\"\n },\n {\n \"anonymous\": false,\n \"eventSelector\": \"7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f\",\n \"id\": 296,\n \"name\": \"AdminChanged\",\n \"nameLocation\": \"1013:12:1\",\n \"nodeType\": \"EventDefinition\",\n \"parameters\": {\n \"id\": 295,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 292,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"oldAdmin\",\n \"nameLocation\": \"1042:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 296,\n \"src\": \"1026:24:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 291,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1026:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 294,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"newAdmin\",\n \"nameLocation\": \"1068:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 296,\n \"src\": \"1052:24:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 293,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1052:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1025:52:1\"\n },\n \"src\": \"1007:71:1\"\n },\n {\n \"body\": {\n \"id\": 307,\n \"nodeType\": \"Block\",\n \"src\": \"1105:134:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 302,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"id\": 299,\n \"name\": \"msg\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 4294967281,\n \"src\": \"1136:3:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_message\",\n \"typeString\": \"msg\"\n }\n },\n \"id\": 300,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"1140:6:1\",\n \"memberName\": \"sender\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"1136:10:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"==\",\n \"rightExpression\": {\n \"id\": 301,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1150:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1136:19:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a2063616c6c6572206973206e6f74207468652061646d696e\",\n \"id\": 303,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1169:42:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_cb159406d97a2d44dd078dff96fa3a509f0aa29414d28bc90206a821cb3755b1\",\n \"typeString\": \"literal_string \\\"AddressRegistry: caller is not the admin\\\"\"\n },\n \"value\": \"AddressRegistry: caller is not the admin\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_cb159406d97a2d44dd078dff96fa3a509f0aa29414d28bc90206a821cb3755b1\",\n \"typeString\": \"literal_string \\\"AddressRegistry: caller is not the admin\\\"\"\n }\n ],\n \"id\": 298,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1115:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 304,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1115:106:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 305,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1115:106:1\"\n },\n {\n \"id\": 306,\n \"nodeType\": \"PlaceholderStatement\",\n \"src\": \"1231:1:1\"\n }\n ]\n },\n \"id\": 308,\n \"name\": \"onlyAdmin\",\n \"nameLocation\": \"1093:9:1\",\n \"nodeType\": \"ModifierDefinition\",\n \"parameters\": {\n \"id\": 297,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1102:2:1\"\n },\n \"src\": \"1084:155:1\",\n \"virtual\": false,\n \"visibility\": \"internal\"\n },\n {\n \"body\": {\n \"id\": 316,\n \"nodeType\": \"Block\",\n \"src\": \"1259:35:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 314,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 311,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1269:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"expression\": {\n \"id\": 312,\n \"name\": \"msg\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 4294967281,\n \"src\": \"1277:3:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_message\",\n \"typeString\": \"msg\"\n }\n },\n \"id\": 313,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"1281:6:1\",\n \"memberName\": \"sender\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"1277:10:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1269:18:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"id\": 315,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1269:18:1\"\n }\n ]\n },\n \"id\": 317,\n \"implemented\": true,\n \"kind\": \"constructor\",\n \"modifiers\": [],\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 309,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1256:2:1\"\n },\n \"returnParameters\": {\n \"id\": 310,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1259:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1245:49:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"body\": {\n \"id\": 344,\n \"nodeType\": \"Block\",\n \"src\": \"1445:202:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 331,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 326,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1476:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"!=\",\n \"rightExpression\": {\n \"arguments\": [\n {\n \"hexValue\": \"30\",\n \"id\": 329,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1496:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n }\n ],\n \"id\": 328,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"1488:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 327,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1488:7:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 330,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1488:10:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1476:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a206e65772061646d696e20697320746865207a65726f2061646472657373\",\n \"id\": 332,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1512:48:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_f51585c46b13d02a1d62f5a20a7a59926678787cab006e6d45003d6596a57c5b\",\n \"typeString\": \"literal_string \\\"AddressRegistry: new admin is the zero address\\\"\"\n },\n \"value\": \"AddressRegistry: new admin is the zero address\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_f51585c46b13d02a1d62f5a20a7a59926678787cab006e6d45003d6596a57c5b\",\n \"typeString\": \"literal_string \\\"AddressRegistry: new admin is the zero address\\\"\"\n }\n ],\n \"id\": 325,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1455:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 333,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1455:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 334,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1455:115:1\"\n },\n {\n \"eventCall\": {\n \"arguments\": [\n {\n \"id\": 336,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1598:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 337,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1605:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 335,\n \"name\": \"AdminChanged\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 296,\n \"src\": \"1585:12:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n \"typeString\": \"function (address,address)\"\n }\n },\n \"id\": 338,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1585:29:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 339,\n \"nodeType\": \"EmitStatement\",\n \"src\": \"1580:34:1\"\n },\n {\n \"expression\": {\n \"id\": 342,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 340,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1624:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"id\": 341,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1632:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1624:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"id\": 343,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1624:16:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 318,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1300:82:1\",\n \"text\": \" @dev Transfers administration of the registry to a new address.\"\n },\n \"functionSelector\": \"8f283970\",\n \"id\": 345,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [\n {\n \"id\": 323,\n \"kind\": \"modifierInvocation\",\n \"modifierName\": {\n \"id\": 322,\n \"name\": \"onlyAdmin\",\n \"nameLocations\": [\n \"1435:9:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 308,\n \"src\": \"1435:9:1\"\n },\n \"nodeType\": \"ModifierInvocation\",\n \"src\": \"1435:9:1\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"nameLocation\": \"1396:11:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 321,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 320,\n \"mutability\": \"mutable\",\n \"name\": \"newAdmin\",\n \"nameLocation\": \"1416:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 345,\n \"src\": \"1408:16:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 319,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1408:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1407:18:1\"\n },\n \"returnParameters\": {\n \"id\": 324,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1445:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1387:260:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 420,\n \"nodeType\": \"Block\",\n \"src\": \"1971:673:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 363,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 358,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2002:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"!=\",\n \"rightExpression\": {\n \"arguments\": [\n {\n \"hexValue\": \"30\",\n \"id\": 361,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2029:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n }\n ],\n \"id\": 360,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"2021:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 359,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2021:7:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 362,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2021:10:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"2002:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e747261637420616464726573732063616e6e6f74206265207a65726f\",\n \"id\": 364,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2045:50:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_8b4b3d39595ff286fe4920e60453149c169d1740c0e80d3cba5c9b9f34ab6379\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract address cannot be zero\\\"\"\n },\n \"value\": \"AddressRegistry: contract address cannot be zero\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_8b4b3d39595ff286fe4920e60453149c169d1740c0e80d3cba5c9b9f34ab6379\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract address cannot be zero\\\"\"\n }\n ],\n \"id\": 357,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1981:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 365,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1981:124:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 366,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1981:124:1\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 374,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 370,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2142:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"id\": 369,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"2136:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_bytes_storage_ptr_$\",\n \"typeString\": \"type(bytes storage pointer)\"\n },\n \"typeName\": {\n \"id\": 368,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2136:5:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 371,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2136:11:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n },\n \"id\": 372,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2148:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2136:18:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \">\",\n \"rightExpression\": {\n \"hexValue\": \"30\",\n \"id\": 373,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2157:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n \"src\": \"2136:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e7472616374206e616d652063616e6e6f7420626520656d707479\",\n \"id\": 375,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2172:48:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_1bb9b4bababfa5415006cfb7388a6199c54d8f58a3be11a3f1f461c3c138fca3\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract name cannot be empty\\\"\"\n },\n \"value\": \"AddressRegistry: contract name cannot be empty\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_1bb9b4bababfa5415006cfb7388a6199c54d8f58a3be11a3f1f461c3c138fca3\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract name cannot be empty\\\"\"\n }\n ],\n \"id\": 367,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"2115:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 376,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2115:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 377,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2115:115:1\"\n },\n {\n \"condition\": {\n \"id\": 381,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"UnaryOperation\",\n \"operator\": \"!\",\n \"prefix\": true,\n \"src\": \"2245:18:1\",\n \"subExpression\": {\n \"baseExpression\": {\n \"id\": 378,\n \"name\": \"_nameExists\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 280,\n \"src\": \"2246:11:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string memory => bool)\"\n }\n },\n \"id\": 380,\n \"indexExpression\": {\n \"id\": 379,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2258:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2246:17:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 395,\n \"nodeType\": \"IfStatement\",\n \"src\": \"2241:112:1\",\n \"trueBody\": {\n \"id\": 394,\n \"nodeType\": \"Block\",\n \"src\": \"2265:88:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 386,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"baseExpression\": {\n \"id\": 382,\n \"name\": \"_nameExists\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 280,\n \"src\": \"2279:11:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string memory => bool)\"\n }\n },\n \"id\": 384,\n \"indexExpression\": {\n \"id\": 383,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2291:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": true,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2279:17:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"hexValue\": \"74727565\",\n \"id\": 385,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2299:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"true\"\n },\n \"src\": \"2279:24:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 387,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2279:24:1\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 391,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2337:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"expression\": {\n \"id\": 388,\n \"name\": \"_contractNames\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 276,\n \"src\": \"2317:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string storage ref[] storage ref\"\n }\n },\n \"id\": 390,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2332:4:1\",\n \"memberName\": \"push\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2317:19:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_string_storage_$returns$__$attached_to$_t_array$_t_string_storage_$dyn_storage_ptr_$\",\n \"typeString\": \"function (string storage ref[] storage pointer,string storage ref)\"\n }\n },\n \"id\": 392,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2317:25:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 393,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2317:25:1\"\n }\n ]\n }\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 401,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2437:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 402,\n \"name\": \"abiUrl\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 352,\n \"src\": \"2462:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"id\": 400,\n \"name\": \"ContractRecord\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 267,\n \"src\": \"2404:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_struct$_ContractRecord_$267_storage_ptr_$\",\n \"typeString\": \"type(struct AddressRegistry.ContractRecord storage pointer)\"\n }\n },\n \"id\": 403,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"structConstructorCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [\n \"2420:15:1\",\n \"2454:6:1\"\n ],\n \"names\": [\n \"contractAddress\",\n \"abiUrl\"\n ],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2404:66:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n ],\n \"expression\": {\n \"baseExpression\": {\n \"id\": 396,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2363:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 398,\n \"indexExpression\": {\n \"id\": 397,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2380:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2363:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 399,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2386:4:1\",\n \"memberName\": \"push\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2363:27:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr_$_t_struct$_ContractRecord_$267_storage_$returns$__$attached_to$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr_$\",\n \"typeString\": \"function (struct AddressRegistry.ContractRecord storage ref[] storage pointer,struct AddressRegistry.ContractRecord storage ref)\"\n }\n },\n \"id\": 404,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2363:117:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 405,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2363:117:1\"\n },\n {\n \"assignments\": [\n 407\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 407,\n \"mutability\": \"mutable\",\n \"name\": \"versionIndex\",\n \"nameLocation\": \"2499:12:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 420,\n \"src\": \"2491:20:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 406,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2491:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 412,\n \"initialValue\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 408,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2514:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 410,\n \"indexExpression\": {\n \"id\": 409,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2531:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2514:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 411,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2537:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2514:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"2491:52:1\"\n },\n {\n \"eventCall\": {\n \"arguments\": [\n {\n \"id\": 414,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2593:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n {\n \"id\": 415,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2599:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 416,\n \"name\": \"abiUrl\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 352,\n \"src\": \"2616:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n {\n \"id\": 417,\n \"name\": \"versionIndex\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 407,\n \"src\": \"2624:12:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 413,\n \"name\": \"ContractAdded\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 290,\n \"src\": \"2579:13:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$_t_string_memory_ptr_$_t_uint256_$returns$__$\",\n \"typeString\": \"function (string memory,address,string memory,uint256)\"\n }\n },\n \"id\": 418,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2579:58:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 419,\n \"nodeType\": \"EmitStatement\",\n \"src\": \"2574:63:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 346,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1653:176:1\",\n \"text\": \" @dev Appends a new deployed address to the history of a given contract name.\\n The last appended address is considered the \\\"active\\\" or \\\"latest\\\" version.\"\n },\n \"functionSelector\": \"7d6929e0\",\n \"id\": 421,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [\n {\n \"id\": 355,\n \"kind\": \"modifierInvocation\",\n \"modifierName\": {\n \"id\": 354,\n \"name\": \"onlyAdmin\",\n \"nameLocations\": [\n \"1961:9:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 308,\n \"src\": \"1961:9:1\"\n },\n \"nodeType\": \"ModifierInvocation\",\n \"src\": \"1961:9:1\"\n }\n ],\n \"name\": \"addContract\",\n \"nameLocation\": \"1843:11:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 353,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 348,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"1878:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1864:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 347,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1864:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 350,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"1900:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1892:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 349,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1892:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 352,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"1939:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1925:20:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 351,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1925:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1854:97:1\"\n },\n \"returnParameters\": {\n \"id\": 356,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1971:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1834:810:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 461,\n \"nodeType\": \"Block\",\n \"src\": \"2917:308:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 437,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 432,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2948:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 434,\n \"indexExpression\": {\n \"id\": 433,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"2965:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2948:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 435,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2971:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2948:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \">\",\n \"rightExpression\": {\n \"hexValue\": \"30\",\n \"id\": 436,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2980:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n \"src\": \"2948:33:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e7472616374206e6f7420666f756e64\",\n \"id\": 438,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2995:37:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_d066a44a39671b21109182475e6b0e1e4835a3c0e1acbc3b59ed277bf9b1ecc0\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract not found\\\"\"\n },\n \"value\": \"AddressRegistry: contract not found\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_d066a44a39671b21109182475e6b0e1e4835a3c0e1acbc3b59ed277bf9b1ecc0\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract not found\\\"\"\n }\n ],\n \"id\": 431,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"2927:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 439,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2927:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 440,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2927:115:1\"\n },\n {\n \"assignments\": [\n 443\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 443,\n \"mutability\": \"mutable\",\n \"name\": \"record\",\n \"nameLocation\": \"3074:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 461,\n \"src\": \"3052:28:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n },\n \"typeName\": {\n \"id\": 442,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 441,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"3052:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"3052:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"3052:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 454,\n \"initialValue\": {\n \"baseExpression\": {\n \"baseExpression\": {\n \"id\": 444,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3083:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 446,\n \"indexExpression\": {\n \"id\": 445,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"3100:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3083:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 453,\n \"indexExpression\": {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 452,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 447,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3119:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 449,\n \"indexExpression\": {\n \"id\": 448,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"3136:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3119:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 450,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3142:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"3119:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"-\",\n \"rightExpression\": {\n \"hexValue\": \"31\",\n \"id\": 451,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"3151:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_1_by_1\",\n \"typeString\": \"int_const 1\"\n },\n \"value\": \"1\"\n },\n \"src\": \"3119:33:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3083:79:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"3052:110:1\"\n },\n {\n \"expression\": {\n \"components\": [\n {\n \"expression\": {\n \"id\": 455,\n \"name\": \"record\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 443,\n \"src\": \"3180:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n },\n \"id\": 456,\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3187:15:1\",\n \"memberName\": \"contractAddress\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 264,\n \"src\": \"3180:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"expression\": {\n \"id\": 457,\n \"name\": \"record\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 443,\n \"src\": \"3204:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n },\n \"id\": 458,\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3211:6:1\",\n \"memberName\": \"abiUrl\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 266,\n \"src\": \"3204:13:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"id\": 459,\n \"isConstant\": false,\n \"isInlineArray\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"TupleExpression\",\n \"src\": \"3179:39:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$_t_address_$_t_string_memory_ptr_$\",\n \"typeString\": \"tuple(address,string memory)\"\n }\n },\n \"functionReturnParameters\": 430,\n \"id\": 460,\n \"nodeType\": \"Return\",\n \"src\": \"3172:46:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 422,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"2650:154:1\",\n \"text\": \" @dev Returns the most recently deployed (active) address for a given contract name.\\n Reverts if the contract name has no history.\"\n },\n \"functionSelector\": \"9dc4a3ec\",\n \"id\": 462,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getLatestContract\",\n \"nameLocation\": \"2818:17:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 425,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 424,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"2859:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2845:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 423,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2845:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2835:34:1\"\n },\n \"returnParameters\": {\n \"id\": 430,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 427,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2893:7:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 426,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2893:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 429,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2902:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 428,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2902:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2892:24:1\"\n },\n \"scope\": 488,\n \"src\": \"2809:416:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 476,\n \"nodeType\": \"Block\",\n \"src\": \"3515:46:1\",\n \"statements\": [\n {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 472,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3532:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 474,\n \"indexExpression\": {\n \"id\": 473,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 465,\n \"src\": \"3549:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3532:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"functionReturnParameters\": 471,\n \"id\": 475,\n \"nodeType\": \"Return\",\n \"src\": \"3525:29:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 463,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"3231:169:1\",\n \"text\": \" @dev Returns the entire chronological history of records for a given contract name.\\n The last record in the array is the current active version.\"\n },\n \"functionSelector\": \"df40e56e\",\n \"id\": 477,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getContractHistory\",\n \"nameLocation\": \"3414:18:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 466,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 465,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"3456:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 477,\n \"src\": \"3442:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 464,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3442:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3432:34:1\"\n },\n \"returnParameters\": {\n \"id\": 471,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 470,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 477,\n \"src\": \"3490:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_memory_ptr_$dyn_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 468,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 467,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"3490:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"3490:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"3490:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"id\": 469,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"3490:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3489:25:1\"\n },\n \"scope\": 488,\n \"src\": \"3405:156:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 486,\n \"nodeType\": \"Block\",\n \"src\": \"3739:38:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 484,\n \"name\": \"_contractNames\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 276,\n \"src\": \"3756:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string storage ref[] storage ref\"\n }\n },\n \"functionReturnParameters\": 483,\n \"id\": 485,\n \"nodeType\": \"Return\",\n \"src\": \"3749:21:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 478,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"3567:96:1\",\n \"text\": \" @dev Returns all recognized contract names currently tracked in the registry.\"\n },\n \"functionSelector\": \"d7a9b816\",\n \"id\": 487,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getAllContractNames\",\n \"nameLocation\": \"3677:19:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 479,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"3696:2:1\"\n },\n \"returnParameters\": {\n \"id\": 483,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 482,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 487,\n \"src\": \"3722:15:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_memory_ptr_$dyn_memory_ptr\",\n \"typeString\": \"string[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 480,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3722:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"id\": 481,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"3722:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage_ptr\",\n \"typeString\": \"string[]\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3721:17:1\"\n },\n \"scope\": 488,\n \"src\": \"3668:109:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n }\n ],\n \"scope\": 489,\n \"src\": \"325:3454:1\",\n \"usedErrors\": [],\n \"usedEvents\": [\n 290,\n 296\n ]\n }\n ],\n \"src\": \"39:3741:1\"\n },\n \"legacyAST\": {\n \"absolutePath\": \"/home/dme/Documents/blockchain/contracts/generated/tron/AddressRegistry.sol\",\n \"exportedSymbols\": {\n \"AddressRegistry\": [\n 488\n ]\n },\n \"id\": 489,\n \"license\": \"Apache-2.0\",\n \"nodeType\": \"SourceUnit\",\n \"nodes\": [\n {\n \"id\": 259,\n \"literals\": [\n \"solidity\",\n \"^\",\n \"0.8\",\n \".24\"\n ],\n \"nodeType\": \"PragmaDirective\",\n \"src\": \"39:24:1\"\n },\n {\n \"abstract\": false,\n \"baseContracts\": [],\n \"canonicalName\": \"AddressRegistry\",\n \"contractDependencies\": [],\n \"contractKind\": \"contract\",\n \"documentation\": {\n \"id\": 260,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"65:259:1\",\n \"text\": \" @title Address Registry\\n @dev An immutable registry that stores the historical and active deployment addresses for\\n D-Library Core Contracts (Factory, BouncerStorage, BackupStorage, etc.).\\n Designed to replace build-time static configuration.\"\n },\n \"fullyImplemented\": true,\n \"id\": 488,\n \"linearizedBaseContracts\": [\n 488\n ],\n \"name\": \"AddressRegistry\",\n \"nameLocation\": \"334:15:1\",\n \"nodeType\": \"ContractDefinition\",\n \"nodes\": [\n {\n \"constant\": false,\n \"functionSelector\": \"f851a440\",\n \"id\": 262,\n \"mutability\": \"mutable\",\n \"name\": \"admin\",\n \"nameLocation\": \"371:5:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"356:20:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 261,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"356:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"public\"\n },\n {\n \"canonicalName\": \"AddressRegistry.ContractRecord\",\n \"id\": 267,\n \"members\": [\n {\n \"constant\": false,\n \"id\": 264,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"423:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 267,\n \"src\": \"415:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 263,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"415:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 266,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"455:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 267,\n \"src\": \"448:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 265,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"448:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"name\": \"ContractRecord\",\n \"nameLocation\": \"390:14:1\",\n \"nodeType\": \"StructDefinition\",\n \"scope\": 488,\n \"src\": \"383:85:1\",\n \"visibility\": \"public\"\n },\n {\n \"constant\": false,\n \"id\": 273,\n \"mutability\": \"mutable\",\n \"name\": \"_contractHistory\",\n \"nameLocation\": \"612:16:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"568:60:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string => struct AddressRegistry.ContractRecord[])\"\n },\n \"typeName\": {\n \"id\": 272,\n \"keyName\": \"\",\n \"keyNameLocation\": \"-1:-1:-1\",\n \"keyType\": {\n \"id\": 268,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"576:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"nodeType\": \"Mapping\",\n \"src\": \"568:35:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string => struct AddressRegistry.ContractRecord[])\"\n },\n \"valueName\": \"\",\n \"valueNameLocation\": \"-1:-1:-1\",\n \"valueType\": {\n \"baseType\": {\n \"id\": 270,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 269,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"586:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"586:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"586:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"id\": 271,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"586:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n }\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"constant\": false,\n \"id\": 276,\n \"mutability\": \"mutable\",\n \"name\": \"_contractNames\",\n \"nameLocation\": \"733:14:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"716:31:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 274,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"716:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"id\": 275,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"716:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage_ptr\",\n \"typeString\": \"string[]\"\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"constant\": false,\n \"id\": 280,\n \"mutability\": \"mutable\",\n \"name\": \"_nameExists\",\n \"nameLocation\": \"840:11:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 488,\n \"src\": \"808:43:1\",\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string => bool)\"\n },\n \"typeName\": {\n \"id\": 279,\n \"keyName\": \"\",\n \"keyNameLocation\": \"-1:-1:-1\",\n \"keyType\": {\n \"id\": 277,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"816:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"nodeType\": \"Mapping\",\n \"src\": \"808:23:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string => bool)\"\n },\n \"valueName\": \"\",\n \"valueNameLocation\": \"-1:-1:-1\",\n \"valueType\": {\n \"id\": 278,\n \"name\": \"bool\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"826:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n }\n },\n \"visibility\": \"private\"\n },\n {\n \"anonymous\": false,\n \"eventSelector\": \"bf2c71e696266b296731ca022cf688cebadbc3d4d52f1ccbe5c027e582dcc570\",\n \"id\": 290,\n \"name\": \"ContractAdded\",\n \"nameLocation\": \"864:13:1\",\n \"nodeType\": \"EventDefinition\",\n \"parameters\": {\n \"id\": 289,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 282,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"902:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"887:19:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 281,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"887:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 284,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"932:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"916:31:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 283,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"916:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 286,\n \"indexed\": false,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"964:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"957:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 285,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"957:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 288,\n \"indexed\": false,\n \"mutability\": \"mutable\",\n \"name\": \"version\",\n \"nameLocation\": \"988:7:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 290,\n \"src\": \"980:15:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 287,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"980:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"877:124:1\"\n },\n \"src\": \"858:144:1\"\n },\n {\n \"anonymous\": false,\n \"eventSelector\": \"7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f\",\n \"id\": 296,\n \"name\": \"AdminChanged\",\n \"nameLocation\": \"1013:12:1\",\n \"nodeType\": \"EventDefinition\",\n \"parameters\": {\n \"id\": 295,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 292,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"oldAdmin\",\n \"nameLocation\": \"1042:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 296,\n \"src\": \"1026:24:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 291,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1026:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 294,\n \"indexed\": true,\n \"mutability\": \"mutable\",\n \"name\": \"newAdmin\",\n \"nameLocation\": \"1068:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 296,\n \"src\": \"1052:24:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 293,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1052:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1025:52:1\"\n },\n \"src\": \"1007:71:1\"\n },\n {\n \"body\": {\n \"id\": 307,\n \"nodeType\": \"Block\",\n \"src\": \"1105:134:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 302,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"id\": 299,\n \"name\": \"msg\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 4294967281,\n \"src\": \"1136:3:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_message\",\n \"typeString\": \"msg\"\n }\n },\n \"id\": 300,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"1140:6:1\",\n \"memberName\": \"sender\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"1136:10:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"==\",\n \"rightExpression\": {\n \"id\": 301,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1150:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1136:19:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a2063616c6c6572206973206e6f74207468652061646d696e\",\n \"id\": 303,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1169:42:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_cb159406d97a2d44dd078dff96fa3a509f0aa29414d28bc90206a821cb3755b1\",\n \"typeString\": \"literal_string \\\"AddressRegistry: caller is not the admin\\\"\"\n },\n \"value\": \"AddressRegistry: caller is not the admin\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_cb159406d97a2d44dd078dff96fa3a509f0aa29414d28bc90206a821cb3755b1\",\n \"typeString\": \"literal_string \\\"AddressRegistry: caller is not the admin\\\"\"\n }\n ],\n \"id\": 298,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1115:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 304,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1115:106:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 305,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1115:106:1\"\n },\n {\n \"id\": 306,\n \"nodeType\": \"PlaceholderStatement\",\n \"src\": \"1231:1:1\"\n }\n ]\n },\n \"id\": 308,\n \"name\": \"onlyAdmin\",\n \"nameLocation\": \"1093:9:1\",\n \"nodeType\": \"ModifierDefinition\",\n \"parameters\": {\n \"id\": 297,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1102:2:1\"\n },\n \"src\": \"1084:155:1\",\n \"virtual\": false,\n \"visibility\": \"internal\"\n },\n {\n \"body\": {\n \"id\": 316,\n \"nodeType\": \"Block\",\n \"src\": \"1259:35:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 314,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 311,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1269:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"expression\": {\n \"id\": 312,\n \"name\": \"msg\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 4294967281,\n \"src\": \"1277:3:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_message\",\n \"typeString\": \"msg\"\n }\n },\n \"id\": 313,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"1281:6:1\",\n \"memberName\": \"sender\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"1277:10:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1269:18:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"id\": 315,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1269:18:1\"\n }\n ]\n },\n \"id\": 317,\n \"implemented\": true,\n \"kind\": \"constructor\",\n \"modifiers\": [],\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 309,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1256:2:1\"\n },\n \"returnParameters\": {\n \"id\": 310,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1259:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1245:49:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"body\": {\n \"id\": 344,\n \"nodeType\": \"Block\",\n \"src\": \"1445:202:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 331,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 326,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1476:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"!=\",\n \"rightExpression\": {\n \"arguments\": [\n {\n \"hexValue\": \"30\",\n \"id\": 329,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1496:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n }\n ],\n \"id\": 328,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"1488:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 327,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1488:7:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 330,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1488:10:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1476:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a206e65772061646d696e20697320746865207a65726f2061646472657373\",\n \"id\": 332,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"1512:48:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_f51585c46b13d02a1d62f5a20a7a59926678787cab006e6d45003d6596a57c5b\",\n \"typeString\": \"literal_string \\\"AddressRegistry: new admin is the zero address\\\"\"\n },\n \"value\": \"AddressRegistry: new admin is the zero address\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_f51585c46b13d02a1d62f5a20a7a59926678787cab006e6d45003d6596a57c5b\",\n \"typeString\": \"literal_string \\\"AddressRegistry: new admin is the zero address\\\"\"\n }\n ],\n \"id\": 325,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1455:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 333,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1455:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 334,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1455:115:1\"\n },\n {\n \"eventCall\": {\n \"arguments\": [\n {\n \"id\": 336,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1598:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 337,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1605:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 335,\n \"name\": \"AdminChanged\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 296,\n \"src\": \"1585:12:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n \"typeString\": \"function (address,address)\"\n }\n },\n \"id\": 338,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1585:29:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 339,\n \"nodeType\": \"EmitStatement\",\n \"src\": \"1580:34:1\"\n },\n {\n \"expression\": {\n \"id\": 342,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 340,\n \"name\": \"admin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 262,\n \"src\": \"1624:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"id\": 341,\n \"name\": \"newAdmin\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 320,\n \"src\": \"1632:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"1624:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"id\": 343,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1624:16:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 318,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1300:82:1\",\n \"text\": \" @dev Transfers administration of the registry to a new address.\"\n },\n \"functionSelector\": \"8f283970\",\n \"id\": 345,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [\n {\n \"id\": 323,\n \"kind\": \"modifierInvocation\",\n \"modifierName\": {\n \"id\": 322,\n \"name\": \"onlyAdmin\",\n \"nameLocations\": [\n \"1435:9:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 308,\n \"src\": \"1435:9:1\"\n },\n \"nodeType\": \"ModifierInvocation\",\n \"src\": \"1435:9:1\"\n }\n ],\n \"name\": \"changeAdmin\",\n \"nameLocation\": \"1396:11:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 321,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 320,\n \"mutability\": \"mutable\",\n \"name\": \"newAdmin\",\n \"nameLocation\": \"1416:8:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 345,\n \"src\": \"1408:16:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 319,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1408:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1407:18:1\"\n },\n \"returnParameters\": {\n \"id\": 324,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1445:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1387:260:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 420,\n \"nodeType\": \"Block\",\n \"src\": \"1971:673:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"id\": 363,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 358,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2002:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"!=\",\n \"rightExpression\": {\n \"arguments\": [\n {\n \"hexValue\": \"30\",\n \"id\": 361,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2029:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n }\n ],\n \"id\": 360,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"2021:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 359,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2021:7:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 362,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2021:10:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"src\": \"2002:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e747261637420616464726573732063616e6e6f74206265207a65726f\",\n \"id\": 364,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2045:50:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_8b4b3d39595ff286fe4920e60453149c169d1740c0e80d3cba5c9b9f34ab6379\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract address cannot be zero\\\"\"\n },\n \"value\": \"AddressRegistry: contract address cannot be zero\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_8b4b3d39595ff286fe4920e60453149c169d1740c0e80d3cba5c9b9f34ab6379\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract address cannot be zero\\\"\"\n }\n ],\n \"id\": 357,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"1981:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 365,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"1981:124:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 366,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"1981:124:1\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 374,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 370,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2142:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"id\": 369,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"2136:5:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_bytes_storage_ptr_$\",\n \"typeString\": \"type(bytes storage pointer)\"\n },\n \"typeName\": {\n \"id\": 368,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2136:5:1\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 371,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2136:11:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n },\n \"id\": 372,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2148:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2136:18:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \">\",\n \"rightExpression\": {\n \"hexValue\": \"30\",\n \"id\": 373,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2157:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n \"src\": \"2136:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e7472616374206e616d652063616e6e6f7420626520656d707479\",\n \"id\": 375,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2172:48:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_1bb9b4bababfa5415006cfb7388a6199c54d8f58a3be11a3f1f461c3c138fca3\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract name cannot be empty\\\"\"\n },\n \"value\": \"AddressRegistry: contract name cannot be empty\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_1bb9b4bababfa5415006cfb7388a6199c54d8f58a3be11a3f1f461c3c138fca3\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract name cannot be empty\\\"\"\n }\n ],\n \"id\": 367,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"2115:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 376,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2115:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 377,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2115:115:1\"\n },\n {\n \"condition\": {\n \"id\": 381,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"UnaryOperation\",\n \"operator\": \"!\",\n \"prefix\": true,\n \"src\": \"2245:18:1\",\n \"subExpression\": {\n \"baseExpression\": {\n \"id\": 378,\n \"name\": \"_nameExists\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 280,\n \"src\": \"2246:11:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string memory => bool)\"\n }\n },\n \"id\": 380,\n \"indexExpression\": {\n \"id\": 379,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2258:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2246:17:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 395,\n \"nodeType\": \"IfStatement\",\n \"src\": \"2241:112:1\",\n \"trueBody\": {\n \"id\": 394,\n \"nodeType\": \"Block\",\n \"src\": \"2265:88:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 386,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"baseExpression\": {\n \"id\": 382,\n \"name\": \"_nameExists\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 280,\n \"src\": \"2279:11:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_bool_$\",\n \"typeString\": \"mapping(string memory => bool)\"\n }\n },\n \"id\": 384,\n \"indexExpression\": {\n \"id\": 383,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2291:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": true,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2279:17:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"hexValue\": \"74727565\",\n \"id\": 385,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2299:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"true\"\n },\n \"src\": \"2279:24:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 387,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2279:24:1\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 391,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2337:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"expression\": {\n \"id\": 388,\n \"name\": \"_contractNames\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 276,\n \"src\": \"2317:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string storage ref[] storage ref\"\n }\n },\n \"id\": 390,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2332:4:1\",\n \"memberName\": \"push\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2317:19:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_array$_t_string_storage_$dyn_storage_ptr_$_t_string_storage_$returns$__$attached_to$_t_array$_t_string_storage_$dyn_storage_ptr_$\",\n \"typeString\": \"function (string storage ref[] storage pointer,string storage ref)\"\n }\n },\n \"id\": 392,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2317:25:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 393,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2317:25:1\"\n }\n ]\n }\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 401,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2437:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 402,\n \"name\": \"abiUrl\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 352,\n \"src\": \"2462:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n ],\n \"id\": 400,\n \"name\": \"ContractRecord\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 267,\n \"src\": \"2404:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_struct$_ContractRecord_$267_storage_ptr_$\",\n \"typeString\": \"type(struct AddressRegistry.ContractRecord storage pointer)\"\n }\n },\n \"id\": 403,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"structConstructorCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [\n \"2420:15:1\",\n \"2454:6:1\"\n ],\n \"names\": [\n \"contractAddress\",\n \"abiUrl\"\n ],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2404:66:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n ],\n \"expression\": {\n \"baseExpression\": {\n \"id\": 396,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2363:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 398,\n \"indexExpression\": {\n \"id\": 397,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2380:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2363:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 399,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2386:4:1\",\n \"memberName\": \"push\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2363:27:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr_$_t_struct$_ContractRecord_$267_storage_$returns$__$attached_to$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr_$\",\n \"typeString\": \"function (struct AddressRegistry.ContractRecord storage ref[] storage pointer,struct AddressRegistry.ContractRecord storage ref)\"\n }\n },\n \"id\": 404,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2363:117:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 405,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2363:117:1\"\n },\n {\n \"assignments\": [\n 407\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 407,\n \"mutability\": \"mutable\",\n \"name\": \"versionIndex\",\n \"nameLocation\": \"2499:12:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 420,\n \"src\": \"2491:20:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 406,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2491:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 412,\n \"initialValue\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 408,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2514:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 410,\n \"indexExpression\": {\n \"id\": 409,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2531:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2514:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 411,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2537:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2514:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"2491:52:1\"\n },\n {\n \"eventCall\": {\n \"arguments\": [\n {\n \"id\": 414,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 348,\n \"src\": \"2593:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n {\n \"id\": 415,\n \"name\": \"contractAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 350,\n \"src\": \"2599:15:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 416,\n \"name\": \"abiUrl\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 352,\n \"src\": \"2616:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n {\n \"id\": 417,\n \"name\": \"versionIndex\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 407,\n \"src\": \"2624:12:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 413,\n \"name\": \"ContractAdded\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 290,\n \"src\": \"2579:13:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_event_nonpayable$_t_string_memory_ptr_$_t_address_$_t_string_memory_ptr_$_t_uint256_$returns$__$\",\n \"typeString\": \"function (string memory,address,string memory,uint256)\"\n }\n },\n \"id\": 418,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2579:58:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 419,\n \"nodeType\": \"EmitStatement\",\n \"src\": \"2574:63:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 346,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1653:176:1\",\n \"text\": \" @dev Appends a new deployed address to the history of a given contract name.\\n The last appended address is considered the \\\"active\\\" or \\\"latest\\\" version.\"\n },\n \"functionSelector\": \"7d6929e0\",\n \"id\": 421,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [\n {\n \"id\": 355,\n \"kind\": \"modifierInvocation\",\n \"modifierName\": {\n \"id\": 354,\n \"name\": \"onlyAdmin\",\n \"nameLocations\": [\n \"1961:9:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 308,\n \"src\": \"1961:9:1\"\n },\n \"nodeType\": \"ModifierInvocation\",\n \"src\": \"1961:9:1\"\n }\n ],\n \"name\": \"addContract\",\n \"nameLocation\": \"1843:11:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 353,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 348,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"1878:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1864:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 347,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1864:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 350,\n \"mutability\": \"mutable\",\n \"name\": \"contractAddress\",\n \"nameLocation\": \"1900:15:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1892:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 349,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1892:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 352,\n \"mutability\": \"mutable\",\n \"name\": \"abiUrl\",\n \"nameLocation\": \"1939:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 421,\n \"src\": \"1925:20:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 351,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1925:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1854:97:1\"\n },\n \"returnParameters\": {\n \"id\": 356,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"1971:0:1\"\n },\n \"scope\": 488,\n \"src\": \"1834:810:1\",\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 461,\n \"nodeType\": \"Block\",\n \"src\": \"2917:308:1\",\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 437,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 432,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"2948:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 434,\n \"indexExpression\": {\n \"id\": 433,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"2965:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"2948:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 435,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"2971:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2948:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \">\",\n \"rightExpression\": {\n \"hexValue\": \"30\",\n \"id\": 436,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2980:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n \"src\": \"2948:33:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"hexValue\": \"4164647265737352656769737472793a20636f6e7472616374206e6f7420666f756e64\",\n \"id\": 438,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2995:37:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_d066a44a39671b21109182475e6b0e1e4835a3c0e1acbc3b59ed277bf9b1ecc0\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract not found\\\"\"\n },\n \"value\": \"AddressRegistry: contract not found\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_stringliteral_d066a44a39671b21109182475e6b0e1e4835a3c0e1acbc3b59ed277bf9b1ecc0\",\n \"typeString\": \"literal_string \\\"AddressRegistry: contract not found\\\"\"\n }\n ],\n \"id\": 431,\n \"name\": \"require\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 4294967278,\n 4294967278\n ],\n \"referencedDeclaration\": 4294967278,\n \"src\": \"2927:7:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n \"typeString\": \"function (bool,string memory) pure\"\n }\n },\n \"id\": 439,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2927:115:1\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 440,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2927:115:1\"\n },\n {\n \"assignments\": [\n 443\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 443,\n \"mutability\": \"mutable\",\n \"name\": \"record\",\n \"nameLocation\": \"3074:6:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 461,\n \"src\": \"3052:28:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n },\n \"typeName\": {\n \"id\": 442,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 441,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"3052:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"3052:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"3052:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 454,\n \"initialValue\": {\n \"baseExpression\": {\n \"baseExpression\": {\n \"id\": 444,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3083:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 446,\n \"indexExpression\": {\n \"id\": 445,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"3100:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3083:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 453,\n \"indexExpression\": {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 452,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 447,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3119:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 449,\n \"indexExpression\": {\n \"id\": 448,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 424,\n \"src\": \"3136:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3119:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"id\": 450,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3142:6:1\",\n \"memberName\": \"length\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"3119:29:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"-\",\n \"rightExpression\": {\n \"hexValue\": \"31\",\n \"id\": 451,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"3151:1:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_1_by_1\",\n \"typeString\": \"int_const 1\"\n },\n \"value\": \"1\"\n },\n \"src\": \"3119:33:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3083:79:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"3052:110:1\"\n },\n {\n \"expression\": {\n \"components\": [\n {\n \"expression\": {\n \"id\": 455,\n \"name\": \"record\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 443,\n \"src\": \"3180:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n },\n \"id\": 456,\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3187:15:1\",\n \"memberName\": \"contractAddress\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 264,\n \"src\": \"3180:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"expression\": {\n \"id\": 457,\n \"name\": \"record\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 443,\n \"src\": \"3204:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord memory\"\n }\n },\n \"id\": 458,\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3211:6:1\",\n \"memberName\": \"abiUrl\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 266,\n \"src\": \"3204:13:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n }\n ],\n \"id\": 459,\n \"isConstant\": false,\n \"isInlineArray\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"TupleExpression\",\n \"src\": \"3179:39:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$_t_address_$_t_string_memory_ptr_$\",\n \"typeString\": \"tuple(address,string memory)\"\n }\n },\n \"functionReturnParameters\": 430,\n \"id\": 460,\n \"nodeType\": \"Return\",\n \"src\": \"3172:46:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 422,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"2650:154:1\",\n \"text\": \" @dev Returns the most recently deployed (active) address for a given contract name.\\n Reverts if the contract name has no history.\"\n },\n \"functionSelector\": \"9dc4a3ec\",\n \"id\": 462,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getLatestContract\",\n \"nameLocation\": \"2818:17:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 425,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 424,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"2859:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2845:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 423,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2845:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2835:34:1\"\n },\n \"returnParameters\": {\n \"id\": 430,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 427,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2893:7:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 426,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2893:7:1\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 429,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 462,\n \"src\": \"2902:13:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 428,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2902:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2892:24:1\"\n },\n \"scope\": 488,\n \"src\": \"2809:416:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 476,\n \"nodeType\": \"Block\",\n \"src\": \"3515:46:1\",\n \"statements\": [\n {\n \"expression\": {\n \"baseExpression\": {\n \"id\": 472,\n \"name\": \"_contractHistory\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 273,\n \"src\": \"3532:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_mapping$_t_string_memory_ptr_$_t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_$\",\n \"typeString\": \"mapping(string memory => struct AddressRegistry.ContractRecord storage ref[] storage ref)\"\n }\n },\n \"id\": 474,\n \"indexExpression\": {\n \"id\": 473,\n \"name\": \"name\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 465,\n \"src\": \"3549:4:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string memory\"\n }\n },\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"IndexAccess\",\n \"src\": \"3532:22:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage\",\n \"typeString\": \"struct AddressRegistry.ContractRecord storage ref[] storage ref\"\n }\n },\n \"functionReturnParameters\": 471,\n \"id\": 475,\n \"nodeType\": \"Return\",\n \"src\": \"3525:29:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 463,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"3231:169:1\",\n \"text\": \" @dev Returns the entire chronological history of records for a given contract name.\\n The last record in the array is the current active version.\"\n },\n \"functionSelector\": \"df40e56e\",\n \"id\": 477,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getContractHistory\",\n \"nameLocation\": \"3414:18:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 466,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 465,\n \"mutability\": \"mutable\",\n \"name\": \"name\",\n \"nameLocation\": \"3456:4:1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 477,\n \"src\": \"3442:18:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_memory_ptr\",\n \"typeString\": \"string\"\n },\n \"typeName\": {\n \"id\": 464,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3442:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3432:34:1\"\n },\n \"returnParameters\": {\n \"id\": 471,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 470,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 477,\n \"src\": \"3490:23:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_memory_ptr_$dyn_memory_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 468,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 467,\n \"name\": \"ContractRecord\",\n \"nameLocations\": [\n \"3490:14:1\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 267,\n \"src\": \"3490:14:1\"\n },\n \"referencedDeclaration\": 267,\n \"src\": \"3490:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ContractRecord_$267_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord\"\n }\n },\n \"id\": 469,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"3490:16:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_struct$_ContractRecord_$267_storage_$dyn_storage_ptr\",\n \"typeString\": \"struct AddressRegistry.ContractRecord[]\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3489:25:1\"\n },\n \"scope\": 488,\n \"src\": \"3405:156:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n },\n {\n \"body\": {\n \"id\": 486,\n \"nodeType\": \"Block\",\n \"src\": \"3739:38:1\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 484,\n \"name\": \"_contractNames\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 276,\n \"src\": \"3756:14:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage\",\n \"typeString\": \"string storage ref[] storage ref\"\n }\n },\n \"functionReturnParameters\": 483,\n \"id\": 485,\n \"nodeType\": \"Return\",\n \"src\": \"3749:21:1\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 478,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"3567:96:1\",\n \"text\": \" @dev Returns all recognized contract names currently tracked in the registry.\"\n },\n \"functionSelector\": \"d7a9b816\",\n \"id\": 487,\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"getAllContractNames\",\n \"nameLocation\": \"3677:19:1\",\n \"nodeType\": \"FunctionDefinition\",\n \"parameters\": {\n \"id\": 479,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"3696:2:1\"\n },\n \"returnParameters\": {\n \"id\": 483,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 482,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 487,\n \"src\": \"3722:15:1\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_memory_ptr_$dyn_memory_ptr\",\n \"typeString\": \"string[]\"\n },\n \"typeName\": {\n \"baseType\": {\n \"id\": 480,\n \"name\": \"string\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3722:6:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_string_storage_ptr\",\n \"typeString\": \"string\"\n }\n },\n \"id\": 481,\n \"nodeType\": \"ArrayTypeName\",\n \"src\": \"3722:8:1\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_array$_t_string_storage_$dyn_storage_ptr\",\n \"typeString\": \"string[]\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3721:17:1\"\n },\n \"scope\": 488,\n \"src\": \"3668:109:1\",\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"external\"\n }\n ],\n \"scope\": 489,\n \"src\": \"325:3454:1\",\n \"usedErrors\": [],\n \"usedEvents\": [\n 290,\n 296\n ]\n }\n ],\n \"src\": \"39:3741:1\"\n },\n \"compiler\": {\n \"name\": \"solc\",\n \"version\": \"0.8.24+commit.7d902c66.Emscripten.clang\"\n },\n \"networks\": {},\n \"schemaVersion\": \"2.0.1\",\n \"updatedAt\": \"2026-02-25T11:29:52.687Z\"\n}","import config from './config';\nimport { ProviderConfig, ContractConfigs } from \"./interfaces\";\nimport evmRegistry from './abis/evm/AddressRegistry.json'\nimport tronRegistry from './abis/tron/AddressRegistry.json'\n\nconst evmAddressRegistryAbi = evmRegistry.abi;\nconst tronAddressRegistryAbi = tronRegistry.abi;\n\nexport { evmAddressRegistryAbi, tronAddressRegistryAbi }\nexport { type ProviderConfig, type ContractConfigs }\n\n\nexport { config };"],"mappings":"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","names":["CACHE_KEY_PREFIX","CACHE_DURATION_MS","RegistryAddressLoader","tech","chainId","key","data","e","cache","abiUrl","res","abi","registry","cacheKey","now","addresses","entry","camelCaseName","contractNames","newEntries","name","address","normalizedName","newCache","registryAddressLoader","config_default","AddressRegistry_default","evmAddressRegistryAbi","tronAddressRegistryAbi"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@the_library/web3-registry-addresses",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Common package for handling Web3 AddressRegistry sessions and caching",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -28,15 +28,13 @@
|
|
|
28
28
|
"cache"
|
|
29
29
|
],
|
|
30
30
|
"sideEffects": false,
|
|
31
|
-
"author": "Med Pond",
|
|
31
|
+
"author": "Med Pond <med@datapond.earth>",
|
|
32
32
|
"license": "SEE LICENSE IN LICENCE",
|
|
33
33
|
"devDependencies": {
|
|
34
|
+
"@the_library/web3-contracts": "workspace:*",
|
|
35
|
+
"@the_library/web3-core": "workspace:*",
|
|
34
36
|
"@types/node": "^22.10.0",
|
|
35
37
|
"tsup": "^8.0.1",
|
|
36
38
|
"typescript": "^5.3.3"
|
|
37
|
-
},
|
|
38
|
-
"dependencies": {
|
|
39
|
-
"@the_library/web3-contracts": "workspace:*",
|
|
40
|
-
"@the_library/web3-core": "workspace:*"
|
|
41
39
|
}
|
|
42
|
-
}
|
|
40
|
+
}
|