区块链研究实验室 基于substrate创建Ink智能合约

区块链研究实验室 | 基于substrate创建Ink智能合约

Parity的Substrate区块链框架,在最终版本开发中取得不错的进展。Ink是Parity为基于Substrate的区块链编写智能合约的解决方案。
与Substrate一样,Ink建立在Rust之上,因此遵循Rust语言规则和语法。本文将介绍一个示例在智能合约中复制一个ERC721令牌,通常称为以太坊区块链上的ERC721令牌。
这是系列文章的第1部分,将介绍创建和部署此Ink智能合约的过程,具体来说,我们将介绍:
​注意:PolkadotJS应用程序不仅设计用于管理Polkadot本身,还管理任何Substrate链。接口是动态的,因为可用的管理选项取决于Substrate链支持的功能。
在本文中,我们将介绍Ink的安装过程及其所需的依赖关系,并介绍本系列附带的ERC721令牌示例合同,讨论Ink合同的结构以及它与基于Solidity的合同的区别,以及两者之间的相似性。
非同质化令牌
非同质化令牌NFT与ERC20型令牌不同,每个令牌都是独一无二的。在我们的合同中,每个令牌都有一个用于表示令牌的唯一ID。从这里开始,每个令牌都可以拥有自己的值,自己的元数据,或者在应用程序或价值系统中具有特定用途。
批准转移或管理令牌的非所有者帐户也是不同的,并且必须在每个令牌的基础上使用NFT完成。加密猫是最着名的例子,其中实现了非同质化令牌-每个令牌代表平台上的小猫。
NFT对标准令牌提出了不同的挑战,因此我们可以根据Ink语法和功能进行更多探讨。让我们下一步安装Substrate,Ink和所需的软件包来编写我们的智能合约。
系统安装
开始编写Ink合约需要一些依赖包。安装后,我们可以在终端窗口-中运行一个Substrate链,我们将使用此链作为部署智能合约的方法。
rust
Substrate和Ink依赖于rust。使用以下命令安装Rust。下面还包含两个命令,以确保您的NightlyRust版本(最新可用的Rust版本)是最新的,以及Webassembly构建对NightlyRust的支持:Ink合同编译为.wasm文件,因此作为Webassembly部署到Substrate链。
注意1:Cargo是Rust的包管理器,其包装称为Crates。
注意2:参考最后一个命令,target指的是rust项目目录中包含程序构建的目标文件夹。我们将在这里构建智能合约文件。
Substrate
使用以下命令安装Substrate:
Wasmutilities
Ink智能合约在上传到Substrate链之前会编译到WebAssembly中。为此,我们需要安装一些实用程序:
Ink
我们现在可以通过箱子安装Ink,运行以下命令:
本地运行substrate链
我们将在您的机器上运行的本地Substrate区块链上进行测试。现在安装了Substrate,运行以下命令来初始化链:
–dev标志为您初始化开发区块链,仅在您的计算机本地化并初始化一些用户帐户。
此设置纯粹是为了测试目的;您可以将其视为与Truffle的Ganache程序,该程序运行本地基于以太坊的链,为测试目的进行了调整。
现在,您将注意到正在运行的节点正在验证新区块。按CTRL+C或关闭终端窗口将停止节点执行,但链状态将持续存在,直到您下一次运行链。在此注释中,如果您想要开始一个新链,请运行以下操作来清除您的链:
随着我们的Substrate链运行和Ink的准备,我们可以编写合同。在这样做之前,还需要提到编辑器支持。我个人发现VisualStudioCode是最好的编辑工作,不仅是Ink开发,还有Rust开发。快速设置方法:
如果您还没有安装编辑器,请从此处安装VSCode安装RLS(Rust语言支持)扩展和WebAssembly扩展。这可以直接在Extensions选项卡下的编辑器中完成,或按Shift+CMD+X直接跳转到它。
设置Ink项目
在安装了所有依赖项之后,现在让我们设置项目。
目前最简单的方法是安装Ink的“HelloWorld”合同,名为Flipper。安装Flipper后,我们可以构建已经包含的内容,而不必担心配置和编译脚本-这些都在Flipper中提供。
注意:Substrate和Ink都处于快速发展阶段并且尚未完成全部功能,因此智能合约环境和智能合约代码本身很可能随着Parity越来越接近框架的最终版本而改变。
启动我们的Ink项目,请使用cargo获取Flipper:
Flipper为我们提供了开始编写智能合约所需的项目样板,包括:
让我们把flipper改成一个更合适的名字:nftoken。修改以下内容:
另外,确保我们有权运行nftoken/build.sh:
最后,将/nftoken文件夹添加到vs代码工作区,我们就可以开始编写了。
关于Ink
Ink具有多个抽象级别,其中较高级别抽象较低级别。我们将使用最高级别,即语言级别或lang级别。这些级别也被分成了可以在这里探索的模块。
lang模块下面是模型和核心模块,分别侧重于中级抽象和核心实用程序。在核心模块下方,我们还可以期望专门用于创建和管理Ink智能合约的CLI。
虽然在撰写本文时几乎没有关于如何使用这些模块的内容,但我们确实有原始API文档可供浏览,包括核心模块和模型模块。如果您正在阅读本文,那么现在可以浏览这些文档,尽管我们下面的合同将利用其中一些API来展示如何通过不可互换的令牌合同在lang级别的上下文中使用它们。
考虑到这一点,接下来让我们来看看我们的lang派生合约的结构是什么样的,并将它与我们对基于Solidity的智能合约的期望进行比较。
智能合约架构
构造一个ink智能合约类似于solidity智能合约,其中我们期望的solidity的主要组成部分在ink中也是一致的:合同变量、事件、公共函数和私有函数,以及获取调用方地址的环境变量等等。
下面是NFoTek契约是如何构造的抽象:
让我们简要地访问这些部分,以及它们与我们对Solidity合同的期望有何不同。Ink是基于Rust构建的,因此这里的所有语法都是有效的Rust语法。
我们的模块声明部分是我们将外部功能引入合同的地方,它与Solidity使用声明的性质类似。
事件在Event枚举中声明,而使用Solidity我们分别定义事件,将每个事件键入事件:
如果solidity合同嵌入到接口块中,那么ink合同嵌入到合同中!宏。我们的事件在这个宏之外声明,而事件在solidity接口内声明。如下所述。
注意:rust中的宏是一个声明,表示包装表达式将被包围的语法块。宏在句法层面抽象,所以智能合约!宏正在用更多的语法包装其内容。
使用Ink,我们的契约变量写在我们合同名称的结构中。从Rust的HashMap类型派生的哈希映射代替Solidity的映射类型,提供key=>值列表。
Substrate如何存储值
在Substrate链上持久存储的任何数据称为外在数据,而Ink为我们提供了通过存储模块在链上存储外部数据的方法,存储模块位于语言的核心模块中。换句话说,您计划在链上保留的所有合约变量都将使用存储中的类型。相反,存储器模块也可用于在存储器上操作的数据结构。
另一方面,Solidity对此采用了不同的方法。从Solidity0.5开始,存储和内存引用类型被引入到函数参数或函数变量中,因此契约知道在哪里引用这些变量。但是,对于Solidity中的合同变量,这不是必需的。
原始类型也可用,并且在两种语言中都是一致的;Rust使用u64,Solidity采用更详细的uint64类型声明。总的来说,在两种语言之间实现相同的契约变量结构非常简单。
在上面的示例中,存储对象处理的值的类型通过尖括号传入,而不是通过类型的泛型。
初始化函数的概念存在于Ink和Solidity中,尽管以不同的方式实现。使用Ink,我们在Deploy{}实现块中显式定义deploy()方法。我们为此方法定义的参数代表了我们在初始化合同时发送的数据。例如。对于我们的不可替代的令牌,我们将提供初始数量的令牌:
公共和私有方法也在impl块中定义,其中公共方法使用pub(外部)显式定义。同样,在将此语法与Solidity的语法进行比较时,内部和外部用于定义私有或公共资源。
注意:在Rust中,函数,模块,特征和结构在默认情况下是私有的,并且必须使用pub关键字定义,以便它们可以从外部访问。这里pub的(外部)扩展是特定于Ink的,并且必须包含公共Ink功能。
同样,我们将私有函数和公共函数分开放在单独的impl块中,并为已定义的公共函数包含pub(external)。
作为合同的最后一个构建块,定义了一个测试模块,在测试我们的函数时断言各种条件。在测试模块中,我们可以测试我们的合同逻辑,而无需编译并将其部署到Substrate链,从而可以快速解决错误并验证合同是否按预期工作。
接下来
我们现在已经讨论了Ink智能合约的构建模块。在本系列的下一部分中,我们将更深入地探讨非可替代令牌智能合约的功能,理解所使用的Rust设计模式以及它们如何与我们的智能合约逻辑相结合。然后我们将介绍构建智能合约并将其部署到本地Substrate链的过程,并使用PolkadotJS测试其功能。

