开发和部署 Tezos 智能合约

这篇具有很好参考价值的文章主要介绍了开发和部署 Tezos 智能合约。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Tezos 是最古老的智能合约区块链之一,以太坊是第一个。

虽然以太坊是开发人员开发和部署智能合约的热门选择,但由于费用高且交易缓慢,其应用程序的可扩展性并不高。相比之下,Tezos 应用程序的设置非常高效且成本低廉。

在本指南中,您将学习如何使用 SmartPy CLI 在 Tezos 中开发和部署智能合约。我们将涵盖:

  • 什么是特所思?

    • Tezos 与以太坊:比较图表

  • 什么是 SmartPy?

  • 什么是智能合约?

  • SmartPy CLI 入门

  • 配置tezos-client

  • 使用 SmartPy 开发 Tezos 智能合约

  • 测试 Tezos 智能合约

  • 将智能合约编译为 Michelson

  • 部署 Tezos 智能合约

  • 与已部署的智能合约交互

您可以在此 GitHub 存储库中获取最终项目的代码。

先决条件

要阅读本文,您需要熟悉 Tezos 区块链。你的知识不必很深入。

不需要了解以太坊区块链,但它有很大帮助。

什么是特所思?

Tezos 是一个区块链网络和智能合约平台,通过其治理模型和自我升级能力构建为自适应的。

虽然 Tezos 和 Ethereum 是支持智能合约和 DApp 开发的类似区块链,但它们在几个方面有所不同。下面的 Tezos 与 Ethereum 表显示了两个网络之间的一些差异。

Tezos 与以太坊:比较图表

特所思 以太坊
开发者提议升级网络上的区块链协议 开发者使用硬分叉升级区块链协议
利益相关者通过投票接受或拒绝提案来控制区块链协议的升级 区块链网络的创建者管理区块链协议的升级
使用形式验证来执行智能合约 使用 EVM 在网络上存储和执行智能合约
参与者(节点)可以选择提供计算资源或委托他们的代币参与验证交易 所有参与者(节点)必须提供计算资源并质押他们的硬币以参与验证交易
汽油费很低,这使得它非常可扩展 汽油费真的很高,这使得它无法扩展

什么是 SmartPy?

SmartPy 是一种工具,可让您在 Tezos 区块链上轻松构建智能合约。

您使用 Python 在 SmartPy 中编写合约。如果您已经熟悉 Python,则无需学习新的智能合约编程语言。

SmartPy 有两个使用其他语法的变体:SmartTS,使用 TypeScript,SmartML,使用 OCaml。

SmartPy 将 Python 脚本编译为 Michelson。Michelson 是 Tezos 中用于智能合约的低级编程语言。SmartTS 和 SmartML 也可以使用 SmartPy 工具进行编译。

什么是智能合约?

智能合约是您可以在区块链网络上构建、部署和执行的程序。在部署智能合约之前,您无需在网络上拥有节点。

借助智能合约,您可以构建可供所有设备访问的应用程序,而无需拥有或维护服务器。这些完全分散的应用程序需要很少或不需要维护。

智能合约利用区块链的全部潜力,允许您在链上执行程序以及与链本身进行交互。您可以持有或转移代币,并通过智能合约访问区块链上的特殊功能。

SmartPy CLI 入门

要安装 SmartPy CLI,请运行以下命令:

