Bitcoin Forum
October 31, 2024, 09:39:14 PM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: ERC 1155 e NFTs fracionados: dúvidas  (Read 76 times)
Disruptivas (OP)
Legendary
*
Offline Offline

Activity: 1428
Merit: 1568


View Profile
September 30, 2022, 12:23:13 AM
Merited by TryNinja (5), joker_josue (1)
 #1

Pessoa, queria pedir uma ajuda.

Eu to em um projeto que surgiram algumas questões que to quebrando a cabeça pra resolver, passei o dia inteiro com isso e to quase literamente surtando e queria compartilhar com vocês, pra ver se alguém me da uma luz.

Algumas das premissas:

- 1 token = 1 batch de documentos que representa um lote, que sempre é próximo de 1 tonelada, mas não exatamente 1.
- O dono do NFT precisa ser capaz de dar ''burn'' nesse NFT e reinvindicar essa pool de documentos, que sairá de circulação.
- Nunca, mais de uma pessoa pode acessar os documentos e uma fração de um documento não serve pra o tipo de consumidor mais importante do sistema.
- Como cada NFT/pool de documentos tokenizados tem validade de 2 anos, eu não posso perder o rastro dele ou das partes dele, caso contrario, eu vou ter tokens vencidos em circulação e vou perder o link do supply válido.
- Como 1 batch de documento é caro (+ 5 MIL), eu queria poder fracioná-lo, para que ele possa ser usado como uma moeda e possa ser tradável, até o momento em que alguém for queimar todo o NFT para reinvindicar o batch.  

Conversando com alguns desenvolvedores, eles me falaram que talvez a melhor coisa fosse usar um ERC 1155 (token que suporta ser non-fungible e fungible tokens, um 'multi-token standard), ai eu fui ler umas documentações sobre e entendi que eu poderia criar um cenário assim:

- Batch of documents #1 = NFT id 1  (1 ton  = 1.000 tokens fungíveis entre si)
- Batch of documents #2 = NFT id 2 (0.6 ton = 600 tokens fungíveis entre si)
- Batch of documents #3 = NFT id 3 (0.8 ton = 800 tokens fungíveis entre si)

Sendo que, 1.000 tokens id 1 são diferentes de 600 tokens id 2, mesmo que enquanto unidade, eles tenham o mesmo peso.

Ai vem várias dúvidas:

1) Se eu consigo fazer isso com o ERC 1155, qual a diferença entre isso e fracionar um ERC-721?
2) Eu consigo listar os tokens fungíveis desse NFT em uma exchange? Conhecem algum caso?
3) Como eu poderia exibir a validade nos token não fungíveis?
4) Como eu crio o link de valor entre os NFT não fracionados e os tokens fungíveis que representam a parte do NFT? Exemplo: um NFT = 1 documento que tem valor ''no mundo real''. Mas se eu tenho 1/5 dos tokens que compõem o NFT, eu não sou capaz de converter isso em 1/5 do valor necessariamente, porque talvez NUNCA esse NFT volte ''a ser inteiro''. E só o NFT inteiro pode ser queimado pra se reinvindicar um documento.

Não sei se vocês vão entender/conseguir me ajudar no raciocinio, pq é um sistema beeeeeeeeem complexo, mas talvez dizendo as premissas, vocês possam me ajudar.

TryNinja
Legendary
*
Offline Offline

Activity: 3010
Merit: 7419


Top Crypto Casino


View Profile WWW
September 30, 2022, 01:35:09 AM
Merited by joker_josue (1)
 #2

Estou longe de ser um expert, mas vou dar a minha opinião (possívelmente equivocada em alguns casos Grin).

1) Se eu consigo fazer isso com o ERC 1155, qual a diferença entre isso e fracionar um ERC-721?
Creio que a fracionalização padrão funciona apenas como uma espécie de custodia que gera IOUs.

1 NFT > 100 tokens.
100 tokens > 1 NFT.

Mas você poderia muito bem criar a sua própria implementação com suas próprias particularidades não limitadas ao swap entre NFT e tokens i.e 600 tokens (0.6 ton) de um total de 1000 (1 ton) podem ser trocados por 0.6 ton para evitar que seja necessário adquirir todos os exatos 1000 tokens do batch.

