最近公司因?yàn)檎{(diào)整原因,個(gè)人暫時(shí)沒(méi)有開(kāi)發(fā)工作,所以想把現(xiàn)有掌握的使用PHP開(kāi)發(fā)以太坊相關(guān)代碼整理一下普办。
起因是以太坊相關(guān)代碼中呈础,PHP算是比較少的,而實(shí)際項(xiàng)目中,一些功能的實(shí)現(xiàn)都是使用python或nodejs相關(guān)類庫(kù)官疲,然后通過(guò)命令行調(diào)用與PHP交互维费。由于項(xiàng)目又使用docker的緣故,產(chǎn)生了一系列諸如不知道怎么調(diào)用宿主機(jī)命令行之類的問(wèn)題,最后包裝成http服務(wù)進(jìn)行交互,感覺(jué)甚是麻煩。
代碼在github上開(kāi)源簇捍,地址為https://github.com/NanQi/ethereum-php
計(jì)劃代碼完善后梯投,發(fā)布成composer包么鹤,同時(shí)會(huì)支持laravel余佛。
使用PHP做以太坊相關(guān)開(kāi)發(fā),有一個(gè)類庫(kù)很全面,https://github.com/sc0Vu/web3.php
但是web3.php需要搭建本地以太坊節(jié)點(diǎn)今瀑,我們項(xiàng)目過(guò)程中因?yàn)楸镜毓?jié)點(diǎn)遇到的問(wèn)題大致有:
- 安全問(wèn)題,ETH被盜
- 使用go語(yǔ)言客戶端,需要維護(hù)所有的keystore
- web3.php沒(méi)有找到超時(shí)時(shí)間的配置
- 本地節(jié)點(diǎn)服務(wù)器重啟后長(zhǎng)時(shí)間同步區(qū)塊
- 用戶使用自己的錢包必須上傳keysotre
其實(shí)最大的問(wèn)題還是一套代碼跑不起來(lái),需要依賴本地節(jié)點(diǎn)服務(wù)。
此類庫(kù)不依賴本地節(jié)點(diǎn),使用etherscan和infura代理芯勘,主要適用于以太坊代幣開(kāi)發(fā)安疗,同時(shí)會(huì)增加創(chuàng)建合約功能掉冶,大致會(huì)完成以下幾個(gè)功能:
- 使用私鑰創(chuàng)建系統(tǒng)默認(rèn)錢包(用來(lái)做充幣地址)
- 使用助記詞創(chuàng)建錢包(用以錢包項(xiàng)目)
- 使用助記詞還原錢包
- 調(diào)用以太坊常用方法(查詢交易信息璧亚,是否成功疯搅,查詢以太坊余額等)
- 調(diào)用合約方法(查詢余額等)
- 執(zhí)行事務(wù)(給充幣地址轉(zhuǎn)以太坊手續(xù)費(fèi)收回代幣,轉(zhuǎn)代幣)
如果從項(xiàng)目層面來(lái)講晒骇,主要可以完成以下項(xiàng)目需求:
- 充幣
- 提幣
使用公共錢包的流程:
- 充幣地址充幣
充幣地址充幣需要每個(gè)用戶注冊(cè)或使用時(shí)創(chuàng)建一個(gè)新的錢包崭参,用戶操作APP或網(wǎng)站時(shí)查詢?cè)撳X包中是否有指定代幣海洼,有代幣則將代幣轉(zhuǎn)到公共錢包中完成充幣操作是整。因?yàn)橐驗(yàn)槌鋷诺刂穼?duì)應(yīng)的錢包剛開(kāi)始沒(méi)有以太坊,所以還需要從公共錢包中轉(zhuǎn)部分手續(xù)費(fèi)。 - 綁定錢包充幣
既然是綁定錢包充幣赴蝇,自然先要完成綁定錢包功能考余。類庫(kù)支持使用助記詞創(chuàng)建和恢復(fù)錢包,支持密碼和自定義BIP44的PATH雏门,用戶完成綁定錢包步脓,然后從綁定錢包直接充代幣到公共錢包完成充幣操作。 - 提幣
支持提幣到綁定錢包和其他錢包饭宾,系統(tǒng)操作公共錢包完成提幣操作否淤。
如果使用智能合約做充提幣操作嗡贺,因?yàn)閭€(gè)人沒(méi)有相關(guān)項(xiàng)目經(jīng)驗(yàn)岩臣,不知道需求如何定溜嗜,所以這里無(wú)法給出相關(guān)流程炸宵。
需求說(shuō)明到此結(jié)束会涎,歡迎留言交流討論练慕,個(gè)人QQ:二七五零96967