dapp_indexer/script/DappIndexer.s.sol

82 lines
2.8 KiB
Solidity

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.23;
import {Script, console2} from "forge-std/Script.sol";
import { DappIndexer} from "src/DappIndexer.sol";
contract DappIndexerScript is Script {
DappIndexer public dappIdxr;
string[] public dappsURI;
address public owner;
function setUp() public {
dappsURI = vm.envString("dapps", ' ');
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);
// here we just need to deploy a new contractc
dappIdxr = new DappIndexer(owner, owner);
console2.log("The Dapps Indexer contract address is: ", address(dappIdxr));
bytes32 CID1;
bytes32 CID2;
(CID1, CID2) = stringToBytes32Pair(dappsURI[0]);
// Add Dapp
console2.log("-----Adding Dapp-----");
console2.log("Dapp Name is:");
console2.logBytes32(bytes32("Dapp01"));
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
console2.log("-----retriving Dapp-----");
DappIndexer.PackedCID memory dapp1 = dappIdxr.getDapp(bytes32("Dapp01"));
console2.log("Bytes32 first:");
console2.logBytes32(dapp1.CID1);
console2.log("Bytes32 second:");
console2.logBytes32(dapp1.CID2);
console2.log(Bytes32PairToString(dapp1.CID1, dapp1.CID2));
vm.stopBroadcast();
}
function Bytes32PairToString(bytes32 part1, bytes32 part2) public pure returns (string memory) {
// Concatenate the two bytes32 variables
bytes memory concatenatedBytes = abi.encodePacked(part1, part2);
// Truncate the concatenated bytes to 59 bytes
bytes memory truncatedBytes = new bytes(59);
for (uint i = 0; i < 59; i++) {
truncatedBytes[i] = concatenatedBytes[i];
}
// Convert the truncated bytes to a string
string memory str = string(truncatedBytes);
return str;
}
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, 64))
}
}
}