区块链之智能合约入门
區塊鏈之智能合約入門
第一步 安裝環境
首先這里寫的合約是指solidity合約,使用Remix IDE。所以我們第一步就是安裝Remix IDE。remix ide是開發以太坊智能合約的神器,支持網頁在線編寫、部署和測試智能合約。網址http://remix.ethereum.org
可以選擇先跳過安裝環境這一步,直接使用在線的http://remix.ethereum.org
我這邊的測試環境是kali-linux
安裝的指令為
注意:一定要sudo npm install,一定要sudo npm install,一定要sudo npm install,重要的事情說三遍,本人在這里踩了一次坑了
一般kali是不會自帶npm這個東西的,所以我們需要先安裝npm
NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題
Linux安裝NPM指令(如果是非Linux建議查看Node.js的菜鳥教程,鏈接為 https://www.runoob.com/nodejs/nodejs-install-setup.html)
wget https://nodejs.org/dist/v10.9.0/node-v10.9.0-linux-x64.tar.xz // 下載 tar xf node-v10.9.0-linux-x64.tar.xz // 解壓 cd node-v10.9.0-linux-x64/ // 進入解壓目錄 ./bin/node -v // 執行node命令 查看版本解壓文件的 bin 目錄底下包含了 node、npm 等命令,我們可以使用 ln 命令來設置軟連接:
ln -s /root/node-v10.9.0-linux-x64/bin/npm /usr/local/bin/ ln -s /root/node-v10.9.0-linux-x64/bin/node /usr/local/bin/ ln -s /root/node-v10.9.0-linux-x64/bin/npx /usr/local/bin/這邊前一個路徑是你node.js下載到本地的路徑
這樣表示成功建立軟連接,可以使用npm了。
當然,不建立軟連接也可以直接使用,只要進入到npm所在的目錄下即可
然后開始執行我們一開始的安裝Remix IDE的命令
這邊如果運行報錯可能是因為在執行到npm run build的時候提示錯誤,沒有找到模塊fast-async模塊,一般不會,如果前面你是sudo install的話,因為沒有加sudo的話會出現下面的錯誤
如果出現cannot find module ‘xxx’,說明你缺xxx模塊,你需要做的就是輸入命令sudo npm install xxx.之后將會自動下載安裝,如果提示不成功,再來一遍
接下來如果一切正常的話就可以npm run build
npm run serve
然后訪問即可
環境部署成功
第二步 編寫第一個HelloWorld
Solidity是以太坊智能合約編程語言,所以在這之前需要對Solidity一些基本的語法進行一些了解,我是通過http://www.tryblockchain.org/這個網站進行初步簡單的學習的
這邊在網上找了個log函數,方便等會看是否成功調用
pragma solidity ^0.5.11;//通過log函數重載,對不同類型的變量trigger不同的event,實現solidity打印效果,使用方法為:log(string name, var value)contract Console {event LogUint(string, uint);function log(string memory s , uint x) internal {emit LogUint(s, x);}event LogInt(string, int);function log(string memory s , int x) internal {emit LogInt(s, x);}event LogBytes(string, bytes);function log(string memory s , bytes memory x) internal {emit LogBytes(s, x);}event LogBytes32(string, bytes32);function log(string memory s , bytes32 x) internal {emit LogBytes32(s, x);}event LogAddress(string, address);function log(string memory s , address x) internal {emit LogAddress(s, x);}event LogBool(string, bool);function log(string memory s , bool x) internal {emit LogBool(s, x);} } pragma solidity ^0.5.11; import "browser/Console.sol";contract HelloWorld is Console{function getFlag(uint amount) public returns (string memory){bytes memory flag="flag{asf54654v98x7v}";if(amount>100){log("give you flag!",flag);}uint state=0;log("no flag!",state);} }這邊就是通過讀取參數輸入的新值,如果amout大于100,那么就打印出flag
項目結構
編譯合約時有些蒙,后來發現應該用火狐瀏覽器,安裝MetaMask,可以在火狐瀏覽器的插件中直接搜索安裝,如果不行的話可以自行百度一下另外的安裝方法。
在這邊添加這個模塊
選擇Environment為Injected Web3,然后Remix IDE會請求連接到你的MetaMask錢包里的賬號
然后添加Solidity compiler模塊
對我們的HelloWorld進行編譯
編譯成功后這邊會有綠色箭頭,如果編譯失敗可以看編譯詳細,查看錯誤原因
然后回到這邊就可以看到這邊出現了我們編譯好的HellloWorld。
如果之前沒有部署過這個合約就點擊下方橙色框Deploy,此時會跳出支付gas的彈窗,點擊確定即可
等待幾秒合約就會部署完成,最下方就會顯示已部署的合約(及其地址);如果之前部署過相同合約,那么可以將合約地址復制到At Address并點擊藍色按鈕加載合約,效果相同。
這邊這個橙色getFlag就是合約里的函數,輸入一個金額,并點擊橙色按鈕就可以調用此函數了只要大于100就會打印flag,通過ropsten.etherscan.io可以查到此合約的交易和事件。
輸入101,點擊getFlag,然后確認即可
這邊會自動轉成16進制打印出來。
第三步 加載已部署合約
首先我們部署好的合約地址是可以在這邊看到
如果是我們自己要加載我們自己的合約的話,可以直接通過第二步說的At Address加載
點擊At Address即可
以上都是在remix下測試的,如果我們要加載他人的合約就需要在geth下測試
第四步 和已知合約地址交互
這邊首先獲得一個我們部署好的合約地址,記錄下來
在這邊聲明函數原型
編譯完成后這邊會出現我們編譯好的test.sol
在At Address中填入我們之前記錄下來的合約地址,點擊藍色的At Address
這邊就已經實現交互了
這邊可以看到我們成功和合約進行了交易,點進去查看具體事件
發現成功打印了flag,證明我們成功調用了合約中的getFlag函數實現了和合約的交互
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的区块链之智能合约入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019浙江省大学生网络与信息安全竞赛决
- 下一篇: Docker配置CTF中的靶机环境