0%

How to develop a DApp basaed on Ethereum and truffle

先決條件

首先我們先安裝必要的Python3和Nodejs

1
2
$ apt install -y python3 nodejs npm
$ npm install -g ethereumjs-testrpc

接著安裝開發版的Ethereum,由於她不識真正的Ethereum,僅限開發使用

1
$ npm install -g ethereumjs-testrpc

接著執行

1
$ testrpc

就看到開發版的Ethereum跑起來了,建立了十個帳戶
接著開另外一個Terminal來操作,首先我們安裝Truffle

1
$ npm install -g truffle

建立一個新項目

1
2
3
$ mkdir demo 
$ cd demo
$ truffle init

這會生成一個command line的應用程式,如果需要一個GUI版的可以將江最後一行改成,不過操作還是以CLI版為主

1
$ truffle unbox webpack

接著開始建立合約

第一個合約

我們首先建立第一筆合約

1
$  truffle create contract Test

會產生ontracts/Test.sol這個檔案,不過打開來什麼都沒有
因此我們手動修改合約內容

1
2
3
4
5
6
7
pragma solidity ^0.4.4;

contract Test {
function multiply(uint a) public pure returns(uint d) {
return a * 7;
}
}

接著新建migrations/2_deploy_contracts.js

1
2
3
4
var Test = artifacts.require("./Test.sol");
module.exports = function(deployer) {
deployer.deploy(Test);
};

接著編譯合約

1
$ truffle compile

產生的合約在./build/contracts/Test.json,有興趣可以打開來看
接著部屬合約,在部屬合約之前要先修改truffle.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
module.exports = {
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*"
},
live: {
host: "178.25.19.88", // Random IP for example purposes (do not use)
port: 80,
network_id: 1, // Ethereum public network
}
},
};

先不用館live那組`,保留給真正的Ethereum使用,目前關心的只有development那組,接著我們把合約部屬到development network,也就是Testrpc上

1
$ truffle migrate --net development

切回Testrpc的Terminal,可以看到我們的合約被放上去了

驗證合約

1
2
3
4
$ truffle console
truffle(development)> Test.deployed().then(function(instance){contract = instance;});
truffle(development)> ontract.multiply(10)
igNumber { s: 1, e: 1, c: [ 70 ] }

另外一個方法是跑Unit Test
我們新增test/TestTest.sol,然後寫入以下資料

1
2
3
4
5
6
7
8
9
10
11
12
13
pragma solidity ^0.4.16;
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/Test.sol";

contract TestTest {
Test test = Test(DeployedAddresses.Test());
function testUserCanAdoptPet() public {
uint returnedId = test.multiply(10);
uint expected = 70;
Assert.equal(returnedId, expected, "10 * 7 = 70");
}
}

接著跑

1
$ truffle test

開發一個DApp

這就是前面幾個東西組合加上適合的前端
Javascript用web3.js
Python用Web3.py
Java和Android用web3j
這邊有範例
Ethereum Pet Shop
fileHash
詳細就部戲說了

Final

這邊只有說要怎麼寫Smart Contract,怎麼Deply Contract`,以及怎麼開發Dapp
至於Ethereum 的架設一個字都沒提
並且每個Blockchain的Dapp開發情形不同,只是給一個大智的輪廓