2) Eu consigo listar os tokens fungíveis desse NFT em uma exchange? Conhecem algum caso?
Sim.

O https://fractional.art é conhecido por isso (NFTs fracionados).

Aqui temos o "meme original do Doge" em formato de NFT e fracionalizado: https://fractional.art/vaults/0xbaac2b4491727d78d2b78815144570b9f2fe8899

Que inclusive pode ser comprado/vendido no Uniswap/etc...: https://etherscan.io/token/0xbaac2b4491727d78d2b78815144570b9f2fe8899

3) Como eu poderia exibir a validade nos token não fungíveis?
Você poderia adicionar uma varíavel adicional para cada token que inclui um timestamp de validade e um tipo de check na função de redeem(burn)/transfer que reverte a tx caso seja tarde demais (hora de agora > validade). Meio que "brickando" o token.

Code:
mapping(uint => uint) public validades;

function criarToken() {
    uint tokenId = ...
    validades[tokenId] = block.timestamp + 1 days;
}

function transferir(uint tokenId, ...) {
   require(validades[tokenId] > block.timestamp, 'Token expirado');
   ....
}

A pura destruição do token também seria possível, mas você teria que ter um tipo de bot rodando (ou incentivar que pessoas rodem seus bots) para que essa destruição seja realizada onchain (igual os bots que liquidam posições abaixo de um fator de saúde).

4) Como eu crio o link de valor entre os NFT não fracionados e os tokens fungíveis que representam a parte do NFT? Exemplo: um NFT = 1 documento que tem valor ''no mundo real''. Mas se eu tenho 1/5 dos tokens que compõem o NFT, eu não sou capaz de converter isso em 1/5 do valor necessariamente, porque talvez NUNCA esse NFT volte ''a ser inteiro''. E só o NFT inteiro pode ser queimado pra se reinvindicar um documento.
Não vejo isso sendo possível sem a possibilidade de reinvindicar 1/5 do batch com 1/5 dos tokens. Se você tem 1000 tokens e é preciso dos 1000 para que haja o burn em troca da "mercadoria", os 999 por sí só não tem valor no caso do 1 restante ser irrecuperável (i.e endereço adormecido, travado em um contrato, etc...).

Só permitindo a reinvidicação fracionada ou um tipo de pagamento adicional relacionado ao valor equivalente restante (?).

███████████████████████
████▐██▄█████████████████
████▐██████▄▄▄███████████
████▐████▄█████▄▄████████
████▐█████▀▀▀▀▀███▄██████
████▐███▀████████████████
████▐█████████▄█████▌████
████▐██▌█████▀██████▌████
████▐██████████▀████▌████
█████▀███▄█████▄███▀█████
███████▀█████████▀███████
██████████▀███▀██████████

███████████████████████
.
BC.GAME
▄▄▀▀▀▀▀▀▀▄▄
▄▀▀░▄██▀░▀██▄░▀▀▄
▄▀░▐▀▄░▀░░▀░░▀░▄▀▌░▀▄
▄▀▄█▐░▀▄▀▀▀▀▀▄▀░▌█▄▀▄
▄▀░▀░░█░▄███████▄░█░░▀░▀▄
█░█░▀░█████████████░▀░█░█
█░██░▀█▀▀█▄▄█▀▀█▀░██░█
█░█▀██░█▀▀██▀▀█░██▀█░█
▀▄▀██░░░▀▀▄▌▐▄▀▀░░░██▀▄▀
▀▄▀██░░▄░▀▄█▄▀░▄░░██▀▄▀
▀▄░▀█░▄▄▄░▀░▄▄▄░█▀░▄▀
▀▄▄▀▀███▄███▀▀▄▄▀
██████▄▄▄▄▄▄▄██████
.
..CASINO....SPORTS....RACING..


