宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > PEPE币 > 正文

Rust智能合约养成日记: 用 Rust 开发智能合约

作者:

时间:1900/1/1 0:00:00

1.EVMorWASM?

随着Ethereum的普及,我们在谈论智能合约时,往往默认都是利用Solidity语言开发,基于EVM的智能合约。然而,由于Ethereum本身出块时间慢,交易所需手续费高的一些缺点,越来越多的优化技术和新的公链得以推出。而WASM则是其中的一个代表性技术。作为一种全新的二进制语法,WASM有着诸多的优点,如指令体积小,运行速度快,并且内存安全。因此,运行在WASM上的智能合约可以大大减少占用的区块链资源,明显的提升出块速度和效率,并且运行时更加稳定,使得用户获得更好的使用体验。WASM支持多种不同的前端开发语言,包括Rust、C、C++、TypeScript、AssemblyScript等。考虑到适配以及工具链,并且语言本身的安全性,Rust是非常好的选择之一。

2.BlockSec的选择

BlockSec的使命是让整个Defi生态更加的安全。因此,我们除了提供审计服务之外,也希望可以从安全开发的角度给予社区更多的支持。基于Rust和WASM的诸多优点,我们决定专门针对这一技术栈给大家带来一系列的分享,也希望大家可以持续的关注我们。我们调研了如今一些比较流行的公链项目,其中NEAR公链也采用了同样的技术栈。NEAR原生支持WASM合约,并且支持Rust语言和AssemblyScript开发智能合约。因此,我们将以NEAR公链为基础,展开我们的分享与讨论。

区块链游戏PetaRush与NFT音乐平台Melos Studio达成战略合作:8月29日消息,区块链游戏PetaRush宣布与NFT音乐平台Melos Studio达成战略合作关系。Melos Studio将使用AI生成技术为PetaRush中的每个NFT角色创建独特的背景音乐(BGM)配乐。当玩家赢得NFT比赛时,该NFT的背景音乐将在其场地播放,为玩家提供类似John Cena出场音乐的音乐体验。(AMBCrypto)[2022/8/29 12:55:14]

3.用Rust开发智能合约

Rust语言由Mozilla主导开发,程序编译后的运行速度惊人,且有相当高的内存利用率,并且支持函数式和面向对象的编程风格。也许很多同学还对Rust这门语言比较陌生。不过不用担心,从本期博客开始,BlockSec会跟大家一起拨开Rust的迷雾,让每个人都能利用Rust开发出高效,安全的智能合约。

4.环境配置

4.1IDE使用

当我们在学习利用一门新的语言去开发时,选择一个优秀的IDE一定是有必要的。在此,BlockSec推荐大家使用VisualStudioCode配合Rust的插件(例如Rust-analyzer),几乎可以满足大家的日常所需。如果大家有条件,也可以尝试一下JetbrainsClion+Rust插件,学生可以免费使用哦。

TrustBase尔尔:宏观角度来说,牛市会持续很久,从微观角度来讲,做好生态永远都是牛市:在4月12日举办的《佟掌柜的海外朋友们优质海外项目分享》会上,TrustBase中国区负责人尔尔表示,对长久的项目而言没有牛熊市之分,做好产品,服务好客户,做好生态,则是永远的牛市。投机者看到牛市只是挣快钱,对于长期持有者或者共识者来讲,他们看重的是底层技术和生态规划,没有技术就没有生态,我们其实是基于原生元语言包建立起整个生态,不管技术生态还是开发者生态,或是社区生态,以及后期的模型生态,都是基于技术产生的,两者相辅相成。

关于细分赛道的展望,第一是NFT,Trustbase平台会推行大家第一批在实现NFT商业落地,因为开发周期足够短,另外可以产生更多的流量,毕竟金融型用户比应用型用户少很多,所以能让NFT创造更多商业价值,趁着波卡在NFT上发行是我们比较看好的赛道。第二是DeFi,这是不会衰退的赛道,金融本身是区块链的核心根本,DeFi的发展是随着区块链在不断地起伏,但永远不会衰落,这是作为区块链从业者的信仰。

Trustbase底层是波卡原生元,具有扎实底层技术的项目来讲生态规划比较长远,相对来说不惧牛熊,主要是基于未来的生态和规划。[2021/4/13 20:14:00]

4.2安装Rust工具链

现场丨基于蚂蚁链的国际贸易和金融服务平台Trusple发布:金色财经现场报道,9月25日下午,外滩大会区块链产业峰会在上海开幕。在现场,基于蚂蚁链的国际贸易和金融服务平台Trusple由法国巴黎银行、花旗银行、星展银行、德意志银行、渣打银行、蚂蚁链共同启动。

