如何在Polkadot构建和部署智能合约

区块链研究实验室 view 1994 2021-4-20 12:40
share to
Scan QR code with WeChat

Polkadot是下一代区块链协议,它将多个专用区块链连接到一个统一网络中。它以以前的区块链网络的革命性前景为基础,同时提供了一些基本优势。

Polkadot的优点

Polkadot项目将通过提供类似桥的框架来彻底改变区块链技术,该框架具有以下优点:

无限的可扩展性-Polkadot可以支持无限数量的区块链并允许它们连接(被称为顺链)。

适应性共识机制—由于不同的区块链在不同的共识机制上运行,Polkadot平台提供了一个开放且适应性强的共识机制。

跨链交易—该框架可支持不同区块链之间的价值转移。

定义的治理机制—它具有定义的治理机制,从而消除其他区块链面临的主要问题。

可升级性— Polkadot支持升级,而不必借助费力的硬分叉来实施更改。

集合安全性-与Polkadot连接的区块链可以通过统一的安全保护伞来保护。这可以保护没有安全引导的小型链。

低交易费用– Polkadot与以太坊相比,其交易费用较低。

智能合约

智能合约是一种自我执行的软件,由P2P网络管理。它是有效的权限管理工具,无需传统的法律合同即可为网络参与者之间的协议提供协调和执行框架。它们可用于形式化两方之间的简单协议,组织的章程或创建代币。

在我们今天使用的Internet上,许多技术巨头(例如Amazon,eBay,Airbnb,Uber等)的商业模式和“存在的理由”都会由于缺乏一个可信赖的本地结算层而造成的对不认识的交易者缺乏信任。智能合约提供了精确解决该问题的解决方案。他们可以正式建立个人与机构之间的关系以及他们在Internet上完全拥有的P2P关系,而无需信任的中介。

尽管智能合约的概念并不新鲜,但区块链技术似乎是智能合约实施的催化剂。智能合约的一种更原始的形式是自动售货机。交易规则被编程到机器中。您可以通过按与该产品相关的数字来选择一种产品,插入硬币,然后机器会检查您是否投入了足够的钱,从而充当了智能合约。

自我执行协议

智能合约是嵌入在由区块链管理的计算机代码中的自我执行协议。该代码包含一组规则,根据该规则,该智能合约的各方同意彼此交互。如果并且当满足预定义的规则时,将自动执行该协议。智能合约提供了有效管理令牌化资产和两方或多方之间访问权限的机制。

如果满足特定的预定条件,人们就可以将其视为可以解锁价值或访问权限的密码盒。他们管理的基础价值和访问权限存储在区块链中,该区块链是透明的共享分类帐,可以保护它们免受删除,篡改和修订。因此,智能合约可以从区块链内部(其他智能合约)和外部(外部数据源)的实体调用智能合约。

在这些实体中,所谓的“预言家”将与智能合约相关的数据从链上世界注入到智能合约信息存储中。如果执行得当,智能合约可以提供优于传统合约法的交易安全性,从而降低审计和执行此类协议的协调成本。

他们可以实时跟踪协议的执行情况,因此可以节省成本,因为合规性和控制权是即时发生的。智能合约将协议的交易成本降低了几个数量级;具体而言,它们降低了达成协议,形式化和实施的成本。

如何在Polkadot构建和部署智能合约

此外,智能合约安全性仍然是一个需要在技术层面解决的问题。我们还需要能够执行更复杂的合同条款,包括分散的争端解决工具。尽管这种发展可能需要更多时间才能成熟,但一些有趣的争端解决方案已经在开发中,例如“ Kleros”,“开放式法律”或“ Jur”。随着技术变得更加成熟和广泛以及采用法律标准,我们可能会在未来几年看到合法合同和智能合同的融合。但是,我们目前仍缺乏最佳实践,可能需要一些时间才能进入集体学习阶段。

用例