▄▄████▄▄
▄███▀▀███▄
██████████
▀███▄░▄██▀
▄▄████▄▄░▀█▀▄██▀▄▄████▄▄
▄███▀▀▀████▄▄██▀▄███▀▀███▄
███████▄▄▀▀████▄▄▀▀███████
▀███▄▄███▀░░░▀▀████▄▄▄███▀
▀▀████▀▀████████▀▀████▀▀
Disruptivas (OP)
Legendary
*
Offline Offline

Activity: 1428
Merit: 1568


View Profile
October 01, 2022, 11:19:39 AM
 #3

Estou longe de ser um expert, mas vou dar a minha opinião (possívelmente equivocada em alguns casos Grin).

Mas você poderia muito bem criar a sua própria implementação com suas próprias particularidades não limitadas ao swap entre NFT e tokens i.e 600 tokens (0.6 ton) de um total de 1000 (1 ton) podem ser trocados por 0.6 ton para evitar que seja necessário adquirir todos os exatos 1000 tokens do batch.

O problema é que 100 tokens do batch #1 são diferentes dos 100 tokens do batch #2 porque eles são de lotes diferentes, com validades diferentes.


O https://fractional.art é conhecido por isso (NFTs fracionados).

Aqui temos o "meme original do Doge" em formato de NFT e fracionalizado: https://fractional.art/vaults/0xbaac2b4491727d78d2b78815144570b9f2fe8899

Que inclusive pode ser comprado/vendido no Uniswap/etc...: https://etherscan.io/token/0xbaac2b4491727d78d2b78815144570b9f2fe8899

Mas e em exchanges centralizadas, já viu algum caso? Temos algumas interessadas, mas ai estamos pensando que se escolhermos pelo ERC 1155, talvez a listagem nas CEXs não seja tão fácil e perderíamos esse público.

Você poderia adicionar uma varíavel adicional para cada token que inclui um timestamp de validade e um tipo de check na função de redeem(burn)/transfer que reverte a tx caso seja tarde demais (hora de agora > validade). Meio que "brickando" o token.

Code:
mapping(uint => uint) public validades;

function criarToken() {
    uint tokenId = ...
    validades[tokenId] = block.timestamp + 1 days;
}

function transferir(uint tokenId, ...) {
   require(validades[tokenId] > block.timestamp, 'Token expirado');
   ....
}

A pura destruição do token também seria possível, mas você teria que ter um tipo de bot rodando (ou incentivar que pessoas rodem seus bots) para que essa destruição seja realizada onchain (igual os bots que liquidam posições abaixo de um fator de saúde).
Mas a variável do timestamp de validade ela é possível nos tokens que representam o NFT ou só no NFT? Pelo que eu saiba, essa função e a função de burn n é tradicionalmente usadas nos tokens fungíveis ou to confundindo as coisas?



Não vejo isso sendo possível sem a possibilidade de reinvindicar 1/5 do batch com 1/5 dos tokens. Se você tem 1000 tokens e é preciso dos 1000 para que haja o burn em troca da "mercadoria", os 999 por sí só não tem valor no caso do 1 restante ser irrecuperável (i.e endereço adormecido, travado em um contrato, etc...).

Só permitindo a reinvidicação fracionada ou um tipo de pagamento adicional relacionado ao valor equivalente restante (?).

Acho que isso talvez quebra todo o meu modelo, né? Pq se o documento só pode ser enviado pra quem tem o NFT inteiro, quando eu permito fracionar, eu tenho um risco bem relevante daquele token nunca mais ser recuperado, desincentivando as pessoas a comprarem.

Como funciona tradicionalmente com os NFTs fracionados? Por exemplo, o que acontece se metade dos detentores de frações de uma arte sumirem e coisas precisarem acontecer com a obra física?
joker_josue
Legendary
*
Offline Offline

Activity: 1834
Merit: 4929


**In BTC since 2013**


View Profile WWW
October 01, 2022, 11:45:57 AM
 #4

Acho que isso talvez quebra todo o meu modelo, né? Pq se o documento só pode ser enviado pra quem tem o NFT inteiro, quando eu permito fracionar, eu tenho um risco bem relevante daquele token nunca mais ser recuperado, desincentivando as pessoas a comprarem.

Como funciona tradicionalmente com os NFTs fracionados? Por exemplo, o que acontece se metade dos detentores de frações de uma arte sumirem e coisas precisarem acontecer com a obra física?

