摘要:說明最近在做以太坊智能合約的開發,在使用做接口的時候遇到很多問題,記錄下來當做參考。簡單說下拍賣智能合約思路用戶注冊新用戶自動注冊一個賬戶地址發起拍賣最高者存在智能合約里拍賣結束獲取合約中的最高者關閉合約
說明
最近在做以太坊智能合約DAPP的開發,在使用PHP做接口的時候遇到很多問題,記錄下來當做參考。本文的操作環境為Mac,已經安裝好truffle/ganache等開發需要的相關工具
編寫智能合約
新建truffle項目
mkdir test_truffle cd test_truffle truffle init
新建一個Hello_falco合約并編譯
進入contracts目錄,新建Hello_falco.sol
pragma solidity ^0.4.17; contract Hello_falco { function say() public pure returns (string) { return "Hello falco"; } function print(string name) public pure returns (string) { return name; } }
執行truffle compile命令
可以看到Hello_falco.sol這個合約已經編譯了
編譯好的合約都會在build/contracts下生成一個json文件,打開剛剛生成的Hello_falco.json文件,可以看到有abi,bytecode等信息,以后要用到
配置truffle.js
module.exports = { networks: { development: { host: "127.0.0.1", port: 9545,//我本機的ganache端口 network_id: "*" } } };
執行truffle migrate --reset命令
合約已經遷移過去了,會消耗主賬號一部分ETH,可以看到賬號余額已經發生了變化
執行truffle console,打開控制臺
truffle(development)> var contract; undefined truffle(development)> Hello_falco.deployed().then(function(instance){contract= instance;}); undefined truffle(development)> contract.say(); "Hello falco"使用PHP+Laravel的方式部署合約
上面為使用truffle部署和測試合約,下面會使用PHP操作web3的方式再部署一次
安裝composer包composer require jcsofts/laravel-ethereum
詳細安裝說明Laravel ethereum
配置.env文件
ETH_HOST=http://127.0.0.1 ETH_PORT=9545編寫PHP部署合約方法
use JcsoftsLaravelEthereumFacadeEthereum; use JcsoftsLaravelEthereumLibEthereumTransaction; private $mainAddress = "0x80d2F5BA14983a671e29068958Eb60a45b01e49c"; public function deploy(){ $byteCode = "xxx"; $ethereumTransaction = new EthereumTransaction( $this->mainAddress,null,null,"0x47b760",null,$byteCode); $response = Ethereum::eth_sendTransaction($ethereumTransaction); dd($response); }
主賬號地址為ganache的第一個賬戶地址
智能合約的byteCode使用的是編譯好的Hello_falco.json中的bytecode段
0x47b760為gas,我設置的固定值用作測試
執行deploy方法之后,我們把response打印出來
0x0ca011fd3856b34ee5169ec0c0ddad465f5e6bec1795751b41bbab9e295ac0a0
這是一段TransactionHash,稍等之后我們來通過它來取部署后的合約地址
public function receipt(){ $hash = "0x0ca011fd3856b34ee5169ec0c0ddad465f5e6bec1795751b41bbab9e295ac0a0"; $response = Ethereum::eth_getTransactionReceipt($hash); dd($response); }
如圖我們拿到了合約地址,之后就可以通過上面的合約地址來執行智能合約內定義的方法體了
要訪問合約內的方法我們首先要獲取方法的簽名(function signature),那么如何獲取方法簽名呢?
1.進入truffle console控制臺
2.通過web3的sha3方法計算
truffle(development)> web3.sha3("say()") "0x954ab4b21481711a1e363afa5d2b9003ed2702949b83f2d36d03d3b90ebb0f26" truffle(development)> web3.sha3("say()").substr(2,8) "954ab4b2"
只需要拿到除去0x的前八位即可
繼續編寫say方法php函數
public function say(){ $contractAddress = "0x00a800ff57861294dd3db449dbe0367ae66d9e86"; $ethereumTransaction = new EthereumTransaction( $this->mainAddress,$contractAddress,null,"0x47b760",null,"0x954ab4b2"); $response = Ethereum::eth_sendTransaction($ethereumTransaction); dd($response); }
執行完之后我們會得到一串TransactionHash
如果一切正常那么我們的ganache log里會出現一個新區塊,php返回的TransactionHash就是這個區塊的Hash
如果出現錯誤或者方法不存在,會出現下面的情況
以上是一個簡單的hello world拋磚引玉,我們可以編寫更復雜的合約,比如拍賣、競猜的智能合約。
簡單說下拍賣智能合約思路:
用戶注冊(新用戶自動注冊一個賬戶地址personal_importRawKey)
發起拍賣(最高者存在智能合約里)
拍賣結束獲取合約中的最高者
關閉合約
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29208.html
摘要:使用基于以太坊的智能合約的集成開發環境。以太坊教程,主要介紹智能合約與應用開發,適合入門。以太坊,主要是介紹使用進行智能合約開發交互,進行賬號創建交易轉賬代幣開發以及過濾器和事件等內容。 Solidity是一種以智能合約為導向的編程語言。這是一種只有四年的年輕語言,旨在幫助開發基于以太坊數字貨幣的智能合約。 理解它官方文檔應該是學習Solidity的最佳來源:solidity.read...
摘要:在新智能合約的構造函數中,將引用我們的合約工廠的地址。以太坊,主要是針對工程師使用進行區塊鏈以太坊開發的詳解。以太坊入門教程,主要介紹智能合約與應用開發,適合入門。這里是原文用工廠模式管理多個智能合約 我們寫了一份小的計算合約作為Hello World。如果我們可以創建一個允許用戶創建自己的計數器的合約怎么辦? showImg(https://segmentfault.com/img/...
摘要:本文面向以太坊智能合約應用程序開發人員,并討論如何在密碼保護后,安全地運行你的以太坊節點,以便通過進行安全輸出。以太坊,主要是針對工程師使用進行區塊鏈以太坊開發的詳解。 本文面向以太坊智能合約應用程序開發人員,并討論如何在密碼保護后,安全地運行你的以太坊節點,以便通過Internet進行安全輸出。 Go Ethereum(geth)是以太坊節點最受歡迎的軟件。其他流行的以太坊實現是Pa...
摘要:本文面向以太坊智能合約應用程序開發人員,并討論如何在密碼保護后,安全地運行你的以太坊節點,以便通過進行安全輸出。以太坊,主要是針對工程師使用進行區塊鏈以太坊開發的詳解。 本文面向以太坊智能合約應用程序開發人員,并討論如何在密碼保護后,安全地運行你的以太坊節點,以便通過Internet進行安全輸出。 Go Ethereum(geth)是以太坊節點最受歡迎的軟件。其他流行的以太坊實現是Pa...
摘要:本文面向以太坊智能合約應用程序開發人員,并討論如何在密碼保護后,安全地運行你的以太坊節點,以便通過進行安全輸出。以太坊,主要是針對工程師使用進行區塊鏈以太坊開發的詳解。 本文面向以太坊智能合約應用程序開發人員,并討論如何在密碼保護后,安全地運行你的以太坊節點,以便通過Internet進行安全輸出。 Go Ethereum(geth)是以太坊節點最受歡迎的軟件。其他流行的以太坊實現是Pa...
閱讀 1882·2021-11-19 09:40
閱讀 2601·2021-08-30 09:46
閱讀 2183·2021-08-03 14:01
閱讀 2654·2019-08-30 10:54
閱讀 1205·2019-08-29 16:38
閱讀 1446·2019-08-29 11:02
閱讀 2541·2019-08-28 18:16
閱讀 1690·2019-08-28 18:09