python如何使用web3py與以太坊投資智能合約交互

在以太坊和其他區(qū)塊鏈中,仍有很多被證明的概念正在實施,開發(fā)人員在嘗試如何應(yīng)對這些新概念。作為dInvest 系列文章一部分潦刃,我也在研究以太坊并嘗試在區(qū)塊鏈中實施對沖基金。在上一篇文章中稠肘,我討論了如何在python中啟動和運行定量框架福铅。在這篇文章中萝毛,我將介紹如何將python程序與以太坊智能合約集成项阴。出于這樣或那樣的原因,可能也面臨著這個問題,盡管以太坊提供了圖靈完備語言环揽,但并不是所有事情都能完成略荡。

假設(shè)你已經(jīng)在以太坊創(chuàng)建了一個簡單的教程合約,現(xiàn)在想要看一些更高級的東西歉胶。我個人喜歡ManuelAráoz的Hitchhiker智能合約指南汛兜,以邊可以開始使用更復(fù)雜的代碼,設(shè)置testrpc和truffle通今。建議大家看看粥谬。

dInvest智能合約

dInvest由一份智能合約組成,負(fù)責(zé)進(jìn)行投資辫塌,驗證投資標(biāo)準(zhǔn)和回報分配漏策。合約規(guī)定了公共職能部門,以創(chuàng)造新的投資和撤資臼氨,這將成為對沖基金的主要職能掺喻。對沖基金的用戶通過其以太坊地址來識別,該地址相當(dāng)于公鑰储矩。投資策略和策略執(zhí)行的建議在具有以太坊地址的不同代理中完成感耙。這些代理僅由合約創(chuàng)建者設(shè)置。當(dāng)用戶創(chuàng)建投資時持隧,可以根據(jù)標(biāo)準(zhǔn)行業(yè)分類代碼指定由兩位數(shù)字標(biāo)識的行業(yè)部門列表即硼。在進(jìn)行投資時,這些部門可以被確定為黑名單屡拨。因此谦絮,用戶有能力控制對沖基金將投資的行業(yè)。

合同可以在the GitHub repo中找到洁仗。

與智能合約的互動

要與智能合約進(jìn)行交互层皱,有幾個選項,包括RPC或JavaScript API赠潦。我發(fā)現(xiàn)與其他程序(如python程序)的以太坊智能合約進(jìn)行交互的最簡單方法是使用他們的web3 JavaScript API叫胖。因為dInvest的大部分都是用python編寫的,所以我想堅持使用該語言而不是包含JS她奥。幸運的是瓮增,python中有一個web3實現(xiàn)。為了啟動并運行dInvest設(shè)置哩俭,我切換到virtualenv绷跑,我還安裝了zipline,然后使用pip install web3安裝web3凡资。

使用web3砸捏,有三個步驟可以讓你啟動并運行以與智能合約進(jìn)行交互:

得到你的ABI

設(shè)置RPC連接

與智能合約互動

在接下來的部分中,我將詳細(xì)介紹如何實現(xiàn)這三個步驟。我主要使用它作為其他程序的python模塊垦藏。最后我們的python模塊結(jié)構(gòu)可能如下所示:

contract|-- __init__.py|-- ContractHandler.py|-- your-contract-name.json

得到你的ABI

現(xiàn)在梆暖,要與任何智能合約進(jìn)行交互,你需要合同定義的應(yīng)用程序二進(jìn)制接口(ABI)掂骏。ABI是一種靜態(tài)的強(qiáng)類型接口轰驳。無論何時創(chuàng)建新合約或更改現(xiàn)有合約,你的ABI也可能發(fā)生變化弟灼。根據(jù)我的經(jīng)驗级解,獲得智能合約的當(dāng)前ABI的最簡單方法(可能是你的或任何你有源代碼的合約)是去https://ethereum.github.io/browser-solidity/并復(fù)制/粘貼你的代碼。然后按右上側(cè)的Compile按鈕田绑,將Interface字段中的整個字符串復(fù)制到y(tǒng)our-contract-name.json文件中蠕趁。擁有該JSON后,你的web3接口將知道如何與合約進(jìn)行交互辛馆。

設(shè)置RPC提供程序

下一步俺陋,你需要連接到RPC提供程序。在你的python文件(例如ContractHandler.py)中包含這些代碼行:

from web3 import Web3, TestRPCProviderclassContractHandler:def__init__(self):self.web3 = Web3(RPCProvider(host='localhost', port='8545'))? ? with open(str(path.join(dir_path,'contract_abi.json')),'r') asabi_definition:self.abi = json.load(abi_definition)self.contract_address = your_contract_addressself.contract =self.web3.eth.contract(self.abi,self.contract_address)

我更喜歡將我的配置放在一個單獨的文件中昙篙。有很多方法可以做到這一點腊状,似乎python中沒有標(biāo)準(zhǔn)。我想使用txt文件并不是最好的選擇苔可,我很快打算切換到y(tǒng)ml缴挖。另請參見https://martin-thoma.com/configuration-files-in-python/。確保在開始程序之前運行你最喜愛的以太坊客戶端(例如geth --rpc)焚辅。