$ bash <(curl -s https://smartpy.io/cli/install.sh)

此命令使用此树结构在其中创建一个目录:smartpy-cli``home

smartpy-cli
├── browser.py
├── node_modules/
├── originator.js
├── package.json
├── package-lock.json
├── __pycache__/
├── smart.css
├── smart.js
├── smartpyc.js
├── smartpyc.py
├── smartpyio.py
├── smartpy.py
├── SmartPy.sh
├── smarttop/
├── smart-ts-cli.js
├── templates/
├── theme.js
└── typography.css

要确认安装,请运行以下命令:

$ ~/smartpy-cli/SmartPy.sh --version

作为易于访问的额外步骤,通过将以下内容复制到您的文件或相关配置文件中来创建别名:SmartPy.sh``.bashrc

$ alias smartpy="$HOME/smartpy-cli/SmartPy.sh"

现在您可以使用:

$ smartpy --version

代替:

$ ~/smartpy-cli/SmartPy.sh --version

配置tezos-client

本指南用于与已部署的智能合约进行交互。要安装运行以下命令之一,具体取决于您使用的是 Mac 还是 Linux 操作系统:tezos-client``tezos-client,

# Mac
$ brew tap serokell/tezos-packaging-stable https://github.com/serokell/tezos-packaging-stable.git
$ brew install tezos-client
​
# Linux
$ wget https://github.com/serokell/tezos-packaging/releases/latest/download/tezos-client
$ chmod +x tezos-client
$ mkdir -p $HOME/.local/bin
$ mv tezos-client $HOME/.local/bin
$ echo 'export PATH="$HOME/.local/bin:$PATH"' >> $HOME/.bashrc
$ source $HOME/.bashrc

请注意,如果您使用的是 Windows,则需要使用 wsl 安装 Linux 发行版并运行 Linux 安装。

安装后,您需要进行设置。首先运行以下命令:tezos-client

$ tezos-client --endpoint https://jakartanet.ecadinfra.com config update

本指南使用 Jarkatanet 测试网来部署智能合约并与之交互。上述命令通过网络上的节点连接到 Jakartanet 测试网。tezos-client``

在对 执行任何操作之前,您需要连接一个帐户。Tezos 提供 Faucet 帐户,让您可以免费与网络交互。tezos-client


超过 20 万开发人员使用 LogRocket 来创造更好的数字体验了解更多 →


您需要访问Jakartanet Faucet 网站并下载 Faucet 文件。之后,在终端中打开下载文件夹并运行以下命令:

$ tezos-client activate account faucet with ./jakartanet.json

该命令会激活您的 Faucet 帐户并为其赋予别名。要检查此帐户的余额,请打开文件,复制 的值,然后运行以下命令:tezos-clientfaucetjakartanet.json``pkh

$ tezos-client get balance for <address>

替换为您复制<address>的pkh值。

请注意,Tezos Faucet 帐户对所有人都是公开的,并且 Tez 代币数量有限,因此您必须规范您的使用。

使用 SmartPy 开发 Tezos 智能合约

要开始创建我们的示例智能合约,请创建一个新文件并将以下内容复制到其中:store_text.py

import smartpy as sp

class StoreText(sp.Contract):
    def __init__(self, value):
        self.init(text = value)

    @sp.entry_point
    def replace(self, params):
        self.data.text = params.text

    @sp.entry_point    # Note: the spaces before "@"
    def append(self, params):
        self.data.text += params.text

以下是上述合同的工作方式,逐个进行:

首先,我们导入了smartpy库:

import smartpy as sp

然后,我们定义了一个扩展类:sp.Contract

class StoreText(sp.Contract):

最后,我们在智能合约中定义了一些项目;首先,要初始化的构造函数text:

    def __init__(self, value):    # Note: the spaces before "def"
        self.init(text = value)

其次,替换 的值的入口点text:

    @sp.entry_point    # Note: the spaces before "@"
    def replace(self, params):
        self.data.text = params.text

第三,将字符串附加到的入口点text:

    @sp.entry_point    # Note: the spaces before "@"
    def append(self, params):
        self.data.text += params.text

接下来,我们来看看如何测试智能合约。

测试 Tezos 智能合约

部署到 Tezos 的智能合约无法更改或删除。儿歌多多TV版App,培养小朋友思考能力及艺术天赋,早教及学前教育软件!这可能是一个问题,因为合同中可能存在错误,错误可能导致代价高昂的错误和资金损失。

SmartPy 使您能够在部署之前轻松测试您的合约。测试合约不需要任何代币或钱包账户即可运行。您需要做的就是打开文件并复制以下内容:store_text.py

@sp.add_test(name = "StoreText")
def test():
  scenario = sp.test_scenario()
  contract = StoreText("Hello")
  scenario += contract

  scenario.verify(contract.data.text == "Hello")

  contract.replace(text = "Hi")
  contract.append(text = ", there!")
  scenario.verify(contract.data.text == "Hi, there!")

以下是代码段的工作原理。首先,我们将test函数注册为测试脚本:

@sp.add_test(name = "StoreText")

然后,我们定义了test函数:

def test():

在剩下的几行中,我们创建了一个测试场景:

  scenario = sp.test_scenario()

初始化合约"Hello":

  contract = StoreText("Hello")

将合约实例添加到场景中:

  scenario += contract

验证合约的text价值为"Hello":

  scenario.verify(contract.data.text == "Hello")

称为replace和append入口点:

  contract.replace(text = "Hi")
  contract.append(text = ", there!")

最后,验证合约的text价值现在是"Hi, there":

  scenario.verify(contract.data.text == "Hi, there!")

添加测试后,保存文件并运行以下命令:

$ ~/smartpy-cli/SmartPy.sh test store_text.py ./test-output

如果测试成功,编译器不会抛出错误信息。

将智能合约编译为 Michelson

在部署智能合约之前,您需要将其编译为 Michelson。如前所述,Michelson 是一种用于 Tezos 区块链上的智能合约的低级编程语言。

要编译,请运行以下命令:store_text.py

$ ~/smartpy-cli/SmartPy.sh compile message.py ./output

如果编译成功,您应该会看到output如下所示的文件夹:

output/
├── scenario.json
├── script_init.py
├── script_pure.py
└── storeMessage/
    ├── log.txt
    ├── step_000_cont_0_contract.json
    ├── step_000_cont_0_contract.py
    ├── step_000_cont_0_contract.tz
    ├── step_000_cont_0_sizes.csv
    ├── step_000_cont_0_storage.json
    ├── step_000_cont_0_storage.py
    ├── step_000_cont_0_storage.tz
    └── step_000_cont_0_types.py

该output目录包含部署智能合约所需的所有文件。


来自 LogRocket 的更多精彩文章:

  • 不要错过来自 LogRocket 的精选时事通讯The Replay

  • 了解LogRocket 的 Galileo 如何消除噪音以主动解决应用程序中的问题

  • 使用 React 的 useEffect优化应用程序的性能

  • 在多个 Node 版本之间切换

  • 了解如何使用 AnimXYZ 为您的 React 应用程序制作动画

  • 探索 Tauri,一个用于构建二进制文件的新框架

  • 比较NestJS 与 Express.js


部署 Tezos 智能合约

要部署,请在终端中打开文件夹并运行以下命令:store_text.py``output/storeMessage

$ ~/smartpy-cli/SmartPy.sh originate-contract --code step_000_cont_0_contract.json --storage step_000_cont_0_storage.json --rpc https://jakartanet.ecadinfra.com

[INFO] - Using RPC https://jakartanet.ecadinfra.com/...
[INFO] - Contract KT1………………CAjjW originated!!!

以下是该命令的工作方式:

  • originate-contract告诉部署(“发起”)合约tezos-client

  • --code step_000_cont_0_contract.json指向已编译的合约文件

  • --storage step_000_cont_0_storage.json指向编译后的存储文件

  • --rpc指向要部署到的网络上的 RPC 节点

Tezos 智能合约通常涉及两个组件:存储和合约。存储保存合约存储的数据,合约保存智能合约的逻辑。

请注意,您可以使用任何合约或存储编译部署合约。当您使用该命令时,它们只需具有相同的文件扩展名。

默认情况下,如果您在测试网上部署,编译器将使用 Faucet 帐户。如果您正在部署到主网或想要使用您的钱包帐户,请添加标志,后跟帐户的私钥。--private-key

与已部署的智能合约交互

在与已部署的智能合约进行交互之前,您需要了解合约当前的外观。为此,请在浏览器中打开 SmartPy Explorer并按照以下步骤操作:

  1. 导航到“替代节点”

  2. 将合约地址粘贴到“合约”输入

  3. 在“在特定节点上探索”下,从 切换mainnet到jakartanet

  4. 将 RPC URL 粘贴到文本框中

  5. 单击“在特定节点上探索”

当合约数据出现时,文本存储应显示为“Hello, There!”

现在您知道合同的文本,您可以将其更改为“Hi, There!” replace通过使用以下命令调用入口点:

$ tezos-client transfer 0 from faucet to <contract-address> --entrypoint replace --arg '"Hi, There!"'

如果命令成功,当您刷新资源管理器时,存储现在应该显示“Hi, There!”

请注意,您必须<contract-address>在运行命令之前替换为已部署合约的地址。

结论

本文介绍了使用 SmartPy 在 Tezos 上构建智能合约的过程。构建智能合约可以让您充分利用区块链网络来构建去中心化的应用程序和组织。文章来源地址https://www.toymoban.com/news/detail-402217.html

到了这里,关于开发和部署 Tezos 智能合约的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【智能合约】智能合约开发指南

    目录 1. 选择智能合约语言 1.1 Solidity 1.2 Vyper 1.3 Move 1.4 Rust 2. 部署和测试框架 2.1 概览 2.2 Remix 2.3 Truffle 2.4 Hardhat 2.5 其他框架 3. 前端工具 3.1 入门 3.2 Web3.js/Ethers.js 3.3 脚手架 3.4 Moralis 4. 钱包 4.1 小狐狸钱包(MetaMask) 4.2 多签钱包 4.3 冷钱包 5. 区块浏览器 6. 测试网与水龙头 7.

    2024年02月09日
    浏览(33)
  • 部署智能合约到公链

    🍁 博主简介 :         🏅云计算领域优质创作者         🏅2022年CSDN新星计划python赛道第一名         🏅2022年CSDN原力计划优质作者         🏅阿里云ACE认证高级工程师         🏅阿里云开发者社区专家博主 💊 交流社区 :CSDN云计算交流社区欢迎您的

    2024年01月17日
    浏览(31)
  • BSC测试链部署智能合约

    在火狐浏览器下载一个小狐狸钱包插件 添加BSC测试网络 创建个账号即有了自己的钱包地址 链上部署合约或交易等都需要燃料,需要gas费,即需要有测试代币 复制刚才的钱包地址去领取地址领取测试代币 BNB Smart Chain (BSC) Testnet Faucet - BNB Chain 打开网页写一个自己的智能合约

    2024年03月16日
    浏览(34)
  • 深入解析Safe多签钱包智能合约:代理部署与核心合约

    读者可以前往我的博客获得更好的阅读体验 Safe (或称 Gnosis Safe )是目前在以太坊中使用最为广泛的多签钱包。本文主要解析此钱包的逻辑设计和代码编写。 读者可以前往Safe Contracts获得源代码。 Safe优势 作为智能合约钱包, Safe 支持多签名批准交易。这带来了以下优势: 更高

    2024年02月03日
    浏览(35)
  • 基于Remix+MetaMask部署智能合约

    由于论文迟迟没有进展,基础知识掌握不牢,今由重新拾起区块链的应用,研究了下节点连接和智能合约部署的一些操作。 基础知识: remix是用来部署智能合约的,metamask是可视化的钱包。 准备环境: 基于浏览器的Remix,网址为:http://remix.ethereum.org/ 。 MetaMask是一个基于Ch

    2024年02月07日
    浏览(29)
  • 以太坊 – 部署智能合约到Ganache

    目录 1. Ganache本地区块链 1.1 主界面 1.2 设置 2. 开发智能合约 2.1 初始化项目 2.2 添加package.json文件 2.3 添加智能合约源文件 2.4 编译项目 3. 部署智能合约到Ganache 3.1 更新配置文件 3.2 创建迁移脚本  3.3 执行迁移命令 首先启动Ganache,创建本地的以太坊区块链网络。 本地

    2024年02月16日
    浏览(38)
  • Solidity智能合约开发 — 3.4-抽象智能合约和接口

    假如一个智能合约中至少一个函数缺省实现时,即某个函数缺少{}中的内容,这个智能合约就当做抽象智能合约。 当我们有一个函数没想好怎么写时,必须将该合约标为 abstract ,不然编译会报错;另外,未实现的函数需要加 virtual ,以便子合约重写。抽象智能合约是将智能合

    2024年02月12日
    浏览(35)
  • Fabric 搭建测试网络并部署智能合约

    1. 搭建网络: 详见博客 2. 对Test Network的创建和关闭 3. Starting a chaincode on the channel: 智能合约(Smart Contract): 包含管理区块链账本上assets的逻辑。 在Fabric上智能合约就是链码的形式存在. 当网络运行后,链码会被部署到网络中节点和通道上. 应用(Application): 由区块链系统的成员执行

    2024年02月03日
    浏览(34)
  • 四:调用部署在ganache的智能合约

    如果朋友有代码,工具,使用流程等不太清楚的,可用去专栏看看,专栏中有文章中所提及的具体使用方式。不太明白的朋友可以自己去看看~~ 瞬移专栏 实验目的 实验原理 ether.js中提供了我们对智能合约进行调用的方法,使用ether.js能很方便我们和智能合约进行交互。 js代码

    2023年04月09日
    浏览(25)
  • 以太坊智能合约开发(五):Solidity成绩录入智能合约实验

    每个学生分别部署合约Student.sol ,保证只有自己可以修改姓名。老师部署合约StudentScore.sol,用于录入学生成绩,查询学生信息。查询学生信息时,需要调用学生部署的合约Student.sol。 student.sol合约,用于学生对自己信息进行管理。 学生的基本信息作为状态变量: 声明构造函

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包