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

2023-03-03 15:08:38 浏览数 (1)

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);
    }

0 人点赞