From de3b87bc0be9995b5b68bde57be2a61517648108 Mon Sep 17 00:00:00 2001 From: "David E. Perez Negron R." Date: Wed, 8 May 2024 19:15:25 -0600 Subject: [PATCH] Adding deployment scripts and README Update usage. --- README.md | 39 ++++++++++++++-- deploy.sh | 11 +++++ script/DeployedDappIndexer.s.sol | 65 ++++++++++++++++++++++++++ test/DappIndexer.t.sol.back | 80 -------------------------------- 4 files changed, 112 insertions(+), 83 deletions(-) create mode 100755 deploy.sh create mode 100644 script/DeployedDappIndexer.s.sol delete mode 100644 test/DappIndexer.t.sol.back diff --git a/README.md b/README.md index dc33141..fbe5b36 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ The goal is to use this as an alternative for ssl to web3 to verify its the corr - [x] Keep it as simple as posible. ## ToDo and wanted features: +- [ ] Integrate CIDStorage library to the Dapp Indexer smart contract - [ ] Create an event for metadata information about the CID. -- [ ] Support other type of hashes or structure storage - +- [ ] Support of the [CID Specification](https://github.com/multiformats/cid?tab=readme-ov-file) ## Usage @@ -41,11 +41,44 @@ $ forge snapshot $ anvil ``` +### Enviorment Variables + + ### Deploy +#### Option1: Deployment script (recommended) + ```shell -$ forge script script/Counter.s.sol:CounterScript --rpc-url --private-key +$ ./deploy.sh ``` +> IMPORTANT: verify .env information before executing the deployment script + +**verify by attaching the deployed contract test:** + +Once you deployed the contract with the previous script execution you can test +the correct smartcontract operations by running the `DeployedDappIndexer.s.sol` +script + +should set after deploying the smart contract in the .env named after +DAPPINDEXERADDRS, once you update the address you can run the following +script to verify it was deployed correctly. + +```shell +$source .env +$forge script script/DeployedDappIndexer.s.sol:DappIndexerScript --fork-url $PROVIDER_URL --private-key $PK0 --broadcast +``` +#### Option2: Script deployment and test +using the script follows diferent verifications first before deploying the +contract, more about it here. + +```shell +$source .env +$forge script script/DappIndexer.s.sol:DappIndexerScript --fork-url $PROVIDER_URL --private-key $PK0 --broadcast +``` +> where: +> PROVIDER_URL can be either the anvil fork or a blockchain RPC +> $PK0 + ### Cast diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..cb4595c --- /dev/null +++ b/deploy.sh @@ -0,0 +1,11 @@ +#!/bin/sh +. ./.env +forge create --rpc-url $PROVIDER_URL \ + --constructor-args $ACC0 $ACC0 \ + --private-key $PK0 \ + src/DappIndexer.sol:DappIndexer + +#forge create --rpc-url $PROVIDER_URL \ +# --constructor-args $ACC0 $ACC0 \ +# --private-key $PK0 \ +# src/CIDStorage.sol:CIDStorage diff --git a/script/DeployedDappIndexer.s.sol b/script/DeployedDappIndexer.s.sol new file mode 100644 index 0000000..7599732 --- /dev/null +++ b/script/DeployedDappIndexer.s.sol @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.23; + +import {Script, console2} from "forge-std/Script.sol"; +import { DappIndexer} from "src/DappIndexer.sol"; +import { CIDStorage } from "src/CIDStorage.sol"; + +contract DappIndexerScript is Script { + address public dappIndexerAddr; + address public CIDStorageAddr; + DappIndexer public dappIdxr; + string[] public dappsURI; + address public owner; + + function setUp() public { + dappIndexerAddr = vm.envAddress("DAPPINDEXERADDRS"); + dappsURI = vm.envString("dapps", ' '); + // Deployed contract must have Owner as ACC0) + owner = vm.envAddress("ACC0"); + } + + // run is the entry point + function run() public { + uint256 deployerPrivateKey = vm.envUint("PK0"); + // startBroadcast and stopBraodcast will let us execute transactions anything between them + vm.startBroadcast(deployerPrivateKey); + // connect to the DappIndexer already deployed address + dappIdxr = DappIndexer(dappIndexerAddr); + + console2.log("The Dapps Indexer contract address is: ", address(dappIdxr)); + + // Define a Dapp name + bytes32 dapp_name = bytes32("Dapp01"); + + // Define DappURI splited into two bytes32 CIDs + bytes32 CID1; + bytes32 CID2; + + (CID1, CID2) = CIDStorage.stringToBytes32Pair(dappsURI[0]); + + // Add Dapp + console2.log("-----Adding Dapp-----"); + console2.log("Dapp Name is:"); + console2.logBytes32(dapp_name); + console2.log("Bytes32 first:"); + console2.logBytes32(CID1); + console2.log("Bytes32 second:"); + console2.logBytes32(CID2); + console2.log(CIDStorage.bytes32PairToString(CID1, CID2)); + dappIdxr.addDapp(dapp_name, DappIndexer.PackedCID(CID1, CID2)); + + // retrive Dapp + console2.log("-----retriving Dapp-----"); + DappIndexer.PackedCID memory dapp1 = dappIdxr.getDapp(dapp_name); + console2.log("Bytes32 first:"); + console2.logBytes32(dapp1.CID1); + console2.log("Bytes32 second:"); + console2.logBytes32(dapp1.CID2); + + // reconstruct the CID and verify + console2.log(CIDStorage.bytes32PairToString(dapp1.CID1, dapp1.CID2)); + + vm.stopBroadcast(); + } +} diff --git a/test/DappIndexer.t.sol.back b/test/DappIndexer.t.sol.back deleted file mode 100644 index 76d25d2..0000000 --- a/test/DappIndexer.t.sol.back +++ /dev/null @@ -1,80 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.23; - -import { Test, console2 } from "forge-std/Test.sol"; -import { DappIndexer } from "src/DappIndexer.sol"; - -contract DappIndexerTest is Test { - DappIndexer public dappIdxr; - string[] public dappsURI; - - function setUp() public { - dappIdxr = new DappIndexer(address(this), address(this)); - dappsURI = vm.envString("dapps", ' '); - } - - function testAddDapp() public { - bytes32 CID1; - bytes32 CID2; - - //(CID1, CID2) = stringToBytes32Pair(dappsURI[0]); - string memory dapp= "bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa"; - (CID1, CID2) = stringToBytes32Pair(dapp); - - // Add Dapp - console2.log("Bytes32 first:"); - console2.logBytes32(CID1); - console2.log("Bytes32 second:"); - console2.logBytes32(CID2); - console2.log(Bytes32PairToString(CID1, CID2)); - dappIdxr.addDapp(bytes32("Dapp01"), DappIndexer.PackedCID(CID1, CID2)); - // retrive Dapp - DappIndexer.PackedCID memory dapp1 = dappIdxr.getCID(bytes32("Dapp01")); - assertEq(CID1, dapp1.CID1); - assertEq(CID2, dapp1.CID2); - assertEq(dappsURI[0], Bytes32PairToString(dapp1.CID1, dapp1.CID2)); - } - - function Bytes32PairToString(bytes32 part1, bytes32 part2) public pure returns (string memory) { - // Concatenate the two bytes32 variables - bytes memory concatenatedBytes = abi.encodePacked(part1, part2); - - // Convert the concatenated bytes to a string - string memory str = string(concatenatedBytes); - - return str; - } - - function stringToBytes32Pair(string memory source) public pure returns (bytes32 part1, bytes32 part2) { - bytes memory sourceBytes = bytes(source); - require(sourceBytes.length == 59, "Source string must be 59 bytes"); - - assembly { - // Load the first 32 bytes of the string data - part1 := mload(add(sourceBytes, 32)) - // Load the next 32 bytes of the string data, then shift right by 3 bytes (24 bits) to remove unwanted bytes - part2 := mload(add(sourceBytes, 64)) - part2 := shl(24, part2) // Shift left to remove the last 5 bytes - part2 := shr(24, part2) // Shift right to align back to the least significant bits - } - } - //function stringToBytes32Pair(string memory source) public pure returns (bytes32 part1, bytes32 part2) { - // bytes memory sourceBytes = bytes(source); - // require(sourceBytes.length == 59, "URI string must equal to 59 bytes"); - - // assembly { - // // Load the first 32 bytes of the string data - // part1 := mload(add(sourceBytes, 32)) - // // Load the second 32 bytes of the string data - // part2 := mload(add(sourceBytes, 58)) - // } - //} -} -// function stringToBytes32Pair(string calldata str) external pure returns(bytes32 part1, bytes32 part2) { -// bytes memory sourceBytes = bytes(str); -// require(sourceBytes.length == 59, "Source string must be 59 bytes"); -// part1 = bytes(str[0:32]); -// part2 = bytes(str[32:59]); -// -// return (part1, part2); -// }