智能合约用例的范围从简单到复杂。它们可用于简单的经济交易,智能合约还可用于注册任何种类的所有权和产权。智能合约有可能破坏许多行业。用例可以在银行,保险,能源,电子政务,电信,音乐行业,艺术,移动性,教育等领域。

如何在Polkadot构建和部署智能合约

使用智能合约,每个协议,每个流程,任务和付款都可以具有数字记录和签名,可以对其进行识别,验证,存储和共享。诸如“ Bernstein”(专利注册机构)或政府和半政府注册机构(土地所有权,出生证类别,学校和大学学位)之类的时间戳服务是简单的技术用例的示例。

虽然时间戳服务在技术层面上很容易实现,但根据行业类型和特定用例,此类用例的监管方面可能要复杂得多。此外,智能合约还可用于商品或服务供应链中众多参与者之间更为复杂的协议,或在不需要传统的集中式机构的情况下管理一群拥有相同兴趣和目标的人。分散式自治组织(DAO)就是这样的一个例子,可能代表了最复杂的智能合约。因此,智能合约可以规范治理规则(组织的章程,治理法规,议事规则或组织章程),并用自我执行的代码代替日常运营管理。

模型

以太坊2.0中的分片都具有相同的状态转换函数(STF),就像管理区块链如何更改每个区块的状态的规则中的规则一样。该STF提供了用于智能合约执行的界面。合同存在于单个分片上,并且可以在分片之间发送异步消息。

同样,在Polkadot中,每个分片都承载核心逻辑,这些分片并行执行,并且Polkadot可以发送跨分片的异步消息。但是,每个Polkadot分片(在Polkadot术语中为“对链”)都具有唯一的STF。通过组合逻辑,应用程序可以存在于单个碎片中,也可以存在于多个碎片中。Polkadot使用WebAssembly(Wasm)作为“元协议”。碎片的STF可以是抽象的,只要Polkadot上的验证程序可以在Wasm环境中执行即可。

建筑学

如何在Polkadot构建和部署智能合约

Polkadot是具有共享安全性和互操作性的异构多链。

中继链

中继链是PolkaDOT的中央链。Polkadot的所有验证器都已放置在DOT的中继链上,并进行中继链验证。中继链由相对较少的交易类型组成,其中包括与治理机制进行交互,平行链拍卖以及参与NPoS的方式。中继链故意具有最小的功能,主要职责是协调整个系统。

平行链和平行线程插槽

Polkadot可支持多个执行插槽。这些插槽就像计算机处理器上的核心(例如,现代笔记本电脑的处理器可能具有八个核心)。这些内核中的每个内核可以一次运行一个进程,Polkadot使用两种订阅模型允许这些插槽:并行链和并行线程。平行链有一个专用的链槽(核心),就像一个不断运行的过程。Parathread在组中共享插槽,因此更像是需要唤醒且运行频率较低的进程。

整个Polkadot网络上发生的大多数计算都将委托给处理各种用例的特定parachain或parathread实现。Polkadot对平行链可以做什么没有任何限制,除了它们必须能够生成可以由分配给平行链的验证者验证的证据外。该证明验证了旁链的状态转变。

一些平行链可能特定于特定的应用程序,另一些平行链可能专注于诸如智能合约,隐私或可伸缩性之类的特定功能-仍然,其他平行链可能是实验性架构,本质上不一定是区块链。

Polkadot提供了多种方法来在特定时间段内固定旁链插槽的插槽。Parathread是共享插槽的池的一部分,必须赢得各个块的拍卖。并行线程和并行链具有相同的API。他们的区别是经济上的。平行链将必须在其插槽租赁期间保留DOT;parathreads将按块收费。平行线程可以变成平行链,反之亦然。

共享安全

连接到Polkadot中继链的平行链都共享中继链的安全性。Polkadot在中继链和所有连接的副链之间具有共享状态。如果中继链由于某种原因必须还原,那么所有平行链也将还原。这是为了确保整个系统的有效性可以持续存在,并且任何单个部分都不可损坏。

