主页 > imtoken最新app下载 > 使用Django开发基于以太坊智能合约的DApp

使用Django开发基于以太坊智能合约的DApp

imtoken最新app下载 2023-03-30 05:52:02

以太坊和以太币有什么区别_以太坊私钥未加密_以太坊私钥怎么用

DApp概念及web3.py介绍

简单来说,DAPP 和普通的应用程序一样,只是它是完全去中心化的。 由类似于以太坊网络本身的节点运行的 DAPP 不依赖于任何中心化服务器。 DAPP 是去中心化的,可以全自动运行。

DAPP是Decentralized Application的缩写,中文叫分布式应用/去中心化应用。 一般来说,不同的DAPP会使用不同的底层区块链开发平台和共识机制,或者自己发行代币(区块链平台也可以使用相同的通用代币)。

接下来介绍一下DApp开发。 不可否认,DApp 开发的主要挑战之一是将智能合约与网站前端连接起来。 最高效的方法是使用 Web3 库(Python 或 Javascript)来实现。 这对于 Javascript 开发人员来说可以很快完成,因为网上有很多 Web3.js 的教程,但对于 Python 开发人员来说并不容易。

web3.py 是一个用于与以太坊节点通信的纯 Python JSON-RPC 包。 要使用此库,您需要一个运行中的启用了 HTTP 或 IPC 的以太坊节点。 虽然 Web3.js 社区非常庞大,但 Web3.py 在 Github 上也有超过 1500 颗星、133 名贡献者和一些有吸引力的以太坊 API。 web3.py社区已经足够成熟,Python开发者可以基于Web3.py开发区块链DAPP。

开发所需的工具

1. Remix IDE:一个开源IDE,不仅可以让你编写智能合约,还支持智能合约的测试、调试和部署。 阅读官方文档以获取更多信息:。

2. Infura:一个托管的以太坊节点集群,您可以将自己开发的以太坊智能合约部署到infura提供的节点上,而无需搭建自己的以太坊节点。

3. Django 3.0:基于Python的开源网络框架,可以快速开发安全可维护的网站。

python -m pip install Django

以太坊私钥未加密_以太坊和以太币有什么区别_以太坊私钥怎么用

4. Web3.py:一种使我们能够与智能合约对话并调用其功能的工具。 web3.py 官方文档:

pip3 install web3

访问区块链网络

首先以太坊私钥怎么用,如下所示将 Remix 上的环境更改为 Injected Web3,然后连接到 Metamask 上的 Ropsten Network。

以太坊私钥怎么用_以太坊私钥未加密_以太坊和以太币有什么区别

在开发之前,我们首先建立一个安全可靠的区块链连接。 没有 Infura 很难做到,因为现在我们只需要一个 Infura API 密钥。 请按照以下步骤获取 API 密钥:。

一旦您获得了 API 密钥并安装了上述工具,您就可以继续下一步了。 请注意,为保证项目进度,您可能需要获取ROPSTEN Network的Infura密钥。

连接到 WEB3.PY 并开始交互

以太坊私钥怎么用_以太坊私钥未加密_以太坊和以太币有什么区别

这段代码虽然很清楚,但只是一个基本的设置,我们还需要一些其他必要的因素,比如:

一种。 用于签署交易的私钥和公钥

以太坊私钥怎么用_以太坊和以太币有什么区别_以太坊私钥未加密

b. 为 web3 创建一个 HTTPProvider

C。 存储智能合约的ABI和地址

d. 通过将 ABI 和地址作为参数传递来创建智能合约实例

现在我们通过智能合约进行了一些安全设置。 然而,在掌握如何调用智能合约之前,了解我们可以进行哪些类型的调用很重要。

你想从智能合约中得到什么?

尽管我们可以执行多种功能,但以下 5 项可能是最重要的:

一种。 从智能合约调用 Getter 函数:

以太坊私钥未加密_以太坊私钥怎么用_以太坊和以太币有什么区别

虽然这看起来有点复杂,但您可以使用下面提到的简单方法来调用 getter 函数。

