前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AI智能绘画NFT艺术品铸造系统开发智能合约编写技术流程

AI智能绘画NFT艺术品铸造系统开发智能合约编写技术流程

原创
作者头像
开发v_hkkf5566
发布2023-03-03 15:08:38
3700
发布2023-03-03 15:08:38
举报
文章被收录于专栏:技术开发分享技术开发分享

Ai绘画是一种计算机生成绘画的方法,它使用人工智能算法来创作绘画。

简单的说,就是基于算法完成的艺术创作。

再通俗些说,就是AI软件“计算”出你想要的图片。

随着NFT概念的进一步火热,组合式NFT概念被提出。例如一个头像可以由眼睛、嘴巴和鼻子等元素组成,每个元素都是一个NFT或者FT,这些元素共同组成了一个独一无二的NFT头像。但是对于整个头像NFT而言,在过去传统合约中是没有所谓层级关系的,即鼻子部分并不知道自己属于哪个NFT,或者头像部分不知道自己是由哪些NFT或者FT组成的。为此,ERC-998便应运而生,也就是可组合Composable NFTs,缩写为CNFT,即一个ERC-998可以包含多个ERC-721和ERC-20形式的通证,而转移CNFT即是转移CNFT所拥有的整个层级结构和所属关系。

代码语言:javascript
复制
}/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see 
 */contract ERC20Basic {    uint public _totalSupply;    function totalSupply() public constant returns (uint);    function balanceOf(address who) public constant returns (uint);    function transfer(address to, uint value) public;
    event Transfer(address indexed from, address indexed to, uint value);
}/**
 * @title ERC20 interface
 * @dev see 
 */contract ERC20 is ERC20Basic {    function allowance(address owner, address spender) public constant returns (uint);    function transferFrom(address from, address to, uint value) public;    function approve(address spender, uint value) public;
    event Approval(address indexed owner, address indexed spender, uint value);
}/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */contract BasicToken is Ownable, ERC20Basic {
    using SafeMath for uint;
    mapping(address => uint) public balances;    // additional variables for use if transaction fees ever became necessary
    uint public basisPointsRate = 0;    uint public maximumFee = 0;    /**
    * @dev Fix for the ERC20 short address attack.
    */
    modifier onlyPayloadSize(uint size) {        require(!(msg.data.length < size + 4));
        _;
    }    /**
    * @dev transfer token for a specified address
    * @param _to The address to transfer to.
    * @param _value The amount to be transferred.
    */
    function transfer(address _to, uint _value) public onlyPayloadSize(2 * 32) {        uint fee = (_value.mul(basisPointsRate)).div(10000);        if (fee > maximumFee) {
            fee = maximumFee;
        }        uint sendAmount = _value.sub(fee);
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(sendAmount);        if (fee > 0) {
            balances[owner] = balances[owner].add(fee);
            Transfer(msg.sender, owner, fee);
        }
        Transfer(msg.sender, _to, sendAmount);
    }    /**
    * @dev Gets the balance of the specified address.
    * @param _owner The address to query the the balance of.
    * @return An uint representing the amount owned by the passed address.
    */
    function balanceOf(address _owner) public constant returns (uint balance) {        return balances[_owner];
    }
}/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev 
 * @dev Based oncode by FirstBlood: 
 */contract StandardToken is BasicToken, ERC20 {
    mapping (address => mapping (address => uint)) public allowed;    uint public constant MAX_UINT = 2**256 - 1;    /**
    * @dev Transfer tokens from one address to another
    * @param _from address The address which you want to send tokens from
    * @param _to address The address which you want to transfer to
    * @param _value uint the amount of tokens to be transferred
    */
    function transferFrom(address _from, address _to, uint _value) public onlyPayloadSize(3 * 32) {        var _allowance = allowed[_from][msg.sender];        // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
        // if (_value > _allowance) throw;
        uint fee = (_value.mul(basisPointsRate)).div(10000);        if (fee > maximumFee) {
            fee = maximumFee;
        }        if (_allowance < MAX_UINT) {
            allowed[_from][msg.sender] = _allowance.sub(_value);
        }        uint sendAmount = _value.sub(fee);
        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(sendAmount);        if (fee > 0) {
            balances[owner] = balances[owner].add(fee);
            Transfer(_from, owner, fee);
        }
        Transfer(_from, _to, sendAmount);
    }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档