日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

以太坊系列之十一: 零起步使用remix开发智能合约

發(fā)布時間:2023/12/18 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以太坊系列之十一: 零起步使用remix开发智能合约 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一步一步使用remix開發(fā)智能合約

最新版的remix(2017-8-3)只能使用在線開發(fā)了,已經(jīng)沒有離線版本了,并且好像在線版本要FQ才能訪問(自行解決).

1.打開remix

注意地址如果是https開頭的,要換成http,否則就沒法訪問本地的http rpc了.
remix地址,打開以后會看到一個Ballot.sol文件,這是一個測試投票程序

2.打開本地的geth

本地的geth記得一定要開啟rpc,下面是我自己的參數(shù)

ggeth.exe --datadir=d:/privnet --networkid 89120348581 --rpc --rpccorsdomain "*" --rpcapi "eth,admin,web3,net,debug"

--rpc 表示啟動http rpc通道,否則只有本地ipc通道
--rpccorsdomain "*" 是允許跨域訪問,否則http://ethereum.github.io/在對http://localhost:8545進(jìn)行 http rpc通信時會被瀏覽器阻塞
--rpcapi "eth,admin,web3,net,debug" 由于安全起見,geth啟動http rpc的時候是禁止了admin,debug等模塊的,而我們想要通過remix來調(diào)試solidity就必須給與這些權(quán)限.

3. 配置remix

remix的Contract標(biāo)簽下的Environment不能是默認(rèn)的Javascript VM,這樣是沒法運(yùn)行智能合約的,必須選擇Web3 Provider,另一個Injected Web3在我電腦上點(diǎn)了沒有任何反應(yīng),不曉得什么原因.
具體如下圖:

這時候瀏覽器會提示你鏈接http://localhost:8545 , 這時候確保你的geth已經(jīng)啟動,并且添加了--rpc參數(shù),這里如果訪問的是https://ethereum.github.io/browser-solidity,
還是會失敗的,因為瀏覽器會禁止在https模式下去訪問http地址.

如果成功,那么你就可以在Account下拉框中看到你自己的賬戶信息,如果沒有看到那就是上面的某個步驟出錯了.

4. 部署合約

點(diǎn)擊Create按鈕就可以創(chuàng)建合約了.
這時候最常見的錯誤有兩個,一是賬戶沒有解鎖,那你就在geth console中調(diào)用personal.unlockAccount來解鎖;二是余額不足.
當(dāng)然還有一個就是如果你是在私鏈上,記得要啟動miner,否則會一直不成功.

成功以后,就會看到下面的信息

會告訴你在花費(fèi)了多少gas,合約的地址等信息.
還有就是下面會出現(xiàn)合約可以調(diào)用的函數(shù),這時候你就可以切換上面的賬戶進(jìn)行合約調(diào)用了.和普通的函數(shù)調(diào)用差不多.
就是要記得,這個是發(fā)生在區(qū)塊鏈上的,每次調(diào)用都會花費(fèi)以太幣.

5.調(diào)試合約

調(diào)試也就是分步執(zhí)行某個事務(wù),這里的事務(wù)實際上就是一次合約調(diào)用,我這里使用的合約如下:

pragma solidity ^0.4.0; contract Donation {address owner;event fundMoved(address _to, uint _amount);modifier onlyowner { if (msg.sender == owner) _; }address[] _giver;uint[] _values;function Donation() {owner = msg.sender;}function donate() payable {addGiver(msg.value);}function moveFund(address _to, uint _amount) onlyowner {if (_amount <= this.balance) {if (_to.send(this.balance)) {fundMoved(_to, _amount);} else {throw;}} else {throw;}}function addGiver(uint _amount) internal {_giver.push(msg.sender);_values.push(_amount);} }

create 成功以后會出現(xiàn)兩個調(diào)用按鈕,donate和moveFund兩個外部可調(diào)用函數(shù). 其中donate是沒有參數(shù)的,moveFund要有兩個參數(shù).
點(diǎn)擊donate,會在區(qū)塊鏈上執(zhí)行該調(diào)用,結(jié)果如下:

Result: {"blockHash": "0x05ff0a4b8680255fc2f8fd270ff29fc2658a4868bd4a834367e5292aa8c91235","blockNumber": 4471,"contractAddress": null,"cumulativeGasUsed": 88115,"from": "0x1a9ec3b0b807464e6d3398a59d6b0a369bf422fa","gasUsed": 88115,"logs": [],"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","root": "0xf50ef054ab10044cb0ae253121abd8a971abaeb0b69d29bbf5d3ef97652292d7","to": "0xf77165817ad6e07cf32b16b2d6e64e3c85ca7ffc","transactionHash": "0xdf4d91c207cf8d7acee3c64add6a994039cf77d27e07e85633e7953e35e542e6","transactionIndex": 0 }

可以看到該事務(wù)發(fā)生在4471區(qū)塊上,在該區(qū)塊中的事務(wù)索引是0(因為是私鏈,肯定只會有這一個事務(wù)).

有了這些信息,我們就可以去調(diào)試這個調(diào)用

切換到Debugger模塊:
如果按鈕下面有一個The method debug_traceTransaction does not exist/is not available,那是因為geth啟動的時候沒有添加參數(shù)
--rpcapi "eth,admin,web3,net,debug"

這時候我們就可以在代碼中設(shè)置好斷點(diǎn),然后啟動,程序就會停在斷點(diǎn)處,我們可以在右側(cè)的Solidity State中看到變量的變化.如果想要比較好的調(diào)試,還是需要懂一些evm的指令.
否則這樣的調(diào)試感覺也意義不大,和js中按照語句調(diào)試不一樣,這里主要是針對指令的調(diào)試,一句簡單的_giver.push(msg.sender);需要十幾條指令.

當(dāng)然以后隨著remix的發(fā)展,調(diào)試應(yīng)該會做的越來越好.

轉(zhuǎn)載于:https://www.cnblogs.com/baizx/p/7280224.html

總結(jié)

以上是生活随笔為你收集整理的以太坊系列之十一: 零起步使用remix开发智能合约的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。