摘要:合約規(guī)定了公共職能部門,以創(chuàng)造新的投資和撤資,這將成為對沖基金的主要職能。對沖基金的用戶通過其以太坊地址來識別,該地址相當于公鑰。我發(fā)現(xiàn)與其他程序如程序的以太坊智能合約進行交互的最簡單方法是使用他們的。
在以太坊和其他區(qū)塊鏈中,仍有很多被證明的概念正在實施,開發(fā)人員在嘗試如何應對這些新概念。作為dInvest 系列文章一部分,我也在研究以太坊并嘗試在區(qū)塊鏈中實施對沖基金。在上一篇文章中,我討論了如何在python中啟動和運行定量框架。在這篇文章中,我將介紹如何將python程序與以太坊智能合約集成。出于這樣或那樣的原因,可能也面臨著這個問題,盡管以太坊提供了圖靈完備語言,但并不是所有事情都能完成。
假設你已經(jīng)在以太坊創(chuàng)建了一個簡單的教程合約,現(xiàn)在想要看一些更高級的東西。我個人喜歡ManuelAráoz的Hitchhiker智能合約指南,以邊可以開始使用更復雜的代碼,設置testrpc和truffle。建議大家看看。
dInvest智能合約dInvest由一份智能合約組成,負責進行投資,驗證投資標準和回報分配。合約規(guī)定了公共職能部門,以創(chuàng)造新的投資和撤資,這將成為對沖基金的主要職能。對沖基金的用戶通過其以太坊地址來識別,該地址相當于公鑰。投資策略和策略執(zhí)行的建議在具有以太坊地址的不同代理中完成。這些代理僅由合約創(chuàng)建者設置。當用戶創(chuàng)建投資時,可以根據(jù)標準行業(yè)分類代碼指定由兩位數(shù)字標識的行業(yè)部門列表。在進行投資時,這些部門可以被確定為黑名單。因此,用戶有能力控制對沖基金將投資的行業(yè)。
合同可以在the GitHub repo中找到。
與智能合約的互動要與智能合約進行交互,有幾個選項,包括RPC或JavaScript API。我發(fā)現(xiàn)與其他程序(如python程序)的以太坊智能合約進行交互的最簡單方法是使用他們的web3 JavaScript API。因為dInvest的大部分都是用python編寫的,所以我想堅持使用該語言而不是包含JS。幸運的是,python中有一個web3實現(xiàn)。為了啟動并運行dInvest設置,我切換到virtualenv,我還安裝了zipline,然后使用pip install web3安裝web3。
使用web3,有三個步驟可以讓你啟動并運行以與智能合約進行交互:
得到你的ABI
設置RPC連接
與智能合約互動
在接下來的部分中,我將詳細介紹如何實現(xiàn)這三個步驟。我主要使用它作為其他程序的python模塊。最后我們的python模塊結構可能如下所示:
contract |-- __init__.py |-- ContractHandler.py |-- your-contract-name.json得到你的ABI
現(xiàn)在,要與任何智能合約進行交互,你需要合同定義的應用程序二進制接口(ABI)。ABI是一種靜態(tài)的強類型接口。無論何時創(chuàng)建新合約或更改現(xiàn)有合約,你的ABI也可能發(fā)生變化。根據(jù)我的經(jīng)驗,獲得智能合約的當前ABI的最簡單方法(可能是你的或任何你有源代碼的合約)是去https://ethereum.github.io/browser-solidity/并復制/粘貼你的代碼。然后按右上側的Compile按鈕,將Interface字段中的整個字符串復制到your-contract-name.json文件中。擁有該JSON后,你的web3接口將知道如何與合約進行交互。
設置RPC提供程序下一步,你需要連接到RPC提供程序。在你的python文件(例如ContractHandler.py)中包含這些代碼行:
from web3 import Web3, TestRPCProvider class ContractHandler: def __init__(self): self.web3 = Web3(RPCProvider(host="localhost", port="8545")) with open(str(path.join(dir_path, "contract_abi.json")), "r") as abi_definition: self.abi = json.load(abi_definition) self.contract_address = your_contract_address self.contract = self.web3.eth.contract(self.abi, self.contract_address)
我更喜歡將我的配置放在一個多帶帶的文件中。有很多方法可以做到這一點,似乎python中沒有標準。我想使用txt文件并不是最好的選擇,我很快打算切換到y(tǒng)ml。另請參見https://martin-thoma.com/configuration-files-in-python/。確保在開始程序之前運行你最喜愛的以太坊客戶端(例如geth --rpc)。
與智能合約互動注意:在與你自己的帳戶進行交互之前,你需要先將其解鎖。這是通過web3實現(xiàn)的:
self.web3.personal.unlockAccount(your_ethereum_account, your_ethereum_password)
如果要在合約中調用函數(shù),可以通過調用ABI合約定義的命令來執(zhí)行此操作。在我們的dInvest示例中,有一個合約調用它為我們的可持續(xù)投資返回黑名單公司。它可以這樣調用:
blacklist = self.contract.call().blackListCompanies()
GitHub代碼中有更多示例可用。
最后的說明最后,我想指出,還有其他區(qū)塊鏈解決方案,如Hyperledger Fabric或Tendermint,旨在解決與其他編程語言兼容的問題,交易吞吐量等。因為他們是需要許可證的區(qū)塊鏈我還沒有給嘗試他們,但有機會看看可能會很有趣。
當然,python用web3.py庫開發(fā)以太坊來說非常的方便,有興趣的用戶可以關注我們的python以太坊教程,主要是針對python工程師使用web3.py進行區(qū)塊鏈以太坊開發(fā)的詳解。
這里是原文
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/42428.html
摘要:是一個用于連接以太坊區(qū)塊鏈的庫。網(wǎng)絡執(zhí)行以太坊協(xié)議,該協(xié)議定義節(jié)點彼此之間的交互規(guī)則及網(wǎng)絡上的智能合約。數(shù)據(jù)庫設計下一步是設計數(shù)據(jù)庫。 關于區(qū)塊鏈介紹性的研討會通常以易于理解的點對點網(wǎng)絡和銀行分類賬這類故事開頭,然后直接跳到編寫智能合約,這顯得非常突兀。因此,想象自己走進叢林,想象以太坊區(qū)塊鏈是一個你即將研究的奇怪生物。今天我們將觀察該生物,并與其進行交互然后將有關它的所有數(shù)據(jù)收集到一...
摘要:是一個用于連接以太坊區(qū)塊鏈的庫。網(wǎng)絡執(zhí)行以太坊協(xié)議,該協(xié)議定義節(jié)點彼此之間的交互規(guī)則及網(wǎng)絡上的智能合約。數(shù)據(jù)庫設計下一步是設計數(shù)據(jù)庫。 關于區(qū)塊鏈介紹性的研討會通常以易于理解的點對點網(wǎng)絡和銀行分類賬這類故事開頭,然后直接跳到編寫智能合約,這顯得非常突兀。因此,想象自己走進叢林,想象以太坊區(qū)塊鏈是一個你即將研究的奇怪生物。今天我們將觀察該生物,并與其進行交互然后將有關它的所有數(shù)據(jù)收集到一...
摘要:通信服務提供接口是如何與區(qū)塊鏈交互的關鍵。這通常通過將請求提交給基于或套接字的服務器來完成。初始化時會發(fā)生自動檢測有時,無法自動檢測節(jié)點的位置。使用自動檢測的示例一些節(jié)點提供超出標準的。是套接字的文件系統(tǒng)路徑。 通信服務提供接口是web3如何與區(qū)塊鏈交互的關鍵。接口接受JSON-RPC請求并返回響應。這通常通過將請求提交給基于HTTP或IPC套接字的服務器來完成。 如果你已經(jīng)愉快地連接...
閱讀 676·2021-11-24 09:39
閱讀 2343·2021-11-22 13:54
閱讀 2211·2021-09-23 11:46
閱讀 3257·2019-08-30 15:55
閱讀 2692·2019-08-30 15:54
閱讀 2419·2019-08-30 14:18
閱讀 1556·2019-08-29 14:15
閱讀 2745·2019-08-29 13:49