Abra as portas para um novo nível de personalização e controle sobre seus tokens ERC-721 usando OpenZeppelin e QuikNode!
Sumário
A revolução da tokenização descentralizada tem sido um marco na evolução das finanças e da propriedade digital. Os tokens ERC-721 têm possibilitado a representação única de ativos digitais, abrindo caminho para inúmeras aplicações em jogos, arte digital, colecionáveis e muito mais. No entanto, até agora, muitas vezes nos deparamos com limitações que tornavam certos cenários inviáveis ou desafiadores.
Construindo tokens colecionáveis usando QuikNode
Em um artigo recente How to Create a Burnable Token with Solidity and OpenZeppelin Library, construímos o token' _Botics (BTS)
' usando a biblioteca OpenZeppelin.
A tecnologia blockchain revolucionou a maneira como as transações são conduzidas em várias indústrias. A capacidade de criar aplicativos descentralizados (dApps) baseados em contratos inteligentes oferece maior segurança, transparência e imutabilidade.
No entanto, o desenvolvimento de contratos inteligentes pode ser complexo e suscetível a erros que podem resultar em sérios problemas de segurança. É aqui que entra a biblioteca OpenZeppelin, uma ferramenta poderosa e amplamente utilizada para facilitar o desenvolvimento seguro de contratos inteligentes na blockchain.
Analisamos os diferentes métodos dos padrões ERC-721 e como eles funcionam. Se precisar de uma introdução prática, acesse o artigo a seguir sobre os tokens ERC-721.
No artigo de hoje, discutirei sobre os tokenomics do ERC-721, incluindo recursos como 'queima' e 'pausa', além de mostrarar como implantar tokens colecionáveis usando QuikNode.io (nó Ethereum como serviço).
O QuikNode.io é uma plataforma baseada em nuvem que oferece serviços de Infraestrutura de Nó como Serviço para várias blockchains populares, incluindo Ethereum, Binance Smart Chain, Polygon e muito mais. O objetivo do QuikNode.io é fornecer aos desenvolvedores e empresas uma maneira fácil e rápida de interagir com a blockchain sem a necessidade de configurar e manter um nó completo.
Contratos de queima de Token
A queima de tokens é um instrumento em tokenomics para diminuir a oferta do ativo. No nosso caso – como cada token é diferente – destruiremos um token (ativo colecionável) para diminuir a oferta total.
Como construir um token ERC-721 queimável?
Agora, vamos adicionar a funcionalidade de queima no token Botics
que construímos no último tutorial. Herdaremos o contrato [ERC721Burnable.sol](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/ERC721Burnable.sol)
da biblioteca open-zeppelin. Vejamos primeiro este contrato.
Este arquivo herda ERC721.sol
e verifica a propriedade do token e chama o método _burn
de ERC721.sol
.
pragma solidity ^0.4.24;
import "./ERC721.sol";
contract ERC721Burnable is ERC721 {
function burn(uint256 tokenId)
public
{
require(_isApprovedOrOwner(msg.sender, tokenId));
_burn(ownerOf(tokenId), tokenId);
}
}
Abaixo está a função _burn
do arquivo ERC721.sol
. Ele remove a propriedade e dá a propriedade para address(0)
(Ninguém tem acesso a este endereço) e então emite o evento transfer
.
function _burn(address owner, uint256 tokenId) internal {
_clearApproval(owner, tokenId);
_removeTokenFrom(owner, tokenId);
emit Transfer(owner, address(0), tokenId);
}
Agora, vamos ver as mudanças em nosso contrato. Adicionaremos um pequeno método burn que chamará internamente ERC721Burnable.sol
.
function _burn(uint256 tokenId) public{
burn(tokenId);
}
Código completo do BoticsToken.sol
pragma solidity ^0.4.24;
import "/openzeppelin-solidity/contracts/token/ERC721/ERC721Full.sol";
import "/openzeppelin-solidity/contracts/ownership/Ownable.sol";
import "/openzeppelin-solidity/contracts/token/ERC721/ERC721Burnable.sol";
contract BoticsToken is ERC721Full, Ownable, ERC721Burnable{
constructor()
ERC721Full("Botics", "BTS")
public {}
function mint(address to, uint256 tokenId) public onlyOwner {
_mint(to, tokenId);
}
function _mint(address to) public onlyOwner{
mint(to, totalSupply().add(1));
}
function _burn(uint256 tokenId) public{
burn(tokenId);
}
}
Quem pode queimar um token ERC-721?
Existem três atores que podem queimar tokens em nosso contrato:
Proprietário — Claro que o dono do token pode queimar seus tokens.
Conta aprovada — Uma conta aprovada pelo proprietário pode queimar o token.
Operador — Um operador é semelhante à conta aprovada, mas, neste caso, o proprietário aprova o acesso a todos os seus tokens de outra conta. Este é um arranjo típico de carteiras ou exchange.
Ao projetar seu contrato, você deve ter cuidado com quem pode queimar tokens. Como as blockchains são imutáveis, os tokens destruídos não podem ser recuperados.
Testando o token queimável
Agora, vamos testar nosso token queimável para cada um dos três atores que discutimos acima.
Queima de token pelo proprietário do token
Um proprietário de token pode queimar seu token. Vamos ver como isso vai funcionar.
Usaremos o console do Truffle para testar nosso contrato. Você pode invocar o console do Truffle usando:
`truffle develop`
Agora, vamos cunhar alguns tokens e queimá-los.
// implantar contrato
truffle migrate --reset
//Obter instância de token
BoticsToken.deployed().then((botics) => {token = botics;})
//mintar um token (id : 1) to account 1
token.mint(web.eth.account[1] , 1 );
// Agora queimar o token (id : 1)
token._burn(1 , {from: web3.eth.accounts[1]})
Queima de um Token por uma conta aprovada
Vamos ver como um token pode ser queimado por uma conta aprovada.
//mintar outro token (id : 2) to account 1
token.mint(web.eth.account[1] , 1 );
//aprovar a conta-2 do token(id:2)
token.approve(web3.eth.accounts[2], 2,{from:web3.eth.accounts[1]})
// Agora queimar o token (id : 2) from account-2
token._burn(2 , {from: web3.eth.accounts[2]})
Da mesma forma, um proprietário pode aprovar todos os tokens para outra conta e essa conta poderá queimar todos os tokens.
Token ERC-721 Pausável
Vamos dar ao nosso contrato um recurso de pausa.
Um contrato pausável possui mecanismos para interromper as funcionalidades do contrato inteligente, como transferência ou aprovação.
Todo contrato de ativo deve ter essa funcionalidade. Existem vários benefícios de um contrato pausável. O principal benefício do contrato de token pausável é a segurança. No caso de qualquer vulnerabilidade de contrato que possa ser necessária para atualizar o contrato, a pausa pode interromper as transferências e outras funcionalidades principais, o que reduz o risco geral.
Como construir um token ERC-721 Pausável?
Construir um contrato pausável é muito fácil com a biblioteca OpenZeppelin. O Open-zeppelin fornece o contrato ERC721Pausable.sol, o qual você pode fornecer a funcionalidade de pausa para o nosso contrato ERC-721.
Só precisamos herdar o ERC721Pausable.sol para fornecer o recurso de pausa em nosso contrato.
Vejamos, ERC721Pausable.sol
abrange três funções: approve, setApprovalForAll
e transferFrom.
Ele também herda Pausable.sol
que controla internamente a funcionalidade de pausa.
pragma solidity ^0.4.24;
import "./ERC721.sol";
import "../../lifecycle/Pausable.sol";
contract ERC721Pausable is ERC721, Pausable {
function approve(
address to,
uint256 tokenId
)
public
whenNotPaused
{
super.approve(to, tokenId);
}
function setApprovalForAll(
address to,
bool approved
)
public
whenNotPaused
{
super.setApprovalForAll(to, approved);
}
function transferFrom(
address from,
address to,
uint256 tokenId
)
public
whenNotPaused
{
super.transferFrom(from, to, tokenId);
}
}
Vejamos o contrato Pausable.sol herdado pelo ERC721Pausable.sol
. Este contrato pausável também herda usando PauserRole.sol,
o qual você pode controlar quem pode pausar o contrato.
pragma solidity ^0.4.24;
import "../access/roles/PauserRole.sol";
contract Pausable is PauserRole {
event Paused(address account);
event Unpaused(address account);
bool private _paused;
constructor() internal {
_paused = false;
}
function paused() public view returns(bool) {
return _paused;
}
modifier whenNotPaused() {
require(!_paused);
_;
}
modifier whenPaused() {
require(_paused);
_;
}
function pause() public onlyPauser whenNotPaused {
_paused = true;
emit Paused(msg.sender);
}
function unpause() public onlyPauser whenPaused {
_paused = false;
emit Unpaused(msg.sender);
}
}
Testando um token ERC-721 pausado
Vamos testar nosso token pausável. Antes disso, compile e reimplemente o Token Botics
.
//Obtenha a instância do token e crie um novo token e atribua-o à conta-1
token.mint(web3.eth.accounts[1], 1);
//Vamos transferir este token para a conta-2
token.safeTransferFrom(web3.eth.accounts[1], web3.eth.accounts[2], 1, {from:web3.eth.accounts[1]})
//Agora vamos pausar o contrato
token.pause();
//Vamos verificar se o token está pausado ou não?
token.paused();
//Agora vamos tentar transferir o token novamente, Deve dar um erro
token.safeTransferFrom(web3.eth.accounts[2], web3.eth.accounts[3], 1, {from:web3.eth.accounts[2]})
Você pode testar outros métodos como approve
, eles devem estar dando erro quando o contrato estiver pausado.
Implantar token usando QuikNode
Vamos implantar nosso token Crowdbotics (Botics
) usando QuikNode.
QuikNode fornece o nó Ethereum como serviço e parceiro da plataforma Crowdbotics.
Para isso, usaremos o truffle-HD-wallet
, então vamos instalá-lo.
`npm install truffle-hdwallet-provider`
Precisamos nos cadastrar e obter uma URL HttpProvider, para isso confira o post Run your own Ethereum Node post. Abaixo está a configuração do Truffle para QuikNode usando a rede kovan.
var HDWalletProvider = require("truffle-hdwallet-provider");
var mnemonic = "YOUR_MEMONICS"; // usar uma carteira com fundos
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*" // Combine qualquer id de rede
},
kovan: {
provider: function() {
return new HDWalletProvider(mnemonic, "https://mistakenly-smart-jay.quiknode.io/86d9e35e-8cdb-47ad-80a4-84f9e9537afa/C0_tKUunhUc0rM_i1HMxHA==/")
},
network_id: 42
}
}
};
Conclusão sobre como construir Tokens ERC-721 Queimáveis e Pausáveis
Aprendemos como tornar seu token ERC-721 queimável e Pausável. Exploraremos mais alguns recursos no próximo artigo. Deixe-nos saber se você quiser saber mais sobre o token ERC-721 na seção de comentários.
Se você estiver construindo alguma coisa, pode consultar o DotLicense, que é uma estrutura de licenciamento de software baseada no ERC721 Ethereum. Veja que você pode criar uma licença de software usando o token ERC-721.
Existem muitos casos incríveis de uso em torno do token ERC-721. Em que você está trabalhando para utilizar os tokens ERC-721 ?
Este artigo foi escrito por Gaurav Agrawal e traduzido por Marcelo Panegali
Caros entusiastas da tecnologia blockchain e devs que desejam explorar o universo das aplicações web3.
Abrace a oportunidade de elevar sua jornada de desenvolvimento para um nível superior. Construir Tokens ERC-721 é apenas o começo; os builds da WEB3DEV são a porta de entrada para o cenário web3.
Visite nosso site agora mesmo e inscreva-se nos próximos builds. Sua jornada rumo ao domínio das aplicações web3 começa aqui!
Latest comments (0)