Upload metadata on setMetadata

This commit is contained in:
Lyubomir Kiprov 2019-05-08 15:45:17 +03:00
parent 7042d99fa8
commit d8359163c2
4 changed files with 57 additions and 41 deletions

View File

@ -8,13 +8,29 @@ const checkIPFSAvailability = async () => {
}
}
export const uploadMetadata = async metadata => {
const uploadImage = async base64Image => {
const imageFile = [
{
files: [helpers.base64ToBlob(base64Image)],
},
]
return EmbarkJSService.Storage.uploadFile(imageFile)
}
const uploadMetadata = async metadata => {
const hash = await EmbarkJSService.Storage.saveText(metadata)
return helpers.getBytes32FromIpfsHash(hash)
}
export const uploadDAppMetadata = async metadata => {
try {
await checkIPFSAvailability()
const hash = await EmbarkJSService.Storage.saveText(metadata)
const metadataInBytes = helpers.getBytes32FromIpfsHash(hash)
return metadataInBytes
metadata.image = await uploadImage(metadata.image)
const uploadedMetadataHash = await uploadMetadata(JSON.stringify(metadata))
return uploadedMetadataHash
} catch (error) {
throw new Error(
`Uploading DApp metadata to IPFS failed. Details: ${error.message}`,
@ -22,31 +38,21 @@ export const uploadMetadata = async metadata => {
}
}
export const uploadImage = async base64Image => {
try {
await checkIPFSAvailability()
const imageFile = [
{
files: [helpers.base64ToBlob(base64Image)],
},
]
const hash = await EmbarkJSService.Storage.uploadFile(imageFile)
return hash
} catch (error) {
throw new Error(
`Uploading DApp image to IPFS failed. Details: ${error.message}`,
)
}
const retrieveMetadata = async metadataBytes32 => {
const metadataHash = helpers.getIpfsHashFromBytes32(metadataBytes32)
return EmbarkJSService.Storage.get(metadataHash)
}
export const retrieveMetadata = async metadataBytes32 => {
const retrieveImageUrl = async imageHash => {
return EmbarkJSService.Storage.getUrl(imageHash)
}
export const retrieveDAppMetadataByHash = async metadataBytes32 => {
try {
await checkIPFSAvailability()
const metadataHash = helpers.getIpfsHashFromBytes32(metadataBytes32)
const metadata = await EmbarkJSService.Storage.get(metadataHash)
const metadata = JSON.parse(await retrieveMetadata(metadataBytes32))
metadata.image = await retrieveImageUrl(metadata.image)
return metadata
} catch (error) {
@ -55,8 +61,3 @@ export const retrieveMetadata = async metadataBytes32 => {
)
}
}
export const retrieveImageUrl = async imageHash => {
await checkIPFSAvailability()
return EmbarkJSService.Storage.getUrl(imageHash)
}

View File

@ -54,9 +54,7 @@ class DiscoverService extends BlockchainService {
const dapp = await this.getDAppById(id)
try {
dapp.metadata = JSON.parse(await ipfsSDK.retrieveMetadata(dapp.metadata))
dapp.metadata.image = await ipfsSDK.retrieveImageUrl(dapp.metadata.image)
dapp.metadata = await ipfsSDK.retrieveDAppMetadataByHash(dapp.metadata)
return dapp
} catch (error) {
throw new Error('Error fetching correct data from IPFS')
@ -78,10 +76,7 @@ class DiscoverService extends BlockchainService {
await this.validator.validateDAppCreation(dappId, amount)
dappMetadata.image = await ipfsSDK.uploadImage(dappMetadata.image)
const uploadedMetadata = await ipfsSDK.uploadMetadata(
JSON.stringify(dappMetadata),
)
const uploadedMetadata = await ipfsSDK.uploadDAppMetadata(dappMetadata)
const callData = DiscoverContract.methods
.createDApp(dappId, amount, uploadedMetadata)
@ -132,14 +127,16 @@ class DiscoverService extends BlockchainService {
}
}
// Todo: Should we upload the metadata to IPFS
async setMetadata(id, metadata) {
await super.__unlockServiceAccount()
await this.validator.validateMetadataSet(id)
const dappMetadata = JSON.parse(JSON.stringify(metadata))
const uploadedMetadata = await ipfsSDK.uploadDAppMetadata(dappMetadata)
try {
return broadcastContractFn(
DiscoverContract.methods.setMetadata(id, metadata).send,
DiscoverContract.methods.setMetadata(id, uploadedMetadata).send,
this.sharedContext.account,
)
} catch (error) {

View File

@ -67,7 +67,7 @@ class DiscoverValidator {
async validateMetadataSet(id) {
const dapp = await this.service.getDAppById(id)
if (dapp.developer != this.service.sharedContext.account) {
if (dapp.developer.toLowerCase() != this.service.sharedContext.account) {
throw new Error('Only the developer can update the metadata')
}
}

View File

@ -58,8 +58,19 @@ class Example extends React.Component {
return getResult('downVoteCost', [id])
}
async setMetadata(id) {
DAPP_DATA.category = 'updated'
return getResult('setMetadata', [id, DAPP_DATA])
}
async logDiscoverMethods() {
const createdDApp = await this.createDApp()
const dappData = await this.getFullDApp(createdDApp.id)
console.log(`Created DApp : ${JSON.stringify(dappData)}`)
document.getElementById('testImage').src = dappData.metadata.image
const downVote = await this.downVoteCost(createdDApp.id)
console.log(
`Downvote TX Hash : ${await this.downvote(createdDApp.id, downVote.c)}`,
@ -72,8 +83,15 @@ class Example extends React.Component {
console.log(
`DownVoteCost Result : ${await this.downVoteCost(createdDApp.id)}`,
)
const dappData = await this.getFullDApp(createdDApp.id)
document.getElementById('testImage').src = dappData.metadata.image
console.log(
`Set metadata TX Hash : ${await this.setMetadata(createdDApp.id)}`,
)
console.log(
`Updated DApp : ${JSON.stringify(
await this.getFullDApp(createdDApp.id),
)}`,
)
}
render() {