b. 调用一个简单的 Read_Only 函数(简单方法):

以太坊私钥怎么用_以太坊私钥未加密_以太坊和以太币有什么区别

以太坊和以太币有什么区别_以太坊私钥未加密_以太坊私钥怎么用

智能合约中的 read_only 函数可以看作是一个只有在调用时才返回特定数据的函数。 例如,这个带有 view 关键字的 get_count 函数在调用时只返回帖子总数。

Solidity代码写法如下:

function get_count() view public returns(uint){
return postCount;
}

为了方便调用,我们需要用一行简单的代码来实现这些功能。 这就是我们需要做的。

C。 使用函数实现Transaction(交易)

由于我们已经知道Read_Only函数,所以智能合约中可能还有其他函数需要传递一些参数,然后执行某些功能。 在区块链技术中,调用这些函数被认为是一笔交易,因为这样的函数调用会产生gas price。

让我们在智能合约中添加以下功能,Solidity代码如下:

function createPost(string memory _content) public
{
require(bytes(_content).length > 0);
postCount++;
posts[postCount] = Post(postCount,_content,0,msg.sender);
emit PostCreated(postCount,_content,0,msg.sender);
}

此代码从用户那里获取内容参数并将其添加到帖子列表中。 当用户试图更新区块链上的特定数据时,需要调用此类事务来执行一些操作。 这就形成了一笔交易。

那么如何交易呢?

以太坊私钥怎么用_以太坊和以太币有什么区别_以太坊私钥未加密

以太坊私钥怎么用_以太坊和以太币有什么区别_以太坊私钥未加密

这是一个复杂的过程,所以让我们一步一步地解释它。 如第 259 行所示,我们没有调用函数 createPost,而是创建了一个事务。 但是,buildTransaction 函数接收一个数据字典作为参数。

``chainId:由于每个以太坊网络都有自己的 ID,它只是代表我们连接到的网络 ID,在本例中,3 代表 Ropsten 网络。

gas:我们已经知道执行每笔交易都需要gas,这个参数表示我们需要为交易支付的最大gas量。

gasPrice:表示'gas'的单价,单位为Wei

nonce:表示用户上次交易的计数

我们根据自己的项目填写好参数后,就可以使用signTransaction函数对交易进行签名了。 该函数将此交易和私钥作为参数。

最后,当我们使用 waitForTransactionReceipt 函数收到交易收据时,我们知道交易已经完成。 一旦你得到这张交易收据,你就可以确定交易记录已经成功添加到区块链中。

d. 用以太坊支付

以太坊私钥怎么用_以太坊和以太币有什么区别_以太坊私钥未加密

如前所述,将以太币发送到智能合约或其他账户还涉及建立交易、使用私钥签名以及获得确认交易回执等步骤。

但是,它涉及其他两个领域,例如:

以太坊私钥未加密_以太坊私钥怎么用_以太坊和以太币有什么区别

to:表示交易的接收者

value:表示交易量

好的,这就是您从一个账户到另一个账户进行汇款交易所需要做的全部工作。

e. 通话事件

首先以太坊私钥怎么用,我们需要了解什么是“事件”。 在 Solidity 中,事件可以看作是交易日志中的实时记录,这些事件不仅存储在区块链中,而且如果给定时间,可以借助智能合约进行处理。

虽然本文的代码没有使用任何事件,但是我们可以在Web3.py的官方文档中了解调用事件的详细过程。

myContract = web3.eth.contract(address=contract_address, abi=contract_abi)
tx_hash = myContract.functions.myFunction().transact()
receipt = web3.eth.getTransactionReceipt(tx_hash)
myContract.events.myEvent().processReceipt(receipt)

这些是您在与智能合约交互时可能想要使用的调用方法。

虽然我们已经清楚的看到了使用web3.py与智能合约进行交互和调用具体函数的过程,但是还有最后一件事需要理解,那就是智能合约返回数据后我们需要做什么?

由于我们使用的是 Django Web 框架,因此了解它如何处理智能合约的响应并根据需要使用它非常重要。

在 Django 中处理来自智能合约的反馈