Trusple是基于蚂蚁链技术构建的全新数字化国际贸易和金融服务平台,通过连接买卖双方、国内外银行及国际贸易链路中的核心节点,结合区块链技术,提供智能支付及付款承诺的支付方式,实现智能履约,为买卖双方提供了从订单到付款、端到端的贸易保障及金融服务。

该平台将有助于解决跨境贸易中的信任问题,更好地服务小微企业。Trusple平台实现新生态:服务于SMEs的数字化贸易生态网络;展现出新标准:新技术驱动贸易金融服务创新和变革。[2020/9/25]

当有了一个优秀的IDE后,我们自然还需要下载安装Rust。Rust提供了非常简单便捷的安装方法。在Linux系统中,我们只需要运行如下一行代码,即可自动下载安装Rust。

$curl?--proto?'=https'?--tlsv1.2?-sSf?https://sh.rustup.rs|?sh?

安装完毕后,我们可以通过执行$rustup--version来检查安装是否成功。rustup作为Rust工具链的管理器,提供了安装、删除、更新、选择和管理这些工具链及其相关部件的方法。再此我们需要通过执行如下命令,将WASM(WebAssembly)目标添加到工具链:

安全公司:朝鲜黑客组织Lazarus设计网络钓鱼攻击计划,涉及500万人:互联网安全研究公司Cyfirma最近的一份报告称,朝鲜黑客组织Lazarus设计了一个网络钓鱼计划,涉及美国、英国、新加坡、日本、印度和韩国等国的约500万个人和企业。Cyfirma预计,这次袭击将在这个周末进行,为期两天,不仅会影响到各国公民,还会影响到中小企业甚至大型企业。

注:2019年初,联合国曾援引Group IB的报告称,朝鲜黑客组织Lazarus被指控制造了五起加密货币窃案,攻击目标分别为Yapizon(韩国,损失3816 BTC,合530万美元)、Coinis(韩国,损失不详)、YouBit(韩国,损失17%资产)、Coincheck(日本,损失5.23亿NEM,合5.34亿美元)、Bithumb(韩国,损失3200万美元),五次攻击获利总额高达5.71亿美元。(Decrypt)[2020/6/20]

$rustup?targetaddwasm32-unknown-unknown?

5.第一个Rust合约

终于,我们到了正题。在这里,我们将通过深入剖析一个个智能合约的项目,带大家了解并且掌握如何利用Rust编写智能合约。如果大家对Rust语言本身感兴趣,网上有很多的教程,大家也可以参考。

现场 | TrustNote创始人周正军:未来是通证化的时代:金色财经现场报道,7月4日,在日本东京举办的TOKENSKY区块链+全球高峰论坛上,TrustNote创始人周正军表示今后是通证化的时代,所以的事物都会通证化,通证化可以使数据更透明、更公平、更高效、更具有流动性,这需要在底层公链之上构建快速运作、发行、使用通证的平台。[2018/7/4]

5.1Rust的包管理器

随着整个开源社区对Rust的支持,各种各样的第三方库层出不穷。为了更好的管理这些库,Cargo应运而生。上述的安装命令,也会同时帮大家安装Cargo。Cargo可协助开发者处理诸多任务,例如创建新的Rust项目,下载并编译Rust项目所依赖的库,以及完整地构建整个项目等。

5.2创建第一个Rust合约项目

当我们准备好开发环境后,首先利用Cargo新建一个合约项目,并命名为StatusMessage。

$cargo?init?--lib?StatusMessage?

该项目的目录树如下:

StatusMessage/├──Cargo.toml└──src?└──lib.rs?

5.3声明一个合约

一个智能合约(SmartContract)往往需要维护一组合约状态数据。如下一段编写于src/lib.rs的代码声明了一个简单的合约,叫做StatusMessage。

1??#2??#3??pub?struct?StatusMessage?{4????records:?LookupMap<String,?String>,5?}?

接下来,我们将仔细的分析上述的五行代码。第1,2行以#开头,类似注解。事实上,这是Rust中的一种宏的表现形式。它会接收第3-5行作为输入,根据宏的定义,产生输出。例如,第一行中的#事实上是在near-sdk-macros-version包中通过nearbindgen函数定义,这是利用宏自动生成注入代码的地方(Macros-Auto-GeneratedInjectedCode,简称M.A.G.I.C.)。

如果不理解,没关系。我们只需要知道第1,2行的作用即可。具体的来说,被#注解的struct将会成为NEAR上的一个智能合约。而其他的struct只是普通的struct。因此是由NEAR开发并且提供给开发者使用的包。而第2行中的#则是用来做序列化和反序列化,从而将合约的状态可以在链上以二进制格式传输。第3-5行即为一个名为StatusMessage的结构体,其维护了一个智能合约的状态。而状态的内容在第4行中被描述。这一结构体中只含有一个成员变量,名为records。其类型为LookupMap,这里可以简单的看作一个字典类型。key和value都是普通的字符串类型。

