基於以太坊智能合約平臺搭建

本文是作者親自搭建的過程,寫的相對比較粗糙,實測可用:
安裝操作操作步驟請參考一下博客
https://zhuanlan.zhihu.com/p/27106175
https://zhuanlan.zhihu.com/p/32911405

執行機器路徑爲
root@ubuntu2:/opt/eth/test#

//執行命令,製造創世區塊

geth --datadir "./data0" init genesis.json

//執行一條最簡單的geth命令,來創建自己的私有鏈條。這也是進入geth客戶端的命令。
geth --datadir "./data0" --nodiscover console 2>>geth.log

//輸入命令eth.accounts, 我們會發現返回值爲[]
輸入命令personal.newAccount("xxx"), 該命令將創造一個新的用戶,該用戶的密碼是xxx. 當然用戶也可以將xxx 改爲123,或者123456,或者任意密碼

//查看日誌
tail -f geth.log

//啓動挖
miner.setEtherbase(eth.accounts[0])
miner.start()

//查看是否在工作
eth.mining
true (true表示在工作)

//進入已經存在的JS窗口
>geth attach "/opt/eth/test/data0/geth.ipc"

//查看已經存在的節點
>eth.accounts[0]
"0xcafacf0d849e50a1bd01b32e7944661df3338aa4"

//查看區塊高度
>eth.blockNumber

//查看節點中的wei數量
> eth.getBalance(eth.accounts[0])

//查看節點中的eth數量
web3.fromWei(eth.getBalance(eth.accounts[0]))

//wei和eth進行轉換
Wei –> Ether: web3.fromWei
> web3.fromWei(10000000000000000)
"0.01"

//添加節點
當另外的節點完成上述步驟後就可以開始添加節點了。在geth console中輸入:admin.addPeer(“”),在雙引號中輸入要連接的節點信息。節點信息通過在geth console中輸入命令admin得到,enode項的信息就是節點的地址。

//進行轉賬
1.首先停止
miner.stop()
2.保證有2個以上地址,給兩個地址賦值
user1=eth.accounts[0]
user2=eth.accounts[1]
3.解鎖user1
personal.unlockAccount(user1)

4.將user1轉給user2,轉3個,單位爲ether
eth.sendTransaction({from:user1,to:user2,value:web3.toWei(3,"ether")})

//智能合約1
var a_demotypesContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"f","outputs":[{"name":"b","type":"uint256"}],"payable":false,"type":"function"}]);
var a_demotypes = a_demotypesContract.new(
   {
     from: web3.eth.accounts[0],
     data: '0x6060604052341561000c57fe5b5b60ab8061001b6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063b3de648b14603a575bfe5b3415604157fe5b60556004808035906020019091905050606b565b6040518082815260200191505060405180910390f35b600060006008830290508091505b509190505600a165627a7a7230582010decdc0b0a43b565814fe904eae2544665457d6353c7d906fc2c43c81c867e40029',
     gas: '4700000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })
//此時一直讓挖礦,執行打包
miner.start()

//驗證輸入一個值返回爲值乘以8 、

a_demotypes.f.call(100)

//智能合約2


//將以下拷貝到geth中
    var helloContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"main","outputs":[{"name":"b","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]);
    var hello = helloContract.new(
       {
         from: web3.eth.accounts[0],
         data: '0x6060604052341561000f57600080fd5b60b68061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063ab3ae255146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b600080600883029050809150509190505600a165627a7a723058203f6d4f506de85c5287b58705788b98694a2b14b17fd6db0c376260b4a0b5a7a00029',
         gas: '4700000'
       }, function (e, contract){
        console.log(e, contract);
        if (typeof contract.address !== 'undefined') {
             console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
        }
     }) 
 //此時一直讓挖礦,執行打包
miner.start()
//驗證輸入一個值返回爲值乘以8

hello.main.call(100)

---異常信息
Error: authentication needed: password or unlock undefined
undefined
//需要注意,在部署只能合約時,出現如下錯誤表示賬戶沒解鎖。需要執行  personal.unlockAccount(eth.accounts[0]) 進行解鎖。

顯示如下日誌信息表示已經正常挖礦

//geth中日誌

Contract mined! address: 0x025f940e33084168a3b8f3c2d1ead767126604ac transactionHash: 0xa086fec940265a0ba1ffa07e573b12b6855840f88039ce932efc62fa060a51ec
null [object Object]
Contract mined! address: 0x0f74eeac87e2e9fc2f6cad3d3debe427ea1ec264 transactionHash: 0x8161f5011ff947d780befa3028916b7b6282b26b7bf5e06f56c1ce5fa00aab41
null [object Object]
Contract mined! address: 0x14c68ba552996c70bebb20033ad9819930578ea4 transactionHash: 0x1d78d9caa9654989cf83dbb019af008f153c7abfdc94779b1d0794aeec0e6a59
//geth.log 中日誌
INFO [02-09|16:18:16] 🔨 mined potential block                  number=7 hash=1a8de5…7be496
INFO [02-09|16:18:16] Commit new mining work                   number=8 txs=0 uncles=0 elapsed=1.357ms
INFO [02-09|16:20:43] Submitted contract creation              fullhash=0xa086fec940265a0ba1ffa07e573b12b6855840f88039ce932efc62fa060a51ec contract=0x025F940e33084168a3b8f3C2D1eaD767126604AC
INFO [02-09|16:37:10] Submitted contract creation              fullhash=0x8161f5011ff947d780befa3028916b7b6282b26b7bf5e06f56c1ce5fa00aab41 contract=0x0F74eEaC87e2e9Fc2F6Cad3D3DEbE427EA1ec264
INFO [02-09|16:52:58] Submitted contract creation              fullhash=0x1d78d9caa9654989cf83dbb019af008f153c7abfdc94779b1d0794aeec0e6a59 contract=0x14C68Ba552996C70BEbb20033AD9819930578EA4
INFO [02-09|16:58:03] Regenerated local transaction journal    transactions=3 accounts=1
INFO [02-09|17:04:32] Successfully sealed new block            number=8 hash=14082a…1a5cb2


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章