與智能合約互動

注意:在與你自己的帳戶進(jìn)行交互之前映屋,你需要先將其解鎖。這是通過web3實現(xiàn)的:

self.web3.personal.unlockAccount(your_ethereum_account,your_ethereum_password)

如果要在合約中調(diào)用函數(shù)同蜻,可以通過調(diào)用ABI合約定義的命令來執(zhí)行此操作棚点。在我們的dInvest示例中,有一個合約調(diào)用它為我們的可持續(xù)投資返回黑名單公司湾蔓。它可以這樣調(diào)用:

blacklist= self.contract.call().blackListCompanies()

GitHub代碼中有更多示例可用瘫析。

最后的說明

最后,我想指出默责,還有其他區(qū)塊鏈解決方案贬循,如Hyperledger Fabric或Tendermint,旨在解決與其他編程語言兼容的問題桃序,交易吞吐量等杖虾。因為他們是需要許可證的區(qū)塊鏈我還沒有給嘗試他們,但有機(jī)會看看可能會很有趣媒熊。

當(dāng)然奇适,python用web3.py庫開發(fā)以太坊來說非常的方便坟比,有興趣的用戶可以關(guān)注我們的python以太坊教程,主要是針對python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解滤愕。

另外其他語言可以學(xué)習(xí)的以太坊教程如下:

web3j教程,主要是針對java和android程序員進(jìn)行區(qū)塊鏈以太坊開發(fā)的web3j詳解怜校。

以太坊教程间影,主要介紹智能合約與dapp應(yīng)用開發(fā),適合入門茄茁。

以太坊開發(fā)魂贬,主要是介紹使用node.js、mongodb裙顽、區(qū)塊鏈付燥、ipfs實現(xiàn)去中心化電商DApp實戰(zhàn),適合進(jìn)階愈犹。

php以太坊键科,主要是介紹使用php進(jìn)行智能合約開發(fā)交互,進(jìn)行賬號創(chuàng)建漩怎、交易勋颖、轉(zhuǎn)賬、代幣開發(fā)以及過濾器和事件等內(nèi)容勋锤。

C#以太坊饭玲,主要講解如何使用C#開發(fā)基于.Net的以太坊應(yīng)用,包括賬戶管理叁执、狀態(tài)與交易茄厘、智能合約開發(fā)與交互、過濾器和事件等谈宛。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末次哈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吆录,更是在濱河造成了極大的恐慌亿乳,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件径筏,死亡現(xiàn)場離奇詭異葛假,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)滋恬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進(jìn)店門聊训,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恢氯,你說我怎么就攤上這事带斑」乃拢” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵勋磕,是天一觀的道長妈候。 經(jīng)常有香客問我,道長挂滓,這世上最難降的妖魔是什么苦银? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮赶站,結(jié)果婚禮上幔虏,老公的妹妹穿的比我還像新娘。我一直安慰自己贝椿,他們只是感情好想括,可當(dāng)我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烙博,像睡著了一般瑟蜈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渣窜,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天踪栋,我揣著相機(jī)與錄音,去河邊找鬼图毕。 笑死夷都,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的予颤。 我是一名探鬼主播囤官,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蛤虐!你這毒婦竟也來了党饮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤驳庭,失蹤者是張志新(化名)和其女友劉穎刑顺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饲常,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡蹲堂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贝淤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柒竞。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖播聪,靈堂內(nèi)的尸體忽然破棺而出朽基,到底是詐尸還是另有隱情布隔,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布稼虎,位于F島的核電站衅檀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏霎俩。R本人自食惡果不足惜哀军,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茸苇。 院中可真熱鬧排苍,春花似錦沦寂、人聲如沸学密。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腻暮。三九已至,卻和暖如春毯侦,著一層夾襖步出監(jiān)牢的瞬間哭靖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工侈离, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留试幽,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓卦碾,卻偏偏與公主長得像铺坞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洲胖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 原文:Smart contracts 正如我們在[intro]中看到的那樣济榨,以太坊中有兩種不同類型的帳戶:外部擁有...
    Jisen閱讀 4,937評論 1 7
  • 在以太坊和其他區(qū)塊鏈中,仍有很多被證明的概念正在實施绿映,開發(fā)人員在嘗試如何應(yīng)對這些新概念擒滑。作為dInvest 系列文...
    編程狂魔閱讀 1,043評論 0 1
  • 1. 文章摘要 【本文目標(biāo)】了解ETH生態(tài)下DAPP去中心化應(yīng)用程序的框架和交互流程,了解WEB3.JS的作用和接...
    筆名輝哥閱讀 6,042評論 0 49
  • 前一段時間忽然想到同理心這個詞叉弦,百度一下大概意思就是說要從對方的心理才揣度問題丐一,而不是自我出發(fā),以己度人淹冰。比如將心...
    墨韻書香閱讀 979評論 7 0
  • 1.昨天和同事在樓下食堂吃飯钝诚,人多、擠榄棵,不僅要排隊打飯凝颇,還要排隊付款潘拱,高峰期要20分鐘才能吃上飯。怎么樣才能提高效...
    空靈一月閱讀 252評論 0 0