Se o TryNinja esta longe de ser um expert, eu ainda estou mais.  Roll Eyes
Mas, vou dar uma ideia, que não sei até que ponto é viável.

Você disse que o NFT só tem a duração de 2 anos. No final de 2 anos ele deve ser destruído/deixar de ser usado.
Pelo o que eu percebi, se o mesmo for fracionado, fica dependente que todas as parte processam a ordem de destruição do mesmo.

Uma solução podia ser que cada fração do NFT estar agarrado a um smartcontract que faria com que ao final do tempo de vida, os tais 2 anos, automaticamente a fração voltava para o originador do NFT. Assim, a pessoa ou organização, voltaria a deter todo o NFT e poder então fazer a sua queima.

Como disse, não sei até que ponto esta solução seria viável, ou se faria sentido ser aplicado no cenário em questão, mas fica a ideia.


███████████████████████
████▐██▄█████████████████
████▐██████▄▄▄███████████
████▐████▄█████▄▄████████
████▐█████▀▀▀▀▀███▄██████
████▐███▀████████████████
████▐█████████▄█████▌████
████▐██▌█████▀██████▌████
████▐██████████▀████▌████
█████▀███▄█████▄███▀█████
███████▀█████████▀███████
██████████▀███▀██████████

███████████████████████
.
BC.GAME
▄▄▀▀▀▀▀▀▀▄▄
▄▀▀░▄██▀░▀██▄░▀▀▄
▄▀░▐▀▄░▀░░▀░░▀░▄▀▌░▀▄
▄▀▄█▐░▀▄▀▀▀▀▀▄▀░▌█▄▀▄
▄▀░▀░░█░▄███████▄░█░░▀░▀▄
█░█░▀░█████████████░▀░█░█
█░██░▀█▀▀█▄▄█▀▀█▀░██░█
█░█▀██░█▀▀██▀▀█░██▀█░█
▀▄▀██░░░▀▀▄▌▐▄▀▀░░░██▀▄▀
▀▄▀██░░▄░▀▄█▄▀░▄░░██▀▄▀
▀▄░▀█░▄▄▄░▀░▄▄▄░█▀░▄▀
▀▄▄▀▀███▄███▀▀▄▄▀
██████▄▄▄▄▄▄▄██████
.
..CASINO....SPORTS....RACING..


▄▄████▄▄
▄███▀▀███▄
██████████
▀███▄░▄██▀
▄▄████▄▄░▀█▀▄██▀▄▄████▄▄
▄███▀▀▀████▄▄██▀▄███▀▀███▄
███████▄▄▀▀████▄▄▀▀███████
▀███▄▄███▀░░░▀▀████▄▄▄███▀
▀▀████▀▀████████▀▀████▀▀
TryNinja
Legendary
*
Offline Offline

Activity: 3010
Merit: 7419


Top Crypto Casino


View Profile WWW
October 01, 2022, 06:46:29 PM
 #5

Mas você poderia muito bem criar a sua própria implementação com suas próprias particularidades não limitadas ao swap entre NFT e tokens i.e 600 tokens (0.6 ton) de um total de 1000 (1 ton) podem ser trocados por 0.6 ton para evitar que seja necessário adquirir todos os exatos 1000 tokens do batch.

O problema é que 100 tokens do batch #1 são diferentes dos 100 tokens do batch #2 porque eles são de lotes diferentes, com validades diferentes.
Eu entendi isso. O que eu quis dizer é que você poderia permitir aquela redenção parcial que eu comentei.

1000 tokens > 1 ton #1 (ativo real)
600 tokens > 0.6 tons #1 (ativo real)

Sobrando 400 tokens que podem ser trocados por 0.4 tons #1.

Mas e em exchanges centralizadas, já viu algum caso? Temos algumas interessadas, mas ai estamos pensando que se escolhermos pelo ERC 1155, talvez a listagem nas CEXs não seja tão fácil e perderíamos esse público.
Não sei dizer com certeza, pois não consigo prever como as exchanges implementam o seu sistema de saque e deposito dos tokens. Vocês teriam que perguntar isso para algum responsável que trabalhe lá dentro.

