Merge pull request 'develop' (#2) from DECA/DECANFT-SC:develop into develop
Reviewed-on: p1r0/DECANFT-SC#2
This commit is contained in:
commit
10b497dfbd
|
@ -79,6 +79,10 @@ URI Data structure:
|
||||||
- [x] Smart Contract Creating ERC721
|
- [x] Smart Contract Creating ERC721
|
||||||
- [ ] Properties and registry of CCTokens (Research)
|
- [ ] Properties and registry of CCTokens (Research)
|
||||||
- [ ] Basic ERC721 Test Script
|
- [ ] Basic ERC721 Test Script
|
||||||
|
- [ ] Add NFTs and IPFS Gateway from .env
|
||||||
|
- [x] Basic ERC721 tests
|
||||||
|
- [x] Test enumerable
|
||||||
|
- [ ] Document .env Structure
|
||||||
- [ ] Auction Contract ( Owner of ERC721 )
|
- [ ] Auction Contract ( Owner of ERC721 )
|
||||||
- [ ] Random GiveAway Function
|
- [ ] Random GiveAway Function
|
||||||
- [ ] Giveaway Function (testing)
|
- [ ] Giveaway Function (testing)
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
// SPDX-License-Identifier: UNLICENSED
|
|
||||||
pragma solidity ^0.8.13;
|
|
||||||
|
|
||||||
import {Script, console2} from "forge-std/Script.sol";
|
|
||||||
|
|
||||||
contract CounterScript is Script {
|
|
||||||
function setUp() public {}
|
|
||||||
|
|
||||||
function run() public {
|
|
||||||
vm.broadcast();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,14 +1,21 @@
|
||||||
// SPDX-License-Identifier: UNLICENSED
|
// SPDX-License-Identifier: UNLICENSED
|
||||||
pragma solidity ^0.8.13;
|
pragma solidity ^0.8.13;
|
||||||
|
|
||||||
import "forge-std/Script.sol";
|
import {Script, console2} from "forge-std/Script.sol";
|
||||||
import { DCO2s } from "src/DCO2s.sol";
|
import { DCO2s } from "src/DCO2s.sol";
|
||||||
|
|
||||||
contract DCO2sScript is Script {
|
contract DCO2sScript is Script {
|
||||||
DCO2s public dco2sc;
|
DCO2s public dco2sc;
|
||||||
|
string public baseURI;
|
||||||
|
|
||||||
function setUp() public {
|
function setUp() public {
|
||||||
dco2sc = new DCO2s(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266, 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266, "DCO2s", "DCO2");
|
baseURI = "https://gateway.decentralizedscience.org/ipfs/";
|
||||||
|
dco2sc = new DCO2s(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266,
|
||||||
|
0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266,
|
||||||
|
baseURI,
|
||||||
|
"DCO2s",
|
||||||
|
"DCO2");
|
||||||
|
console2.log("The DCO2s contract address is: ", address(dco2sc));
|
||||||
}
|
}
|
||||||
|
|
||||||
// run is the entry point
|
// run is the entry point
|
||||||
|
@ -19,7 +26,7 @@ contract DCO2sScript is Script {
|
||||||
string memory URI = "bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa";
|
string memory URI = "bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa";
|
||||||
dco2sc.safeMint(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266, URI);
|
dco2sc.safeMint(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266, URI);
|
||||||
string memory tokenURI = dco2sc.tokenURI(0);
|
string memory tokenURI = dco2sc.tokenURI(0);
|
||||||
console.log(tokenURI);
|
console2.log("Token0 URI is:", tokenURI);
|
||||||
vm.stopBroadcast();
|
vm.stopBroadcast();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
61
src/AA.sol
61
src/AA.sol
|
@ -6,10 +6,67 @@ import { DCO2s } from "./DCO2s.sol";
|
||||||
|
|
||||||
contract AA is Ownable {
|
contract AA is Ownable {
|
||||||
DCO2s public dco2sc;
|
DCO2s public dco2sc;
|
||||||
|
string[] nfts;
|
||||||
|
|
||||||
constructor(string memory name, string memory symbol) Ownable(msg.sender) {
|
mapping (address => bool) public airdropped;
|
||||||
dco2sc = new DCO2s(address(this),address(this), name, symbol);
|
address[] public allowed;
|
||||||
|
|
||||||
|
constructor(string memory name,
|
||||||
|
string memory symbol,
|
||||||
|
string memory baseURI,
|
||||||
|
string [] memory nftURIs
|
||||||
|
) Ownable(msg.sender) {
|
||||||
|
dco2sc = new DCO2s(address(this),address(this), baseURI, name, symbol);
|
||||||
|
nfts = nftURIs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Auction Logic
|
||||||
|
// modifier to start and finish auction
|
||||||
|
// ToDo Check blockchain bid example
|
||||||
|
// function bid and lock tokens
|
||||||
|
// function cashback
|
||||||
|
|
||||||
|
// Mint Function
|
||||||
|
// Simplify
|
||||||
|
function _mint(address to, string memory uri) public onlyOwner {
|
||||||
|
dco2sc.safeMint(to, uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @notice Random giveaway function
|
||||||
|
function airdrop() public {
|
||||||
|
//require(eligible(msg.sender));
|
||||||
|
require(!airdropped[msg.sender], "address already airdropped");
|
||||||
|
// top 20 is for Auction
|
||||||
|
uint256 randomURI = getRandomNumber() % nfts.length - 20;
|
||||||
|
dco2sc.safeMint(msg.sender, nfts[randomURI]);
|
||||||
|
// Require remove the URI so that is not mintable again
|
||||||
|
airdropped[msg.sender] = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// @eligible
|
||||||
|
function eligible(address to) public view returns (bool winner) {
|
||||||
|
// require( callable until specific date)
|
||||||
|
// Activity
|
||||||
|
// Longest Holders
|
||||||
|
// Top Holders
|
||||||
|
// or Allowed Wallets()
|
||||||
|
}
|
||||||
|
|
||||||
|
// @notice allowed addresses that supports DECA
|
||||||
|
function allow(address supporter) public onlyOwner {
|
||||||
|
//require(eligible(supporter));
|
||||||
|
require(!airdropped[supporter], "address already airdropped");
|
||||||
|
allowed.push(supporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// @notice Returns a randon number calculated from previews block randao
|
||||||
|
// @dev This only works after the merge
|
||||||
|
function getRandomNumber() public view returns (uint randomNumber) {
|
||||||
|
randomNumber = block.prevrandao;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
// SPDX-License-Identifier: UNLICENSED
|
|
||||||
pragma solidity ^0.8.13;
|
|
||||||
|
|
||||||
contract Counter {
|
|
||||||
uint256 public number;
|
|
||||||
|
|
||||||
function setNumber(uint256 newNumber) public {
|
|
||||||
number = newNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
function increment() public {
|
|
||||||
number++;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -10,18 +10,21 @@ import "@openzeppelin/contracts/access/AccessControl.sol";
|
||||||
contract DCO2s is ERC721, ERC721Enumerable, ERC721URIStorage, AccessControl {
|
contract DCO2s is ERC721, ERC721Enumerable, ERC721URIStorage, AccessControl {
|
||||||
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
|
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
|
||||||
uint256 private _nextTokenId;
|
uint256 private _nextTokenId;
|
||||||
|
string bURI;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
address defaultAdmin,
|
address defaultAdmin,
|
||||||
address minter,
|
address minter,
|
||||||
|
string memory baseURI,
|
||||||
string memory name, string memory symbol)
|
string memory name, string memory symbol)
|
||||||
ERC721(name, symbol) {
|
ERC721(name, symbol) {
|
||||||
_grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);
|
_grantRole(DEFAULT_ADMIN_ROLE, defaultAdmin);
|
||||||
_grantRole(MINTER_ROLE, minter);
|
_grantRole(MINTER_ROLE, minter);
|
||||||
|
bURI = baseURI;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _baseURI() internal pure override returns (string memory) {
|
function _baseURI() internal view override returns (string memory) {
|
||||||
return "https://gateway.decentralizedscience.org/ipfs/";
|
return bURI;
|
||||||
}
|
}
|
||||||
|
|
||||||
function safeMint(address to, string memory uri) public onlyRole(MINTER_ROLE) {
|
function safeMint(address to, string memory uri) public onlyRole(MINTER_ROLE) {
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
// SPDX-License-Identifier: UNLICENSED
|
||||||
|
pragma solidity ^0.8.23;
|
||||||
|
|
||||||
|
import {Test, console} from "forge-std/Test.sol";
|
||||||
|
import {AA} from "../src/AA.sol";
|
||||||
|
//import {nfts} from "../.env";
|
||||||
|
|
||||||
|
contract AATest is Test {
|
||||||
|
AA public aaContract;
|
||||||
|
string public baseURI;
|
||||||
|
string[] public nfts;
|
||||||
|
|
||||||
|
function setUp() public {
|
||||||
|
baseURI = "https://gateway.decentralizedscience.org/ipfs/";
|
||||||
|
// Import nfts array from .env and split by ' '
|
||||||
|
nfts = vm.envString("nfts", ' ');
|
||||||
|
aaContract = new AA("DCO2s", "DCO2", baseURI, nfts);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @notice this code safe mints an NFT to address 0x1
|
||||||
|
function testMint() public {
|
||||||
|
address to = address(0x1);
|
||||||
|
aaContract._mint(to,nfts[0]);
|
||||||
|
console.log("hola");
|
||||||
|
//assertEq(aaContract.ownerOf(0), to, "Token should be minted to specified address.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// @notice: here we test getting the Base and full URIS
|
||||||
|
//function testGetURI68() public {
|
||||||
|
// aaContract._mint(address(0x1), nfts[68]);
|
||||||
|
// string memory tokenURI = aaContract.tokenURI(0);
|
||||||
|
// console.log(tokenURI);
|
||||||
|
// assertEq(tokenURI, string.concat(baseURI, nfts[68]));
|
||||||
|
//}
|
||||||
|
}
|
|
@ -1,24 +0,0 @@
|
||||||
// SPDX-License-Identifier: UNLICENSED
|
|
||||||
pragma solidity ^0.8.13;
|
|
||||||
|
|
||||||
import {Test, console2} from "forge-std/Test.sol";
|
|
||||||
import {Counter} from "../src/Counter.sol";
|
|
||||||
|
|
||||||
contract CounterTest is Test {
|
|
||||||
Counter public counter;
|
|
||||||
|
|
||||||
function setUp() public {
|
|
||||||
counter = new Counter();
|
|
||||||
counter.setNumber(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function test_Increment() public {
|
|
||||||
counter.increment();
|
|
||||||
assertEq(counter.number(), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
function testFuzz_SetNumber(uint256 x) public {
|
|
||||||
counter.setNumber(x);
|
|
||||||
assertEq(counter.number(), x);
|
|
||||||
}
|
|
||||||
}
|
|
254
test/DCO2s.t.sol
254
test/DCO2s.t.sol
|
@ -3,129 +3,209 @@ pragma solidity ^0.8.23;
|
||||||
|
|
||||||
import {Test, console} from "forge-std/Test.sol";
|
import {Test, console} from "forge-std/Test.sol";
|
||||||
import {DCO2s} from "../src/DCO2s.sol";
|
import {DCO2s} from "../src/DCO2s.sol";
|
||||||
|
//import {nfts} from "../.env";
|
||||||
|
|
||||||
contract DCO2sTest is Test {
|
contract DCO2sTest is Test {
|
||||||
DCO2s public dco2sc;
|
DCO2s public dco2sc;
|
||||||
|
string public baseURI;
|
||||||
|
string[] public nfts;
|
||||||
|
|
||||||
function setUp() public {
|
function setUp() public {
|
||||||
dco2sc = new DCO2s(address(this), address(this), "DCO2s", "DCO2");
|
baseURI = "https://gateway.decentralizedscience.org/ipfs/";
|
||||||
|
dco2sc = new DCO2s(address(this), address(this), baseURI, "DCO2s", "DCO2");
|
||||||
|
// Import nfts array from .env and split by ' '
|
||||||
|
nfts = vm.envString("nfts", ' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
// @notice this code safe mints an NFT to address 0x1
|
// @notice this code safe mints an NFT to address 0x1
|
||||||
function testMint() public {
|
function testMint() public {
|
||||||
address to = address(0x1);
|
address to = address(0x1);
|
||||||
dco2sc.safeMint(to,"bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa");
|
dco2sc.safeMint(to,nfts[0]);
|
||||||
assertEq(dco2sc.ownerOf(0), to, "Token should be minted to specified address.");
|
assertEq(dco2sc.ownerOf(0), to, "Token should be minted to specified address.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// @notice: here we test getting the Base and full URIS
|
// @notice: here we test getting the Base and full URIS
|
||||||
function testGetURI() public {
|
function testGetURI68() public {
|
||||||
string memory _baseURL = "https://gateway.decentralizedscience.org/ipfs/";
|
dco2sc.safeMint(address(0x1), nfts[68]);
|
||||||
string memory URI = "bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa";
|
|
||||||
dco2sc.safeMint(address(1), URI);
|
|
||||||
string memory tokenURI = dco2sc.tokenURI(0);
|
string memory tokenURI = dco2sc.tokenURI(0);
|
||||||
console.log(tokenURI);
|
//console.log(tokenURI);
|
||||||
assertEq(tokenURI, string.concat(_baseURL,URI));
|
assertEq(tokenURI, string.concat(baseURI, nfts[68]));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// @notice: checkFailed token Index
|
// @notice: checkFailed token Index
|
||||||
function testFailTokenIndex() public {
|
function testFailTokenIndex() view public {
|
||||||
dco2sc.tokenURI(0);
|
dco2sc.tokenURI(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Todo How to verify bytes message error
|
||||||
// @notice: checkFailed token Index
|
// @notice: checkFailed token Index
|
||||||
//function testTokenIndex() public {
|
//function testTokenIndex() public {
|
||||||
// vm.expectRevert(bytes("ERC721NonexistentToken(0)"));
|
// vm.expectRevert(bytes("ERC721NonexistentToken(0)"));
|
||||||
// dco2sc.tokenURI(0);
|
// dco2sc.tokenURI(0);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
// @notice use the basic Enumerable properties
|
// @notice use basic Enumerable properties totalSupply
|
||||||
// function testEnumerable() public {}
|
// Find a more efficient way mintedNFTs = nfts[:5];?
|
||||||
|
function testEnumerableTotalSupply() public {
|
||||||
|
string[5] memory mintedNFTs;
|
||||||
|
|
||||||
|
for(uint i = 0; i < 5; i++){
|
||||||
|
mintedNFTs[i] = nfts[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// mint 5 nfts
|
||||||
|
for(uint i = 0; i < mintedNFTs.length; i++){
|
||||||
|
dco2sc.safeMint(address(1), mintedNFTs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEq(mintedNFTs.length, dco2sc.totalSupply());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// @notice use the basic Enumerable property tokenByIndex
|
||||||
|
function testEnumerableTokenByIndex() public {
|
||||||
|
string[5] memory nftsSlice;
|
||||||
|
|
||||||
|
for(uint i = 0; i < 5; i++){
|
||||||
|
nftsSlice[i] = nfts[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
for(uint i; i < nftsSlice.length; i++){
|
||||||
|
dco2sc.safeMint(address(1), nftsSlice[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEq(nftsSlice.length, dco2sc.totalSupply());
|
||||||
|
|
||||||
|
// Test for token By Index 4
|
||||||
|
uint tokenID = dco2sc.tokenByIndex(4);
|
||||||
|
assertEq(nftsSlice[4], nftsSlice[tokenID]);
|
||||||
|
|
||||||
|
// Test for token By Index 3
|
||||||
|
tokenID = dco2sc.tokenByIndex(3);
|
||||||
|
assertEq(nftsSlice[3], nftsSlice[tokenID]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @notice use the basic Enumerable property TokenOfOwnerByIndex
|
||||||
|
function testEnumerableTokenOfOwnerByIndex() public {
|
||||||
|
string[5] memory nftsSlice;
|
||||||
|
|
||||||
|
for(uint i = 0; i < 5; i++){
|
||||||
|
nftsSlice[i] = nfts[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
for(uint i; i < nftsSlice.length; i++){
|
||||||
|
if(i % 2 == 0) {
|
||||||
|
dco2sc.safeMint(address(1), nftsSlice[i]);
|
||||||
|
} else {
|
||||||
|
dco2sc.safeMint(address(2), nftsSlice[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the balance of NFTs of the account 1
|
||||||
|
uint account1_balance = dco2sc.balanceOf(address(1));
|
||||||
|
assertEq(account1_balance, 3);
|
||||||
|
|
||||||
|
for(uint i; i < account1_balance; i++){
|
||||||
|
// get the TokenID from account NFTs Index
|
||||||
|
uint token_id = dco2sc.tokenOfOwnerByIndex(address(1), i);
|
||||||
|
// console.log("Token ID ", token_id, " has URI: ", dco2sc.tokenURI(token_id));
|
||||||
|
assertEq(dco2sc.tokenURI(token_id), string.concat(baseURI, nftsSlice[token_id]));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// @notice: testFailMintToZeroAddress test that cannot safe mint to address 0
|
// @notice: testFailMintToZeroAddress test that cannot safe mint to address 0
|
||||||
function testFailMintToZeroAddress() public {
|
function testFailMintToZeroAddress() public {
|
||||||
dco2sc.safeMint(address(0),"bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa");
|
dco2sc.safeMint(address(0), nfts[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @notice testMintAll mints all the NFTs URIS and distribute to wallets
|
// // @notice testMintAll mints all the NFTs URIS and distribute to wallets
|
||||||
// then it assertEq that it is properly minted to the wallet and the correct URI
|
// // then it assertEq that it is properly minted to the wallet and the correct URI
|
||||||
// function testMintAll() public {
|
// function testMintAll() public {
|
||||||
// string[68] memory NFts = ["bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa",
|
// string[68] memory mintedNFTs;
|
||||||
// "bafkreidcf5baqb5wevs6avyd7dtd3j7rzrq65uyqasj4dbkcy6na4ig3ay",
|
|
||||||
// "bafkreibffiehtv4ntajq5vjwpl7q44i6cjbg54lm5hkoa665ue2taspiyu",
|
|
||||||
// "bafkreifqztiwfutjik4wfs3gyfdyrff7cugi4mcctluunrrbp5cgareisq",
|
|
||||||
// "bafkreiglyvpxwrxdvruit3oiw2lvkxqqxn7ojquw4gl7ck6szewz6t6cam",
|
|
||||||
// "bafkreiakd4xtuw3toe4wnez2ndmdadqv3oszaoffoha4tw2hqr3sjnsmge",
|
|
||||||
// "bafkreigx2isd63yflf6toeg7nfqw33hf6vvllcxfnzn7ymd7u4okflivbi",
|
|
||||||
// "bafkreidrsjlcajbz35crgs6dpog6ophcochrgrrqgejxfye4m6lbw5mdde",
|
|
||||||
// "bafkreihwi7xoak3p3mmofdln4pc4wqkkbdwyyz2yxbpfvpzvvxa2ogbaxi",
|
|
||||||
// "bafkreiclhcy3n5iq3ka2jwxhvedpdewonwoujgu77y7rgnkddheioemcsi",
|
|
||||||
// "bafkreic3vdshhst65qtzkwfbqzfpmuqbsyizxguarixobrp3scwaiq5jre",
|
|
||||||
// "bafkreifv5xyis2kuveyfoc662zxeol2zdyiue4h3sznosef7ihrsmjexwm",
|
|
||||||
// "bafkreifqyk6255h2ppobog33fzifsosbcnn2tanqi3ezjcwis6gya4sfoi",
|
|
||||||
// "bafkreigend4j42oanbjxltwuyizmufdhqbngf6fbe5hgnlxs3yhzgpvay4",
|
|
||||||
// "bafkreiextgvmtg23rx3lq2s6psebqln6ojlgosc544jch72baq3yt3dryu",
|
|
||||||
// "bafkreihlkfwt5ntpnwf3c37d4lsf4y6czxojyffqet5ujvzw374x7ainoi",
|
|
||||||
// "bafkreievuhvdru7p3lxht3of67xdri6urrrsjxr2e6rzulwg2574ye3dji",
|
|
||||||
// "bafkreidqa6xuekp34iu7cqmngdbe7knzia47s7gwn3zczr5vwso57nrtx4",
|
|
||||||
// "bafkreiglo5jhcem4ogswylqi37bx2wmn65cy6blwbwxcvuzklpfr6vhmke",
|
|
||||||
// "bafkreibz353bqq76gjvswt7eebyffi3nkke5bzrvsjzem3is6x4ptpnqvi",
|
|
||||||
// "bafkreif2dohcblqea4t4z5qjfxtdzz6vmtxs4325yuf6jz6e2sdxf366ni",
|
|
||||||
// "bafkreib265gzsjgprktabq4c3glrdl5noebegibwupchwuwbswohum3ap4",
|
|
||||||
// "bafkreicfaqdpgnrnebvqxyvg7s7eqgipbw5bg3hdticvghcpivjmvjx364",
|
|
||||||
// "bafkreiabmontlvf2ah3vngpaf3cmg5ejinyqe6yl5pcl4lfrtvduwnuqcq",
|
|
||||||
// "bafkreidvyf5txqmcizexdexdaqsbr4fxclcpfn6npgkngm6rclaszjll4q",
|
|
||||||
// "bafkreib4wysvkug2bbzfpuey7hazqkezqtstv2n3yzccw7z77n2urcb6ye",
|
|
||||||
// "bafkreiailtryy3cg7anain2evahiaox6babpxd4dp4kl67jqeoabh6ndwi",
|
|
||||||
// "bafkreid32knw3kptbognoamqxcu5a2r3hzlzcb5a4tbouzfob5j2hhww6y",
|
|
||||||
// "bafkreifprm74saobjxnang72smgtrevwvsxyps46kbc6ehhk3veqqpprte",
|
|
||||||
// "bafkreif6wbrqmlqihivdasweh5opjjixinupsqfqmyflo2he3tdibx26mq",
|
|
||||||
// "bafkreig75yruw2hkfqdfhmjm7lfenojvgv6emxfgkwolajhnjsokcc3vv4",
|
|
||||||
// "bafkreihxvojrjrzigupwtncsrwsswju4cwh2sz5z2evqt6qlgcd7siptqi",
|
|
||||||
// "bafkreifmcjsvyou6ml6khq7d7iglchh4a4clqvzf7t4ky6sxyoml6ixvj4",
|
|
||||||
// "bafkreieyrrsp4lgoqqfrynp64cdif2jrnnzwc3lv4j5wlm4glszhjltp24",
|
|
||||||
// "bafkreicpw7ytfbzakmg23wkuhrpumcdtoh75po7j6fu627vru3hgl6kpay",
|
|
||||||
// "bafkreifrdsfw2vazhleexjkcd6f6t73aqvrobq5nwyeqa2rmykqtsef2o4",
|
|
||||||
// "bafkreicdmr2bet7omb3u5zrgvubq2nxwbzlo6kqkjy6swey4u5yavqsf3y",
|
|
||||||
// "bafkreihupkyebtf3rybziatp7p242gbyza7rf7s6noj3wun6fwd2sr6qhq",
|
|
||||||
// "bafkreibrlybbkiiutohvwj3q6j3drs7llaxliz7dhiflipq34e4guzcbhu",
|
|
||||||
// "bafkreieuseajoxy4ouo2u2upxz7lssoivcb63r64ada6n6pbxtupwnp6fa",
|
|
||||||
// "bafkreid53wwrea4erd5hm7gjgkgpp6oddjqnctffewf3nay2grs2nhmh5y",
|
|
||||||
// "bafkreigzrzugp7aqn6u6yqyaeu7v5lou4ldvkc5gfstr3p3otaf4afg56y",
|
|
||||||
// "bafkreibqdmemeh57bkszki7oypxelqlihuy26eaeoi664epsqr5543q3je",
|
|
||||||
// "bafkreiga4wd7vxjn46eovsktpmg2ugrd545sckdu2ibytvyjmj44rxjo5a",
|
|
||||||
// "bafkreibef52rjpwrhfoaewbb4x7w5nthexsxzanoh5g7l3wzikubw6t4j4",
|
|
||||||
// "bafkreihbkxbmbxk5xcujr3vwoo3qnnkubqmrkytjml76f2be4rfdi3kwiy",
|
|
||||||
// "bafkreibh5fgjwuzcnyrpdcyxzpcjndrppeelgrjccfq2s7jg52dvcmk4cy",
|
|
||||||
// "bafkreiea7k7u6kq76a4zysht5ri62jabvbuf6uk2emptxua2lkfmpleqqu",
|
|
||||||
// "bafkreibietep53mtdq5kpk442x5djcaiwkirgltemomaaa6in6j375agfe",
|
|
||||||
// "bafkreifwho3vue5x3yus3bcl2vs46b2ehgnhokmk4363dyptcqkcjuwtwm",
|
|
||||||
// "bafkreicb662izefhwuvv7u6yh4rav76od4r4nkm6h7mgkflb77bt5wkimm",
|
|
||||||
// "bafkreihlls4pkcjtjaasxmvctafrslucawm5lrffz5ho57azdaiapo2evq",
|
|
||||||
// "bafkreih4ncyemyptx3nxe5qvxn6keiv7m36avhg5t2z6uvohs22he6q5zi",
|
|
||||||
// "bafkreibxx4deq65og67be3oliqz2u4j6tacczarf74lbusbblflnp3c46a",
|
|
||||||
// "bafkreibyegb4yn3yzxsnq5rggwra2x4nnd4eojvzdtxnl6lixq4f7cbdmm",
|
|
||||||
// "bafkreiaygw7455yt6siqsqjs5bfhrrbxa5ezlktcwdnyeqikuq66irm5me",
|
|
||||||
// "bafkreiaqj7xiukqacs6genv7s5bewucuag3d2lnn6kwqmkcnsngtrn2p5i",
|
|
||||||
// "bafkreigm4czjurpcdgqapwj3ilzg7o3qx6wiyfd74hitm5hklyxbx52ujy",
|
|
||||||
// "bafkreifgtz7hpaeuendeah37ny363ppx3klctkycol665lk65nkolvtj7q",
|
|
||||||
// "bafkreicje4abjqh52oz35ble2yvasjkxemsptjnvla73greqzz5jwfkhiu",
|
|
||||||
// "bafkreiebelxzjwxdvyvvj6cmqcn6cdnetrfxnw4bf4zaqkbh4myvu3a6qu",
|
|
||||||
// "bafkreibg5fatnupr4u66zp5xabgyav65aik3bwv7ms73xjig37qz7ffura",
|
|
||||||
// "bafkreigkgv36pc4gc35vlm7axlrtvbpwxl54pnq6mjovvre7n6vsqyfrp4",
|
|
||||||
// "bafkreiekiefyw55qxsoqvbv2zbrjhbvrybo5qsamhsvk6rst4kzxmrxioq",
|
|
||||||
// "bafkreifv2zmtj54mezqqbdfcc6z2anexctcumvs64abo2cvqgo47d6qk4q",
|
|
||||||
// "bafkreibjlhludpjooxikum7cjw7c6rczgwbekaiusjm4xu5nyodwr3zjnm",
|
|
||||||
// "bafkreib5z3fllsfv32fjhgvkao3csi4r2dhsegji52aqmfp4x2s6qb7734",
|
|
||||||
// "bafkreiajnquwgsapxpesee4yyjz3hbwkopbr5pkpydbhjo4iwcpxolzrfy"];
|
|
||||||
|
|
||||||
// for ( uint i; i < NFts.length; i++) {
|
// for(uint i = 0; i < 68; i++){
|
||||||
// dco2sc.safeMint(address(i+1), NFts[i]);
|
// mintedNFTs[i] = nfts[i];
|
||||||
|
// }
|
||||||
|
// //= ["bafkreibc6p3y36yjmeqqnttqfrpb2yttxa6aonoywxwdxl7nqym4jj3jwa",
|
||||||
|
// // "bafkreidcf5baqb5wevs6avyd7dtd3j7rzrq65uyqasj4dbkcy6na4ig3ay",
|
||||||
|
// // "bafkreibffiehtv4ntajq5vjwpl7q44i6cjbg54lm5hkoa665ue2taspiyu",
|
||||||
|
// // "bafkreifqztiwfutjik4wfs3gyfdyrff7cugi4mcctluunrrbp5cgareisq",
|
||||||
|
// // "bafkreiglyvpxwrxdvruit3oiw2lvkxqqxn7ojquw4gl7ck6szewz6t6cam",
|
||||||
|
// // "bafkreiakd4xtuw3toe4wnez2ndmdadqv3oszaoffoha4tw2hqr3sjnsmge",
|
||||||
|
// // "bafkreigx2isd63yflf6toeg7nfqw33hf6vvllcxfnzn7ymd7u4okflivbi",
|
||||||
|
// // "bafkreidrsjlcajbz35crgs6dpog6ophcochrgrrqgejxfye4m6lbw5mdde",
|
||||||
|
// // "bafkreihwi7xoak3p3mmofdln4pc4wqkkbdwyyz2yxbpfvpzvvxa2ogbaxi",
|
||||||
|
// // "bafkreiclhcy3n5iq3ka2jwxhvedpdewonwoujgu77y7rgnkddheioemcsi",
|
||||||
|
// // "bafkreic3vdshhst65qtzkwfbqzfpmuqbsyizxguarixobrp3scwaiq5jre",
|
||||||
|
// // "bafkreifv5xyis2kuveyfoc662zxeol2zdyiue4h3sznosef7ihrsmjexwm",
|
||||||
|
// // "bafkreifqyk6255h2ppobog33fzifsosbcnn2tanqi3ezjcwis6gya4sfoi",
|
||||||
|
// // "bafkreigend4j42oanbjxltwuyizmufdhqbngf6fbe5hgnlxs3yhzgpvay4",
|
||||||
|
// // "bafkreiextgvmtg23rx3lq2s6psebqln6ojlgosc544jch72baq3yt3dryu",
|
||||||
|
// // "bafkreihlkfwt5ntpnwf3c37d4lsf4y6czxojyffqet5ujvzw374x7ainoi",
|
||||||
|
// // "bafkreievuhvdru7p3lxht3of67xdri6urrrsjxr2e6rzulwg2574ye3dji",
|
||||||
|
// // "bafkreidqa6xuekp34iu7cqmngdbe7knzia47s7gwn3zczr5vwso57nrtx4",
|
||||||
|
// // "bafkreiglo5jhcem4ogswylqi37bx2wmn65cy6blwbwxcvuzklpfr6vhmke",
|
||||||
|
// // "bafkreibz353bqq76gjvswt7eebyffi3nkke5bzrvsjzem3is6x4ptpnqvi",
|
||||||
|
// // "bafkreif2dohcblqea4t4z5qjfxtdzz6vmtxs4325yuf6jz6e2sdxf366ni",
|
||||||
|
// // "bafkreib265gzsjgprktabq4c3glrdl5noebegibwupchwuwbswohum3ap4",
|
||||||
|
// // "bafkreicfaqdpgnrnebvqxyvg7s7eqgipbw5bg3hdticvghcpivjmvjx364",
|
||||||
|
// // "bafkreiabmontlvf2ah3vngpaf3cmg5ejinyqe6yl5pcl4lfrtvduwnuqcq",
|
||||||
|
// // "bafkreidvyf5txqmcizexdexdaqsbr4fxclcpfn6npgkngm6rclaszjll4q",
|
||||||
|
// // "bafkreib4wysvkug2bbzfpuey7hazqkezqtstv2n3yzccw7z77n2urcb6ye",
|
||||||
|
// // "bafkreiailtryy3cg7anain2evahiaox6babpxd4dp4kl67jqeoabh6ndwi",
|
||||||
|
// // "bafkreid32knw3kptbognoamqxcu5a2r3hzlzcb5a4tbouzfob5j2hhww6y",
|
||||||
|
// // "bafkreifprm74saobjxnang72smgtrevwvsxyps46kbc6ehhk3veqqpprte",
|
||||||
|
// // "bafkreif6wbrqmlqihivdasweh5opjjixinupsqfqmyflo2he3tdibx26mq",
|
||||||
|
// // "bafkreig75yruw2hkfqdfhmjm7lfenojvgv6emxfgkwolajhnjsokcc3vv4",
|
||||||
|
// // "bafkreihxvojrjrzigupwtncsrwsswju4cwh2sz5z2evqt6qlgcd7siptqi",
|
||||||
|
// // "bafkreifmcjsvyou6ml6khq7d7iglchh4a4clqvzf7t4ky6sxyoml6ixvj4",
|
||||||
|
// // "bafkreieyrrsp4lgoqqfrynp64cdif2jrnnzwc3lv4j5wlm4glszhjltp24",
|
||||||
|
// // "bafkreicpw7ytfbzakmg23wkuhrpumcdtoh75po7j6fu627vru3hgl6kpay",
|
||||||
|
// // "bafkreifrdsfw2vazhleexjkcd6f6t73aqvrobq5nwyeqa2rmykqtsef2o4",
|
||||||
|
// // "bafkreicdmr2bet7omb3u5zrgvubq2nxwbzlo6kqkjy6swey4u5yavqsf3y",
|
||||||
|
// // "bafkreihupkyebtf3rybziatp7p242gbyza7rf7s6noj3wun6fwd2sr6qhq",
|
||||||
|
// // "bafkreibrlybbkiiutohvwj3q6j3drs7llaxliz7dhiflipq34e4guzcbhu",
|
||||||
|
// // "bafkreieuseajoxy4ouo2u2upxz7lssoivcb63r64ada6n6pbxtupwnp6fa",
|
||||||
|
// // "bafkreid53wwrea4erd5hm7gjgkgpp6oddjqnctffewf3nay2grs2nhmh5y",
|
||||||
|
// // "bafkreigzrzugp7aqn6u6yqyaeu7v5lou4ldvkc5gfstr3p3otaf4afg56y",
|
||||||
|
// // "bafkreibqdmemeh57bkszki7oypxelqlihuy26eaeoi664epsqr5543q3je",
|
||||||
|
// // "bafkreiga4wd7vxjn46eovsktpmg2ugrd545sckdu2ibytvyjmj44rxjo5a",
|
||||||
|
// // "bafkreibef52rjpwrhfoaewbb4x7w5nthexsxzanoh5g7l3wzikubw6t4j4",
|
||||||
|
// // "bafkreihbkxbmbxk5xcujr3vwoo3qnnkubqmrkytjml76f2be4rfdi3kwiy",
|
||||||
|
// // "bafkreibh5fgjwuzcnyrpdcyxzpcjndrppeelgrjccfq2s7jg52dvcmk4cy",
|
||||||
|
// // "bafkreiea7k7u6kq76a4zysht5ri62jabvbuf6uk2emptxua2lkfmpleqqu",
|
||||||
|
// // "bafkreibietep53mtdq5kpk442x5djcaiwkirgltemomaaa6in6j375agfe",
|
||||||
|
// // "bafkreifwho3vue5x3yus3bcl2vs46b2ehgnhokmk4363dyptcqkcjuwtwm",
|
||||||
|
// // "bafkreicb662izefhwuvv7u6yh4rav76od4r4nkm6h7mgkflb77bt5wkimm",
|
||||||
|
// // "bafkreihlls4pkcjtjaasxmvctafrslucawm5lrffz5ho57azdaiapo2evq",
|
||||||
|
// // "bafkreih4ncyemyptx3nxe5qvxn6keiv7m36avhg5t2z6uvohs22he6q5zi",
|
||||||
|
// // "bafkreibxx4deq65og67be3oliqz2u4j6tacczarf74lbusbblflnp3c46a",
|
||||||
|
// // "bafkreibyegb4yn3yzxsnq5rggwra2x4nnd4eojvzdtxnl6lixq4f7cbdmm",
|
||||||
|
// // "bafkreiaygw7455yt6siqsqjs5bfhrrbxa5ezlktcwdnyeqikuq66irm5me",
|
||||||
|
// // "bafkreiaqj7xiukqacs6genv7s5bewucuag3d2lnn6kwqmkcnsngtrn2p5i",
|
||||||
|
// // "bafkreigm4czjurpcdgqapwj3ilzg7o3qx6wiyfd74hitm5hklyxbx52ujy",
|
||||||
|
// // "bafkreifgtz7hpaeuendeah37ny363ppx3klctkycol665lk65nkolvtj7q",
|
||||||
|
// // "bafkreicje4abjqh52oz35ble2yvasjkxemsptjnvla73greqzz5jwfkhiu",
|
||||||
|
// // "bafkreiebelxzjwxdvyvvj6cmqcn6cdnetrfxnw4bf4zaqkbh4myvu3a6qu",
|
||||||
|
// // "bafkreibg5fatnupr4u66zp5xabgyav65aik3bwv7ms73xjig37qz7ffura",
|
||||||
|
// // "bafkreigkgv36pc4gc35vlm7axlrtvbpwxl54pnq6mjovvre7n6vsqyfrp4",
|
||||||
|
// // "bafkreiekiefyw55qxsoqvbv2zbrjhbvrybo5qsamhsvk6rst4kzxmrxioq",
|
||||||
|
// // "bafkreifv2zmtj54mezqqbdfcc6z2anexctcumvs64abo2cvqgo47d6qk4q",
|
||||||
|
// // "bafkreibjlhludpjooxikum7cjw7c6rczgwbekaiusjm4xu5nyodwr3zjnm",
|
||||||
|
// // "bafkreib5z3fllsfv32fjhgvkao3csi4r2dhsegji52aqmfp4x2s6qb7734",
|
||||||
|
// // "bafkreiajnquwgsapxpesee4yyjz3hbwkopbr5pkpydbhjo4iwcpxolzrfy"];
|
||||||
|
// //assign to 68 addresses
|
||||||
|
|
||||||
|
// for ( uint i = 0; i < mintedNFTs.length; i++) {
|
||||||
|
// dco2sc.safeMint(address(this), mintedNFTs[i]);
|
||||||
// }
|
// }
|
||||||
// // assert that each NFT gets minted with the proper URI
|
// // assert that each NFT gets minted with the proper URI
|
||||||
// // and addrress
|
// // and addrress
|
||||||
// for ( uint i; i < NFts.length; i++) {
|
// for ( uint i; i < mintedNFTs.length; i++) {
|
||||||
// assertEq(NFTs[i], dco2sc.)
|
// assertEq(mintedNFTs[i], dco2sc.tokenURI(token_id));
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue