Plataforma
'''
instalar
https://nodejs.org/
https://metamask.io/
#criar conta gratuita#
https://thirdweb.com/
https://moralis.io/
#teste paa mumby#
https://faucet.polygon.technology/
'''
solidity
contracts/Contract.sol:
import numpy as np
npx thirdweb create --template nft-drop
cd nft-drop
npm install @moralisweb3/common-evm-utils moralis
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC1155Base.sol";
contract NascenteViva is ERC1155Base {
struct NascenteInfo {
uint256 validUntil;
bool isActive;
}
mapping(uint256 => NascenteInfo) public nascentes;
uint256 public maintenanceFee = 0.01 ether;
constructor(
address _defaultAdmin,
string memory _name,
string memory _symbol
)
ERC1155Base(
_defaultAdmin,
_name,
_symbol,
address(0), // No royalty recipient
0, // 0% royalty
address(0) // No primary sale recipient
)
{}
function mintWithDuration(
address _to,
uint256 _tokenId,
uint256 _durationDays
) external onlyOwner {
_mint(_to, _tokenId, 1, "");
nascentes[_tokenId] = NascenteInfo(
block.timestamp + (_durationDays * 1 days),
true
);
}
function renewMaintenance(uint256 _tokenId) external payable {
require(msg.value >= maintenanceFee, "Insufficient fee");
require(nascentes[_tokenId].isActive, "Inactive token");
nascentes[_tokenId].validUntil += 365 days;
}
function checkValidity(uint256 _tokenId) public view returns (bool) {
return nascentes[_tokenId].isActive &&
block.timestamp <= nascentes[_tokenId].validUntil;
}
}
bash
npx thirdweb deploy
_name
_symbol
json
{
"name": "Nascente NV-001",
"description": "Proteção de nascente na Mata Atlântica",
"w": "ipfs://QmXyZ.../nascente.jpg",
"properties": {
"localização": "-23.5505° S, -46.6333° W",
"vazão": "1500 L/hora",
"validade": "3 anos"
}
}
.env.local:
env
MORALIS_API_KEY=your_api_key
THIRDWEB_CLIENT_ID=your_thirdweb_id
CONTRACT_ADDRESS=0x...
pages/index.js
javascript
import { MoralisProvider } from "react-moralis";
function MyApp({ Component, pageProps }) {
return (
);
}
javascript
import { useMoralis, useWeb3Contract } from "react-moralis";
export default function NascenteDashboard() {
const { isWeb3Enabled, account } = useMoralis();
const { runContractFunction: getValidity } = useWeb3Contract({
abi: nascentesAbi,
contractAddress: contractAddress,
functionName: "checkValidity",
params: { _tokenId: 1 }
});
const [validity, setValidity] = useState(false);
useEffect(() => {
if (isWeb3Enabled) {
getValidity().then(result => setValidity(result));
}
}, [isWeb3Enabled, account]);
return (
);
}
bash
npm run dev
http://localhost:3000
TransferSingle
RenewMaintenance
json
{
"chainId": "0x13881",
"chainName": "Mumbai",
"rpcUrls": ["https://rpc-mumbai.maticvigil.com/"],
"nativeCurrency": {"name":"MATIC","symbol":"MATIC","decimals":18}
}
image
ipfs://CID/nascente.jpg
https://www.mapbox.com/
https://sendgrid.com/
https://chain.link/
Nascente NV-001
Status: {validity ? "ATIVA" : "INATIVA"}
Comentários
Postar um comentário
Sejam Bem Vindos ao Passo Seguinte