BSV 区块链上的 DeFi: 非同质化代币(NFT) 与 市场交易

Posted sCrypt 智能合约

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BSV 区块链上的 DeFi: 非同质化代币(NFT) 与 市场交易相关的知识,希望对你有一定的参考价值。

在本系列的第 2 部分中,我们将说明如何构建非同质化代币(NFT) 并直接在 BSV 区块链上交易它们。

非同质化代币 (Non-Fungible Tokens)

在最基本设置中,NFT 合约包含两列的表:一个 ID,唯一地代表不可替代的资产,以及它的合法所有者。

下面的合约实现了这样一个基本的 NFT 合约,类似于以太坊中的 ERC721 代币标准。

// a basic ERC721-like non-fungible token
contract ERC721 
    PubKey minter;

    @state
    HashedMap<int, PubKey> owners;

    // mint a new token to receiver
    public function mint(PubKey to, int tokenId, Sig minterSig, int keyIndex, SigHashPreimage preimage) 
        // token not minted
        require(this.owners.has(tokenId, keyIndex));
        // authenticate
        require(checkSig(minterSig, this.minter));

        require(this.owners.set(tokenId, to, keyIndex));

        require(this.propagateState(preimage));
    

    // burn a token
    public function burn(int tokenId, PubKey from, Sig fromSig, int keyIndex, SigHashPreimage preimage) 
        // verify ownership
        require(this.owners.canGet(tokenId, from, keyIndex));
        // authenticate
        require(checkSig(fromSig, from));

        require(this.owners.delete(tokenId, keyIndex));

        require(this.propagateState(preimage));
    

    // transfer a token from sender to receiver
    public function transferFrom(PubKey from, PubKey to, Sig fromSig, int tokenId, int keyIndex, SigHashPreimage preimage) 
        // verify ownership
        require(this.owners.canGet(tokenId, from, keyIndex));
        // authenticate
        require(checkSig(fromSig, from));

        require(this.owners.set(tokenId, to, keyIndex));
    
        require(this.propagateState(preimage));
    

    function propagateState(SigHashPreimage preimage): bool 
        require(Tx.checkPreimageSigHashType(preimage, SigHash.SINGLE | SigHash.FORKID));
        bytes outputScript = this.getStateScript();
        bytes output = Utils.buildOutput(outputScript, SigHash.value(preimage));
        return hash256(output) == SigHash.hashOutputs(preimage);
    

ERC721 合约 代码

它与我们开发的同质化代币合约非常相似。最显着的区别是第 6 行的代币表,将资产 ID, 而不是代币代币余额,映射到其所有者。

出售 NFT

让我们出售一些 NFT 来换取 BSV。这类似于交换同质化代币。在以下示例中,Alice 仅在tx2 的第二个输出中收到 BSV,并且支付金额满足她的价格要求时才签名。Bob 只有在 tx2 的第一个输出中成为 id1 的 NFT 的新所有者时才签名。

扩展

有多个方面可以扩展出售NFT。我们列举几个例子:

  • 出售 NFT 以换取其他代币: tx2 的第二个输出应该包含支付给 Alice 的代币(同质化代币或非同质化代币),而不是由 tx1 支付 BSV。
  • 平台费: 第三个输出可以添加到 tx2,向平台支付费用,例如,第二个输出金额的 3%

以上是关于BSV 区块链上的 DeFi: 非同质化代币(NFT) 与 市场交易的主要内容,如果未能解决你的问题,请参考以下文章

BSV 区块链上的 DeFi :Uniswap

什么是NFT以及它的价值

剖析非同质化代币ERC721-全面解析ERC721标准

搞懂NFT的概念

搞懂NFT的概念

区块链相关知识(小白看区块链)