5.4设定合约默认值

当我们声明了一个合约后,我们往往需要定义其默认值。如下代码设定了合约StatusMessage的默认值。

1??impl?Default?for?StatusMessage?{2????fn?default()?->?Self?{3??????Self?{4????????records:?LookupMap::new(b"r".to_vec()),5?????}6???}7?}?

其中,第1行声明了这是对于StatusMessage默认值的一个实现。第2行声明该方法名称为default,返回值为Self。Self在Rust中即表示当前的模块作用域,具体来说,即代表一个StatusMessage实例。而第3-5行即为该实例的定义。由于该实例仅包含records一个类型为LookupMap的变量。通过传入一个二进制数组b"r".tovec(),即可将LookupMap初始化。其中LookupMap的new方法由NEAR自己定义,b"r".tovec()表明存储于该LookupMap中键的前缀。

5.5定义合约方法

当我们用一个结构体定义了合约的状态后,我们还需要定义一系列方法,从而可以通过外部交易,去调用这些暴露出来的方法。如下是两个定义的方法,分别可以修改和获得当前合约中的records值。注意,定义合约的方法时,也需要我们加上#,如第1行所示:

1??#2??impl?StatusMessage?{3????pub?fn?set_status(&mut?self,?message:?String){4??????let?account_id?=?env::signer_account_id();5??????self.records.insert(&account_id,&message);6???}78????pub?fn?get_status(&self,?account_id:?String)?->?Option<String>??{9??????return?self.records.get(&account_id);10???}11?}?

第2行impl关键字表明,我们在对StatusMessage做具体的实现。

第3-6行定义了方法setstatus。该函数用来设置当前合约的状态。其中第三个声明了方法名和变量。该函数共有两个变量,分别为&mutself和message:String。&mut表示对self的引用,并且可能修改self的内容。而message:String表明了message的类型为String。同时该函数用关键字pub修饰,注意,只有被pubfn修饰的函数才可以被外部的交易调用,表明其是public。

第4行会定义一个局部变量accountid,其值通过env::signeraccountid()中获取,表明发起这笔交易签名的用户id。

第5行将accountid做为键,message做为值插入到records中。注意,message是一个String类型的变量,由用户传入。而&message则表示对message的引用。

第8-10行则声明了另外一个函数名为getstatus。不同于setstatus,getstatus会返回一个None或者是String类型的值,这里我们用Option表示。

第9行则是通过查询用户给定的account_id,得到对应的message。

本期总结和预告

这是BlockSec针对Rust合约开发的第一期blog,本期我们讲述了Rust合约的背景,以及如何基于NEAR链去创建一个简单的合约。下一期我们将进一步描述如何利用Rust对我们创建的合约编写单元测试用例,从而调试我们的合约。

标签:USTMESESSSTATCUSTMESSIprayblesscoinNodestats

PEPE币热门资讯
印度短视频社交平台Chingari完成1900万美元融资,Galaxy Digital、Solana Capital等参投

据invezz消息,印度领先的短视频社交平台Chingari完成1900万美元融资,GalaxyDigital、RepublicCrypto、SolanaCapital、AlamedaResearch、Kraken、ValorEqui.

1900/1/1 0:00:00
Tokens.com收购元宇宙房地产公司Metaverse Group 50%的股份

据Businesswire10月18日消息,公开上市的区块链投资公司Tokens.com宣布,已收购元宇宙房地产公司MetaverseGroup50%的股份.

1900/1/1 0:00:00
3位导师助阵,2天通关元宇宙丨巴比特元宇宙线下掘金班开课了!

元宇宙和Web3.0,这应该是区块链赛道两个正在“出圈”的核心概念。 元宇宙为什么这么火? 有人说,从WEB1.0到WEB2.0,再到移动互联网。作为“全球化”最强大的承载工具,互联网在经历了几十年的红利期后,也遭遇了瓶颈.

1900/1/1 0:00:00
G7、G20齐发声,支持研发央行数字货币

来源:财联社丨区块链日报 作者:徐川 近日,二十国集团召开财长和央行行长会议,强调全球稳定币的运行需以遵守所有相关法律和监管要求为前提,鼓励相关国际机构继续研究中央银行数字货币在完善跨境支付中的作用及其对国际货币体系的影响.

1900/1/1 0:00:00
科普 | 一文对比以太坊Layer2扩容方案

一、Layer2扩容方案发展现状区块链网络扩容的基本思路主要有两种:Layer1扩容、Layer2扩容.

1900/1/1 0:00:00
监管机构正在对加密货币采取行动:数字身份是解决方案吗?

监管机构正在逼近。为了满足机构合规部门的要求,将市场职能拆分为各自的部分——托管、聚合器和主经纪商业务——是一回事。让监管机构满意是另一回事.

1900/1/1 0:00:00