主题测试文章,只做测试使用。发布者:最新稳定辅助网,转转请注明出处:https://www.744broad.com/13763.html

(0)
上一篇 2023年3月4日 上午8:21
下一篇 2023年3月4日 上午8:25

相关推荐

  • 绝地求生SteamVAC封禁详细介绍

    绝地求生SteamVAC封禁详细介绍 1、首先VAC全称ValveAnti-Cheat就是阀门厂的反作弊器因为Valve从来不公布其具体内容但是据估计,截至2014年7月,已经有220万玩家被VACban掉了大家都知道Valve和其他游戏厂商比起来,场子实在太小。负责Vac的只有大约17人『theVACTeamconsistedofSteam’s…

  • 美艾奥瓦州民主党初选一片混乱 彭博或成最大赢家

    美艾奥瓦州民主党初选一片混乱 彭博或成最大赢家 中新网2月5日电据美国侨报网报道,美国艾奥瓦州3日举行党团会议总统初选,不料因手机应用程序出问题,导致民主党在首场初选中的计票和报告结果出现重大延误。在这种混乱局面下,一位民主党参选人在结果出现之前几乎就已经可以宣告胜利,而他甚至未踏入该州。据Politico报道,彭博3日4日分别在加州和铁锈地带(RustBe…

  • 「工具分享」一个带有数学语法和复数的开源计算器

    「工具分享」一个带有数学语法和复数的开源计算器 更多互联网新鲜资讯、工作奇淫技巧关注【飞鱼在浪屿】(日更新)Kalk是一个计算器(程序和库),支持用户定义的变量、函数、推导和积分。它可以在Windows、macOS、Linux、Android和Web浏览器中运行(使用WebAssembly)。发布页面中提供了适用于Linux、Windows和macOS(64…

    RUST资讯 2023年2月14日
    60
  • 本周Epic喜加一!Epic神秘惊喜答案揭晓,下周仍可期待

    本周Epic喜加一!Epic神秘惊喜答案揭晓,下周仍可期待 哈喽,各位小伙们大家好,这里是小游。上周EPIC的神秘惊喜游戏终于解开了面纱…我它喵的等了一个星期的游戏,不是赛博2077,也不是生化危机7,更不是大家口中预测的《消逝的光芒》,居然是《NBA2K21》?!不过这次送的毕竟也是一款3A大作了,《NBA2k21》作为篮球游戏界的扛把子,虽然…

    RUST资讯 2023年2月23日
    70
  • 不用鼠标,程序员编程竟能如此高效?

    不用鼠标,程序员编程竟能如此高效? 作者|MatthieuCNEUDE译者|弯月,责编|屠敏出品|CSDN(ID:CSDNnews)以下为译文:曾经,我是一名骄傲的Ubuntu用户。Ubuntu不仅易于安装,而且易于使用。在此之前,我是Windows用户,感觉Windows和Ubuntu很相似。然而,日复一日,年复一年,我的自豪感逐渐消失了,取而代之的却是无…

    RUST资讯 2023年2月23日
    60
  • Deno 会取代 Node.js 吗?

    Deno 会取代 Node.js 吗? 【CSDN编者按】几天前,Node之父RyanDahl及Deno团队为我们正式带来了Deno1.0,据官方介绍,这是一个JavaScript/TypeScript运行时,使用V8引擎、Rust构建。因其是Node之父的已经历时两年的新项目,Deno在业界引起了非常强烈的讨论。本文作者FernandoDoglio是在No…

    RUST资讯 2023年2月17日
    80
  • 十年前美国小学生最爱玩的游戏登陆Steam,收获超过3万条好评

    十年前美国小学生最爱玩的游戏登陆Steam,收获超过3万条好评 独占游戏作为索尼、微软、任天堂三家主机厂商竞争的主要手段,一直是保证主机销量长久不衰的关键。然而近几年随着跨平台娱乐与移动端手游发展的越来越迅速,独占这一概念开始不断的被打破。在本世代主机大战中落后于人的微软便成为了打破独占概念的先锋者,前后携着XBOX独占游戏《战争机器5》与《光环:士官长合集…

  • 编程语言的历史,看一下你使用的编程语言哪年诞生

    编程语言的历史,看一下你使用的编程语言哪年诞生 1800年约瑟夫玛丽雅卡尔(JosephMarieJacquard),设计出人类历史上首台可设计织布机——雅卡尔织布机,对将来发展出其他可编程机器起了重要作用。JosephMarieJacquard1842年阿达洛夫莱斯(AdaLovelace)为计算程序拟定“算法”,写作的第一份“程序设计流程图”,被珍视为“…

    RUST资讯 2023年2月23日
    80
  • 韩国人又来圈钱了?15年经典游戏出新作,全球同服还支持简中

    韩国人又来圈钱了?15年经典游戏出新作,全球同服还支持简中 新的一周又开始了,本周又会有哪些好玩的新游戏等着我们呢?一起来看看吧。【本周新游测试】划重点:《APEX英雄手游》海外3月7日上线原定于二月底上线的《APEX英雄手游》并没有像他们说的那样如期而至,目前游戏已经宣布跳票到3月7日上线。好在短时间的跳票并不会对游戏的品质有多大影响,关于其他方面,不会有…

    RUST资讯 2023年2月26日
    40
  • 西北农林科课题揭示条锈菌CFEM类效应子参与抑制植物免疫反应

    西北农林科课题揭示条锈菌CFEM类效应子参与抑制植物免疫反应 小麦条锈菌(Pucciniastriiformisf.sp.tritici,Pst)作为活体营养专性寄生真菌,严重威胁我国乃至世界的小麦生产。效应蛋白作为一类非常重要的毒性因子,主要通过分泌到寄主内,抑制寄主防卫反应,从而促进病原菌侵染。然而,由于缺乏稳定转化体系且不能体外培养,条锈菌效应蛋白的功…

关注微信