1. 程式人生 > >基於以太坊的Dapp開發學習心得二

基於以太坊的Dapp開發學習心得二

Truffle框架

  1. Truffle框架安裝:npm install -g truffle
  2. 使用truffle –version 看是否安裝成功
  3. 新建目錄後,可以使用truffle init來建立專案
  4. 使用truffle develop 進入本地搭建好的私有區塊鏈,有建立好的10個預設的賬戶
  5. 使用web3.eth.account[1]來檢視第二個賬戶
  6. 使用web3.eth.getBalance(“賬號地址”) 檢視賬戶餘額
  7. 轉賬的數量:account = web3.toWei(30,’ether’);將30個以太幣轉成位,10的18次方 位 =1以太幣
  8. 使用轉賬交易

    Web3.eth.sendTransaction
    ({from:"",to:"",value:account})
  9. 進入truffle develop之後,可以使用compile進行合約的編譯

  10. 合約部署:

    var helloWorld 定義變數
    合約名.deployed().then((instance)=>{helloWorld = instance})
    migrate;
    var contract;
    SimpleStorage.deployed().then((i)=>{contract=i;});
  11. 合約的呼叫 helloWorld.test()進行合約的呼叫

  12. 修改合約內容後,重新編譯部署的方法:rm -rf build/ 將編譯的內容清空
  13. 進行專案開發時,可以新建一個資料夾,使用truffle unbox react來建立專案,整合前端的程式碼
  14. 使用npm run start命令來執行專案

Solidity智慧合約程式語言

  1. 變數的型別有很多,暫時接觸到的:uint,bool,address,byte,string,day,結構體
  2. 結構體struct 類似於java中的類
  3. 主要的就是function, 函式名,引數,許可權程度,返回值等

    function winningProposal() public constant returns (uint8 _winningProposal) {
        uint256 winningVoteCount = 0
    ; for (uint8 prop = 0; prop < proposals.length; prop++) if (proposals[prop].voteCount > winningVoteCount) { winningVoteCount = proposals[prop].voteCount; _winningProposal = prop; } }
  4. 三個關鍵字 constant,pure,view

    Constant 關鍵字:指如果函式返回值是類變數,就用constant
    pure關鍵字:如果函式返回值是字串或數值與類變數無關,就用pure
    view關鍵字:如果既沒有類變數又不包含字串等,就用view
  5. mapping類似於java中的hashmap,放在合約中,可以用來儲存資料

    mapping(address => Voter) voters;
    address是錢包地址
    Voter是一個結構體
  6. 如果函式中使用了結構體,則這個函式一定只能是internal,不能使public,即無法在外部訪問

  7. 型別直接轉換比較困難,下面程式碼是uint轉string的

    function uintToString(uint v) pure public returns (string) {
        uint maxlength = 100;
        bytes memory reversed = new bytes(maxlength);
        uint i = 0;
        while (v != 0) {
            uint remainder = v % 10;
            v = v / 10;
            reversed[i] = byte(48 + remainder);
            i++;
        }
        bytes memory s = new bytes(i);
        for (uint j = 0; j < i; j++) {
            s[j] = reversed[i-j-1];
        }
        return string(s);
    }