This is a web3.js plugin for uploading a provided local file to IPFS, and listing all stored CIDs of given ethereum address.
yarn add web3-plugin-ipfsWhen adding the web3 package to your project:
npm i -S web3yarn add web3
After importing IpfsPlugin from web3-plugin-ipfs and Web3 from web3, register an instance of IpfsPlugin with an instance of Web3 like so:
import { Web3 } from 'web3';
import { IpfsPlugin } from './index';
const web3 = new Web3('YOUR_PROVIDER_URL');
web3.registerPlugin(new IpfsPlugin('YOUR_IPFS_URL'));More information about registering web3.js plugins can be found here.
uploadFile, is responsible for uploading a file to the IPFS (InterPlanetary File System) and storing the resulting Content Identifier (CID) in a Smart Contract on the blockchain
async uploadFile(path: PathLike, ownerAddress: Address): Promise<void> {
const content = fs.readFileSync(path);
const ipfs = create({ url: this.urlIpfs });
const { cid } = await ipfs.add(content);
const contract = new Contract(abi, contractAddress);
// Adds Web3Context to Contract instance
contract.link(this);
await contract.methods.store(cid.toString()).send({ from: ownerAddress });
}It takes two parameters path the local file path PathLike of the file you want to upload to IPFS and
ownerAddress the Ethereum address of the owner who is initiating the file upload.
The function reads the content of the file located at the specified path using fs.readFileSync(path).
It then creates an IPFS instance using the IPFS HTTP API endpoint specified by the user.
The file content is added to IPFS using the ipfs.add(content) method. This operation returns a CID, which represents the unique identifier of the uploaded file. A contract instance is created using a provided ABI and contract address. This contract instance is associated with a Web3Context, allowing interaction with the blockchain. The Smart Contract's store method is invoked with CID as an argument.
The send method is called to send the transaction to the Smart Contract.
Below, you'll find an example of how to utilize this method:
import { Web3 } from 'web3';
import { IpfsPlugin } from './index';
const web3 = new Web3('YOUR_PROVIDER_URL');
web3.registerPlugin(new IpfsPlugin('YOUR_IPFS_URL'));
web3.ipfs.uploadFile('FILE_PATH', 'OWNER_ADDRESS').then(console.log);listEvents is used to retrieve and list events from a Smart Contract on the blockchain.
async listEvents(address: Address): Promise<(string | EventLog)[]> {
const contract = new Contract(abi, contractAddress);
// Adds Web3Context to Contract instance
contract.link(this);
const result = await contract.getPastEvents('CIDStored', {
filter: {
owner: address,
},
fromBlock: 4630236,
toBlock: 'latest',
});
// Prints all CIDStored events from contract to the console
console.log('CIDStored', result);
return result;
}The uploadFile method, takes an address as a parameter, which is expected to be an Ethereum address.
Inside the function, a Contract instance is created using a provided ABI and contract address. This contract instance is associated with a Web3Context, which allows for interaction with the blockchain.
The function then calls the getPastEvents method on the contract instance to retrieve events with the event name CIDStored that meet certain criteria. These criteria include filtering events where the 'owner' field matches the provided address.
Below, you'll find an example of how to utilize this method:
import { Web3 } from 'web3';
import { IpfsPlugin } from './index';
const web3 = new Web3('YOUR_PROVIDER_URL');
web3.registerPlugin(new IpfsPlugin('YOUR_IPFS_URL'));
web3.ipfs.listEvents('ADDRESS');.then(console.log);