共享状态使得使用Polkadot平行链时的信任假设仅是中继链验证器集中的那些,而没有其他假设。由于预计中继链上设置的验证器将是安全的,并且要有大量股份支持该验证器,因此旁链应从这种安全性中受益。

基板

基板是用于构建区块链的开源,模块化和可扩展框架。

底层从头开始进行了灵活设计,使创新者可以设计和构建满足其需求的区块链网络。它提供了构建自定义区块链节点所需的所有核心组件。

基板开发人员中心节点模板

我们以Node Template的形式提供了一个开箱即用的基于Substrate的节点,您在阅读本文时应对其进行编译。无需进行任何更改,您可以共享此节点模板,并创建具有加密货币和所有内容的有效的区块链网络!

我们将教您如何在“开发”模式下使用该节点,该模式使您可以在单个节点上运行网络,并拥有一些预先配置的有资金的用户帐户。

建立和部署合同

1.安装先决条件

# Install Homebrew if necessary https://brew.sh/ /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" # Make sure Homebrew is up-to-date, install openssl brew update brew install openssl

2.Rust开发人员环境

# Install curl https://sh.rustup.rs -sSf | sh # Configure source ~/.cargo/envrustup default stable

3.基材的最新报道

自行构建Substrate的开发人员应始终每晚稳定使用Rust的最新无错误版本。这是因为Substrate代码库遵循Rust每晚的技巧,这意味着Substrate的更改通常取决于Rust每晚编译器的上游更改。为了确保您的Rust编译器始终是最新的,您应该运行:

rustup updaterustup update nightlyrustup target add wasm32-unknown-unknown --toolchain nightly

4.Wasm工具链

现在,配置每晚版本以与Wasm编译目标一起使用:

rustup target add wasm32-unknown-unknown — toolchain nightly

5.编译基板

一旦安装了先决条件,您就可以使用Git克隆Substrate Developer Hub节点模板,这是在Substrate上构建的良好起点。

git clone -b v3.0.0 — depth 1 https://github.com/substrate-developer-hub/substrate-node-template6.编译节点模板
cd substrate-node-template # NOTE: you should always use the `--release` flag cargo build --release # ^^ this will take a while!

7.安装前端模板

本教程使用ReactJS前端模板来允许您与应该在上一步中开始编译的基于Substrate的区块链节点进行交互。将来,您可以使用相同的前端模板为自己的项目创建UI。

要使用前端模板,你需要的纱线,其本身需要Node.js的。如果您没有这些工具,则必须按照以下说明进行安装:

安装Node.js

安装纱

现在,您可以使用这些命令来设置前端模板。

# Clone the frontend template from github git clone -b v3.0.0 --depth 1 https://github.com/substrate-developer-hub/substrate-front-end-template # Install the dependencies cd substrate-front-end-template yarn install

8.启动节点

运行以下命令以启动您的节点:

# Run a temporary node in development mode ./target/release/node-template — dev — tmp

使用此命令,如果您的节点运行成功,您应该会看到类似以下的内容:

如何在Polkadot构建和部署智能合约

节点已启动

Start the Front-End Template# Make sure to run this command in the root directory of the Front-End Template yarn start

如何在Polkadot构建和部署智能合约

前端

9.合约组成

对于使用其他现代智能合约语言进行编程的开发人员,应该感到熟悉。合同的骨架具有您可能期望的所有相同组件:

大事记

贮存

部署(构造函数)功能

公共职能

内部功能

每个合约功能明确定义了可变性和可见性。在这些功能中,您可以访问几种常见的基材类型,如AccountId,Balances,Hash,等。

10.创造an ink!项目

我们将使用an ink!CLI生成Substrate智能合约项目所需的文件。

确保您位于工作目录中,然后运行:

cargo contract new flippercd flipper/flipper|+-- lib.rs <-- Contract Source Code|+-- Cargo.toml <-- Rust Dependencies and ink! Configuration|+-- .gitignore

11.建立合同

运行以下命令来编译您的智能合约:

cargo +nightly contract build

