CryptoZombies 1-4,5

3564 ワード

payable


受信可能
  • イーサの関数制御プログラム
  • イーサネットにはcontract、関数、ethが存在するため、関数を実行しながらお金を送信することができます.
  • msg.value:関数を実行する人が送ったお金
  • function buySomething() external payable {
    //함수를 실행시킨 사람이 0.001 ether를 보냈는지 확인.
      require(msg.value == 0.001 ether);
    }
    }

    transfer

  • 契約に格納されたお金は、特定のアドレスの関数
  • に送信することができる.
  • this.残高:現在の見積残高
    ex) owner.Transfer(thi.balance):この見積書の所有者に現在の残高(thi.balance)を送信します.
  • 契約残高は買掛ethです.
  • 蘭手

  • keccak 256を使用して整数を生成
    ex)0から99までの整数
  • を生成する.
    uint randNonce = uint(keccak256(now, msg.sender, nonce)) % 100
    # nonce: 동일한 해시 함수에서 딱 한 번만 쓰여야 되는 값
    上のやり方は正直ではない.トランザクションは、希望する結果値がある場合にのみ共有されるためです.
    調整関数が実行されている場合は、トランザクションとして特定のノードまたはノード全体に通知されます.ランダム関数を実行して、私が望む値がない場合は、私だけに通知し、私が望む値が現れたら、全体に通知します.これはランダム関数ですが、私が望む値しか得られません.
    例えば、コインをひっくり返すと、実際には正面と裏面が現れ、人々に教えるときは、正面だけのようです.

    コイン枚

  • イーサネットで発生したコイン
  • スマートトラクターで製造されています.
  • イーサをスマートコースに送信すると、コインがもらえます.
  • ERC 20:トークンの標準.コインを作るのは標準と標準です.
  • ERC 721:各トークンは一意のIDを有する.また、分割不可なので、それぞれのコインで取引します.
  • ERC 721の実装


    balanceOf(_address)
  • のアドレスを受信し、アドレスが持つトークン数
  • を返す.
    ownerOf(_tokenId)
  • tokenIdを受信し、トークン所有者のアドレス
  • に戻る.

    トークン転送ロジック


    1) transfer( _toAddress, _tokenId)
  • トークンを送信した者が実行する関数は、tokenIdとしてIDのトークンをtoAddressに送信する.
  • 2) approve( _toAddress, _tokenId), takeOwnership( _tokenId)
  • aprove関数を実行し、toAddressにtokenIdを許可します.(マッピングに格納)
  • 以降、takeOwnership関数を呼び出す人がいれば、その人がトークンを持っているかどうかを確認して送信する(トークンを受け取った人が実行する).
  • ライブラリの使用

  • ライブラリ宣言方法
  • library example {
    	function ...
    }
  • ライブラリ用法
  • import "라이브러리가 존재하는 파일";
    
    using example(라이브러리 이름) for 변수 타입;

    SafeMath

  • オーバーフローと底流を防止するライブラリ
  • SafeMathコード
    library SafeMath {
    
      function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
          return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
      }
    
      function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
      }
    
      function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
      }
    
      function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
      }
    }
    使用方法
    using SafeMath for uint256;
    
    uint256 a = 4;
    uint256 b = a.add(4); //b=8
    uint256 c = a.mul(4); //c=16
    uint256 d = a.div(2); //d=2
    uint256 e = a.sub(3); //e=1
    addのパラメータは2つなのに、どうして1つしか使えないのですか?
    using SafeMath for int256;宣言時に、各関数の最初のパラメータにaが渡されるからです.