Na prática, um ERC 1155 só difere de um ERC 20 no sentido que cada contrato pode conter diversos tokens ao invés de apenas um, portanto há a necessidade de especificar qual token você está transferindo. Não me parece dificil de implementar, mas vai variar dependendo da atual implementação do sistema deles e da mão de obra que cada exchange pode disponibilizar.

Mas a variável do timestamp de validade ela é possível nos tokens que representam o NFT ou só no NFT? Pelo que eu saiba, essa função e a função de burn n é tradicionalmente usadas nos tokens fungíveis ou to confundindo as coisas?
Ambas. O NFT e seus tokens sempre vão conter um identificador único que pode ser verificado através do mapping de "validades" que eu exemplifiquei. Nada disso inviabiliza o token.

O único problema que eu vejo ai é na forma como a exchange vai lidar com essas validades. Por padrão, o token pode expirar e ainda vai existir no sistema deles mas não vai executar os saques (transfers) com sucesso. Eles poderiam talvez verificar a data limite no nível do contrato para "arquivar" o token, mas isso exige uma engenharia customizada e mais mão de obra.


Acho que isso talvez quebra todo o meu modelo, né? Pq se o documento só pode ser enviado pra quem tem o NFT inteiro, quando eu permito fracionar, eu tenho um risco bem relevante daquele token nunca mais ser recuperado, desincentivando as pessoas a comprarem.

Como funciona tradicionalmente com os NFTs fracionados? Por exemplo, o que acontece se metade dos detentores de frações de uma arte sumirem e coisas precisarem acontecer com a obra física?
Sim, esse é o maior problema. Se o cara pega uma única unidade de medida da fração do token, já pode "brickar" o documento inteiro. Tongue

Com o fractional.art que eu mencionei acima, os hodlers do token podem votar em um preço de reserva (exige >50% de votos). Se alguém quiser adquirir o NFT por esse preço de reserva, um leilão é invocado. Quem vencer o leilão fica com o NFT e os donos das frações podem trocar seus tokens pela parte equivalente da venda. Se o token não tem preço de reserva (<50% votaram em um preço), não há como o token ficar inteiro caso não hajam todas as partes do token.

███████████████████████
████▐██▄█████████████████
████▐██████▄▄▄███████████
████▐████▄█████▄▄████████
████▐█████▀▀▀▀▀███▄██████
████▐███▀████████████████
████▐█████████▄█████▌████
████▐██▌█████▀██████▌████
████▐██████████▀████▌████
█████▀███▄█████▄███▀█████
███████▀█████████▀███████
██████████▀███▀██████████

███████████████████████
.
BC.GAME
▄▄▀▀▀▀▀▀▀▄▄
▄▀▀░▄██▀░▀██▄░▀▀▄
▄▀░▐▀▄░▀░░▀░░▀░▄▀▌░▀▄
▄▀▄█▐░▀▄▀▀▀▀▀▄▀░▌█▄▀▄
▄▀░▀░░█░▄███████▄░█░░▀░▀▄
█░█░▀░█████████████░▀░█░█
█░██░▀█▀▀█▄▄█▀▀█▀░██░█
█░█▀██░█▀▀██▀▀█░██▀█░█
▀▄▀██░░░▀▀▄▌▐▄▀▀░░░██▀▄▀
▀▄▀██░░▄░▀▄█▄▀░▄░░██▀▄▀
▀▄░▀█░▄▄▄░▀░▄▄▄░█▀░▄▀
▀▄▄▀▀███▄███▀▀▄▄▀
██████▄▄▄▄▄▄▄██████
.
..CASINO....SPORTS....RACING..


▄▄████▄▄
▄███▀▀███▄
██████████
▀███▄░▄██▀
▄▄████▄▄░▀█▀▄██▀▄▄████▄▄
▄███▀▀▀████▄▄██▀▄███▀▀███▄
███████▄▄▀▀████▄▄▀▀███████
▀███▄▄███▀░░░▀▀████▄▄▄███▀
▀▀████▀▀████████▀▀████▀▀
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!