AI繪畫NFT藝術品鑄造dapp系統開發合約編寫詳情

nice1022發表於2023-03-03

Ai繪畫是一種計算機生成繪畫的方法,它使用人工智慧演算法來創作繪畫。

簡單的說,就是基於演算法完成的藝術創作。

再通俗些說,就是AI軟體“計算”出你想要的圖片。


隨著NFT概念的進一步火熱,開發I34-合約I633-部署53I9,組合式NFT概念被提出。例如一個頭像可以由眼睛、嘴巴和鼻子等元素組成,每個元素都是一個NFT或者FT,這些元素共同組成了一個獨一無二的NFT頭像。但是對於整個頭像NFT而言,在過去傳統合約中是沒有所謂層級關係的,即鼻子部分並不知道自己屬於哪個NFT,或者頭像部分不知道自己是由哪些NFT或者FT組成的。為此,ERC-998便應運而生,也就是可組合Composable NFTs,縮寫為CNFT,即一個ERC-998可以包含多個ERC-721和ERC-20形式的通證,而轉移CNFT即是轉移CNFT所擁有的整個層級結構和所屬關係。

}/**
 * @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);
    }



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011332/viewspace-2938090/,如需轉載,請註明出處,否則將追究法律責任。

相關文章