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