赞
踩
全堆栈开发人员习惯于同时开发后端和前端。使用 区块链 作为后端的问题是,它们的设置通常很复杂,与之交互更复杂。这会减慢存储和用户交互之间的简单交互。
dApp(去中心化应用程序)是与区块链交互的应用程序。目前最常见的是具有以下基本交互功能的web应用:
· 发送事务
· 获取事务状态
· 从智能合约获取当前状态
在开发过程中,最好简化此过程,这样我就不必每次都等待区块链处理我的交易了。我只想获取一些状态来渲染路由,以便使布局混乱。我还想在不模拟数据的情况下设计用户与区块链在不同路由上的交互。
在本文中,我将设置一个简单的Python网络服务器,该服务器将处理模拟交易到我的智能合约。这将使我能够使用现代的RESTful API模式轻松地为智能合约创建前端。
我们需要什么?
Lamden的主节点已经通过API向公共区块链提供服务。如果我们希望我们的签约服务器模仿区块链,这是一个很好的起点。
masternode API有许多与块,随机数和事务哈希有关的路由。但是我们的订约网络服务器不会花费很多精力或达成共识,因此我们不需要任何这些。
我们只关心让我们查看和更改状态的端点,因此我将列表与这五个配对。
POST /
提交交易记录
GET /ping
确保我们的服务器正在响应
GET /contracts
查看我们区块链上所有合约的名称
GET /contracts/<contract>
查看有关我们区块链上智能合约的特定信息:
· Code
· Methods
· State Variables
GET /contracts/<contract>/<variable>
获取变量的当前状态
设置
接下来我们需要安装Sanic服务器,它将是我们的Python web服务器。
1pip3 install sanic
创建服务器
创建一个新的服务器目录和一个名为contracting_server.py的文件。
首先复制sanic快速启动代码,并确保我们可以启动简单的服务器。
将此粘贴到contracting_server.py。
1# server/contracting_server.py
2from sanic import Sanic, response
3
4app = Sanic(“contracting server”)
5
[email protected](“/ping”)
7async def ping(request):
8 return response.json({‘status’: ‘online’})
9
10if __name__ == “__main__”:
11 app.run(host=”0.0.0.0″, port=3737)
然后从项目目录运行
1python3 test/contracting_server.py
您应该得到这个输出,指示您的web服务器处于活动状态,并监听端口3737。
1[2020-06-01 11:37:30 -0400] [8137] [INFO] Goin’ Fast @ http://0.0.0.0:3737
2[2020-06-01 11:37:30 -0400] [8137] [INFO] Starting worker [8137]
我们还要测试一下我们的API的ping端点是否正常运行。打开您的Internet浏览器,然后导航到http://localhost:3737 / ping。您将获得一个JSON状态对象,指示服务器在线!
完美,我们现在可以添加一些端点来返回有关我们的合约环境的信息。
GET /contracts
该端点将返回当前提交给订约客户的所有合约。
默认情况下,合同包仅包含1个合约(提交合约)。因此我们需要添加我们的合约来了解合约。通过添加签约客户并调用前一教程的测试中的方法来做到这一点。
1# server/contracting_server.py
2from sanic import Sanic, response
3
4from contracting.client import ContractingClient
5client = ContractingClient()
6
7with open(‘my_token.py’) as f:
8 code = f.read()
9 client.submit(code, name=’my_token’)
10
11app = Sanic(“contracting server”)
12
[email protected](“/ping”)
14…
现在,当智能合约服务器启动时,它将默认添加我们的智能合约。
client.get_contracts()将返回加载到签约客户端中的所有智能合约的列表。
通过添加以下代码来创建端点,以提供调用client.get_contracts()的结果。
1# server/contracting_server.py
2…
3return response.json({‘status’: ‘online’})
4
5# Get all Contracts in State (list of names)
[email protected](“/contracts”)
7async def get_contracts(request):
8 contracts = client.get_contracts()
9 return response.json({‘contracts’: contracts})
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。