save & fetch contracts using FE

pull/5370/head
aniket-engg 12 months ago committed by Aniket
parent 3ca32ece35
commit 1ddc7f0b64
  1. 32
      libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx
  2. 42
      libs/remix-ui/run-tab/src/lib/components/universalDappUI.tsx

@ -17,14 +17,36 @@ export function InstanceContainerUI(props: InstanceContainerProps) {
if (enableSave.current) {
const { network } = await props.plugin.call('blockchain', 'getCurrentNetworkStatus')
chainId.current = network.id
// Move contract saved in localstorage to Remix FE
const allSavedContracts = localStorage.getItem('savedContracts')
if (allSavedContracts) {
await props.plugin.call('udapp', 'clearAllSavedInstances')
const savedContracts = JSON.parse(allSavedContracts)
if (savedContracts && savedContracts[network.id]) {
const instances = savedContracts[network.id]
for (const inst of instances)
if (inst) await props.plugin.call('udapp', 'addSavedInstance', inst.address, inst.abi || inst.contractData.abi, inst.name, inst.savedOn, inst.filePath)
for (const networkId in savedContracts) {
if (savedContracts[networkId].length > 0) {
for (const contractDetails of savedContracts[networkId]) {
const objToSave = {
name: contractDetails.name,
address: contractDetails.address,
abi: contractDetails.abi || contractDetails.contractData.abi,
filePath: contractDetails.filePath,
pinnedAt: contractDetails.savedOn
}
await props.plugin.call('fileManager', 'writeFile', `.deploys/pinned-contracts/${networkId}/${contractDetails.address}.json`, JSON.stringify(objToSave, null, 2))
}
}
}
localStorage.removeItem('savedContracts')
}
// Load contracts from FE
const isPinnedAvailable = await props.plugin.call('fileManager', 'exists', `.deploys/pinned-contracts/${chainId.current}`)
if (isPinnedAvailable) {
await props.plugin.call('udapp', 'clearAllSavedInstances')
const list = await props.plugin.call('fileManager', 'readdir', `.deploys/pinned-contracts/${chainId.current}`)
const filePaths = Object.keys(list)
for (const file of filePaths) {
const pinnedContract = await props.plugin.call('fileManager', 'readFile', file)
const pinnedContractObj = JSON.parse(pinnedContract)
if (pinnedContractObj) await props.plugin.call('udapp', 'addSavedInstance', pinnedContractObj.address, pinnedContractObj.abi, pinnedContractObj.name, pinnedContractObj.pinnedAt, pinnedContractObj.filePath)
}
}
}

@ -139,23 +139,35 @@ export function UniversalDappUI(props: UdappProps) {
const pinContract = async() => {
const workspace = await props.plugin.call('filePanel', 'getCurrentWorkspace')
const {network} = await props.plugin.call('blockchain', 'getCurrentNetworkStatus')
const savedContracts = localStorage.getItem('savedContracts')
let objToSave
if (!savedContracts) {
objToSave = {}
objToSave[network.id] = []
} else {
objToSave = JSON.parse(savedContracts)
if (!objToSave[network.id]) {
objToSave[network.id] = []
}
// const hasPreviousPinned = await this.call('fileManager', 'exists', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`)
// const savedContracts = localStorage.getItem('savedContracts')
let objToSave = {
name: props.instance.name,
address: props.instance.address,
abi: props.instance.abi || props.instance.contractData.abi,
filePath: props.instance.filePath || `${workspace.name}/${props.instance.contractData.contract.file}`,
pinnedAt: Date.now()
}
props.instance.savedOn = Date.now()
props.instance.filePath = props.instance.filePath || `${workspace.name}/${props.instance.contractData.contract.file}`
objToSave[network.id].push(props.instance)
localStorage.setItem('savedContracts', JSON.stringify(objToSave))
// if (!savedContracts) {
// objToSave = {}
// objToSave[network.id] = []
// } else {
// objToSave = JSON.parse(savedContracts)
// if (!objToSave[network.id]) {
// objToSave[network.id] = []
// }
// }
// const deployments = await this.call('fileManager', 'readFile', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`)
// const hasPreviousDeploys = await this.call('fileManager', 'exists', `.deploys/upgradeable-contracts/${networkName}/UUPS.json`)
await props.plugin.call('fileManager', 'writeFile', `.deploys/pinned-contracts/${network.id}/${props.instance.address}.json`, JSON.stringify(objToSave, null, 2))
// props.instance.savedOn = Date.now()
// props.instance.filePath = props.instance.filePath || `${workspace.name}/${props.instance.contractData.contract.file}`
// objToSave[network.id].push(props.instance)
// localStorage.setItem('savedContracts', JSON.stringify(objToSave))
// Add contract to saved contracts list on UI
await props.plugin.call('udapp', 'addSavedInstance', props.instance.address, props.instance.abi || props.instance.contractData.abi, props.instance.name, props.instance.savedOn, props.instance.filePath)
await props.plugin.call('udapp', 'addSavedInstance', objToSave.address, objToSave.abi, objToSave.name, objToSave.pinnedAt, objToSave.filePath)
_paq.push(['trackEvent', 'udapp', 'pinContracts', 'pinned'])
// Remove contract from deployed contracts list on UI
props.removeInstance(props.index, false, false)

Loading…
Cancel
Save