将项目投影为Wasm二进制文件,元数据文件(包含合同的ABI)和将.contract两者捆绑在一起的文件。该文件可用于将合同部署到链中。如果一切顺利,您应该看到一个target包含以下文件的文件夹:

target└── flipper.wasm└── metadata.json└── flipper.contract

12.测试您的合同

您将在源代码底部看到一个简单的测试,它可以验证合同的功能。

在您的项目文件夹中运行:

cargo +nightly test

您应该看到要成功完成的测试:

$ cargo +nightly test running 2 tests test flipper::tests::it_works ... ok test flipper::tests::default_works ... oktest result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

13.部署合同

现在我们已经从源代码生成了Wasm二进制文件并启动了Canvas节点,我们希望将该合同部署到我们的Substrate区块链上。

Substrate上的智能合约部署与传统智能合约区块链上的部署有些不同。

每次您在其他平台上推送合同时,都会部署一个全新的智能合同源代码块,而Substrate选择优化此行为。。

在Substrate中,合同部署过程分为两个部分:

将您的代码放在区块链上

创建合同实例

通过这种模式,可以将诸如ERC20标准之类的合同代码一次性放置在区块链上,但是可以实例化任意次。

无需持续上传相同的源代码并浪费区块链上的空间。

如何在Polkadot构建和部署智能合约

上载Wasm和元数据

将代码放在上,当您按Deploy时,应该会看到一系列事件,包括创建新帐户(system.NewAccount)和合同的实例化(contracts.instantiate):

打开“画布UI”的特殊设计的“上传”部分。

使用下拉菜单选择具有一些帐户余额的部署帐户,例如Alice。在输入字段中输入合同名称。提供flipper.contract文件作为捆绑的Wasm Blob和元数据。

如何在Polkadot构建和部署智能合约

14.签订合同

单击上载,然后在确认页面上签名并提交。

如何在Polkadot构建和部署智能合约

这应该发出一个contracts.PutCode事件。如果交易成功,您将收到一个system.ExtrinsicSuccess事件,您的WASM合同将存储在您的Substrate区块链上!

创建合同实例

智能合约作为区块链上会计系统的扩展而存在。因此,创建此合同的实例将创建一个新合同,该合同将AccountId存储由智能合同管理的任何余额并允许我们与合同进行交互。

在上一步中上传合同后,确认屏幕将显示代表我们的智能合同的信息。现在,我们需要部署智能合约来创建实例。在确认屏幕上按“部署代码”按钮。

要实例化我们的合同,请接受默认选项,为该合同帐户提供一笔of赋,1000 Units用于支付存储租金,并将最大允许汽油价值设置为1000000:

如何在Polkadot构建和部署智能合约

当您按Deploy时,应该会看到一系列事件,包括创建新帐户(system.NewAccount)和实例化合同(contracts.instantiate):

如何在Polkadot构建和部署智能合约

现在您的合同已被完全部署,我们可以开始与它进行交互了!Flipper只有两个功能,因此我们将向您展示同时使用这两个功能的感觉。在上一步中,在部署了Flipper合同实例之后,在出现的确认屏幕上,单击“执行合同”按钮。

default()功能

如果您回顾一下我们合同的default()功能,我们会将Flipper合同的初始值设置为false。让我们检查一下是否是这种情况。

在“要发送的消息”部分中,选择“ get():bool”消息,并接受其他选项的默认值。

按“呼叫”并确认它返回值false:

如何在Polkadot构建和部署智能合约

因此,true现在就让价值转向吧!

我们可以通过用户界面发送的替代消息是flip()。同样,接受其他选项的默认值。

您会注意到该flip()消息默认为交易呼叫。

如何在Polkadot构建和部署智能合约

如果交易成功,那么我们应该可以返回到该get()函数并查看更新后的存储:

如何在Polkadot构建和部署智能合约

btcfans公众号

Scan QR code with WeChat

Link
Disclaimer:

Previous: 区块链终将变革传统保险行业 Next: 如何将以太坊数据流传输到QuestDB

Related