主页 > imtoken新版app > 未来柚子科技|柚子技术聚会:区块链-智能合约开发基础及完整生命周期

未来柚子科技|柚子技术聚会:区块链-智能合约开发基础及完整生命周期

imtoken新版app 2023-09-21 05:11:11

以太坊虚拟机的缩写_以太坊有虚拟平台吗_蚂蚁矿机挖以太坊

历史背景

1994年,计算机科学家兼密码学家尼克萨博首次提出“智能合约”的概念。 它早于区块链概念的诞生。 Szabo 描述了“一组以数字形式指定的承诺,包括各方履行这些承诺的协议”。 但智能合约的想法从未取得进展——主要是因为缺乏使其发挥作用的工具。 采用智能合约所需的区块链技术直到 2008 年才出现,终于在 2013 年,智能合约作为以太坊智能合约系统的一部分首次出现。

以太坊虚拟机的缩写_蚂蚁矿机挖以太坊_以太坊有虚拟平台吗

什么是智能合约

智能合约是一种旨在提供、验证和执行合约的特殊协议。

蚂蚁矿机挖以太坊_以太坊虚拟机的缩写_以太坊有虚拟平台吗

智能合约是区块链之所以被称为“去中心化”的一个重要原因,它使我们能够在不需要第三方的情况下进行可追溯、不可逆和安全的交易。 智能合约包含了一笔交易的所有信息,只有满足了要求才会执行结果动作。 智能合约与传统纸质合约的区别在于,智能合约是由计算机生成的。 因此,守则本身解释了参与方的相关义务。

三个原则

智能合约与区块链的结合形成了智能合约规则的自动执行系统,其具有三个重要原则:

首先,智能合约数据来自链上。 这意味着智能合约的输入来自于区块链的数据库。 这些数据有区块链保障,具有真正难以篡改的特性。 其次,智能合约的执行是在链上的。 这意味着智能合约在多个节点上执行,执行的结果必须相同,并且智能合约的结果必须被接受。 此外,智能合约在链上输出。 这意味着智能合约的输出结果必须存储在区块链上,以确保结果的真实性和可追溯性,并为其他连接的智能合约提供输入数据的准确性。

区块链架构演进

以太坊有虚拟平台吗_蚂蚁矿机挖以太坊_以太坊虚拟机的缩写

区块链架构演进

以太坊智能合约

两个概念

“以太坊虚拟机”——一种点对点的、去中心化的虚拟机(英文缩写EVM)

“虚拟机”是计算机领域的术语,可以理解为可以在不影响计算机性能的情况下随意进行操作的虚拟环境。

以太坊本质上是一个虚拟机,只不过它是一个点对点的、去中心化的虚拟机(英文缩写EVM)。 与所有区块链技术一样,世界各地的节点都会在自己的电脑上运行软件。 这个包含世界各地节点的“世界级计算机”被称为以太坊虚拟机(EVM)。 我们可以把以太坊虚拟机理解为一个用来为以太坊智能合约创建运行环境的系统。

2、“以太坊账户”-“普通账户”+“智能账户”,以太坊设置了这两个账户:

“普通账户”(即EOA账户)里面只有当前数量的以太币,由我们手中的私钥控制,可以发起转账交易; “智能账户”不仅有以太币的数量以太坊虚拟机的缩写,还有程序代码,代码 交易触发智能账户的执行。 每当收到相应的消息时,就会执行代码。 这个智能账户是智能合约的载体。

两个账号的关系

普通账户不依赖智能合约

首先是以太坊的“普通账户”。从以太坊的“普通账户”转账以太币时,转账方式和比特币类似:我从我的账户转了3个以太币到依依的账户。 本次转账使用普通账户,需要输入依依的钱包地址,转账金额与比特币转账非常相似,就不多说了

智能账户通过合约约束执行

然后是以太坊的“智能账户”。 从以太坊“智能账户”转移以太币时,会涉及虚拟机和智能合约。 比如我决定在发工资的那天转3个以太币给依依,也就是说我们达成了协议,那么我发工资的时候,虚拟机会运行一个特定的代码,3个以太币会自动从我的账户转出从她的智能账户向依依转账 3 个以太币。

以太坊有虚拟平台吗_以太坊虚拟机的缩写_蚂蚁矿机挖以太坊

智能合约

Fabric联盟链架构图

蚂蚁矿机挖以太坊_以太坊虚拟机的缩写_以太坊有虚拟平台吗

面料智能合约

Fabric的智能合约称为链码(chaincode),分为系统链码和用户链码。 系统链码用于实现系统层面的功能,用户链码实现用户的应用功能。

Chaincode 被编译成一个独立的应用程序,在一个独立的 Docker 容器中运行。 Fabric 链码和底层账本是分开的。 升级链码时,无需将账本数据迁移到新的链码,真正实现了逻辑与数据的分离。 同时链码采用Go、Java、Nodejs语言编写。

Chaincode运行流程

智能合约由区块链中的多个用户共同制定,可用于用户之间的任何交易。 该协议定义了双方的权利和义务,开发人员以电子方式对这些权利和义务进行编程,代码包含将触发合同自动执行的条件。 编码完成后,智能合约被安装并实例化到区块链网络中。 执行合约并将结果记录在区块链上。

蚂蚁矿机挖以太坊_以太坊有虚拟平台吗_以太坊虚拟机的缩写

Chaincode运行流程

Chaincode交互流程

Fabric链码通过gprc与peer节点交互

当peer节点收到客户端请求的输入(propsal)后,会发送一个chaincode message object(带有输入信息,caller信息)给对应的chaincode。 chaincode调用ChaincodeBase中的invoke方法获取账本状态信息,通过发送getState(getState)和write data(putState)消息将预提交状态发送给peer节点。 链码将最终的输出结果发送给对等节点,节点对输入(propsal)和输出(propsal response)进行背书和签名,完成第一次签名提交。 之后,客户端收集所有peer节点的首次提交信息,组装交易(transaction)并签名,将交易发送给orderer节点排队,最后orderer生成块发送给各个peer节点,并将输入和输出放在分类帐上,以完成提交过程的第二部分。

以太坊虚拟机的缩写_蚂蚁矿机挖以太坊_以太坊有虚拟平台吗

Chaincode交互流程

链码开发基础

链码开发的基础可以用一句话来概括:一个基类,两个查询,一个编写。

▲基类:ChaincodeBase

Java 中的 ChaincodeBase 是自定义链码的合约基类。 其中的run(ChaincodeStub stub, String function, String[] args)方法是peer端调用chaincode的入口函数。 必须为合约初始化定制一个 init 方法。 并升级初始化动作。

GO由于其动态接口的特点,不需要声明合约接口的实现。 但是必须实现两个接口方法:

▪ init(stub shim.ChaincodeStubInterface):init用于合约初始化和升级初始化动作; ▪ Invoke(stub shim.ChaincodeStubInterface):Invoke是peer调用chaincode的入口函数;

ChaincodeStub包含丰富的账本操作,常用的有getCallerCertificate()、getState(k)、putState(k,v)、invokeChaincode(…)、rangeQueryState(k1,k2)、getTxId()等。

▲两个查询:getState(k)和rangeQueryState(k1,k2)

getState(k) 获取单个键对应的值。

rangeQueryState(k1,k2) 获取所有从k1开始到k2结束的kv对象,返回一个Map对象,其中k1和k2是按字典顺序排序的。

▲一写:putState(k,v),

这里写数据的时候需要注意putState数据不会马上落入账本,需要等到第二次交易提交共识达成后数据才会落地。

链码开发经验

1.将业务实体存储在Json中,并在key上创建索引

因为只有一个key-val状态数据库,所以可以快速解析值为Json的数据,将一些简单索引字段的值加到key上,比如Pk_TxId交易id_a字段值,实现范围查询。 Fabric的kv库使用的是leveldb,插入的key值使用的是字典顺序,所以索引字段值必须是定长的,否则调用stub.rangeQueryState(k1,k2)进行范围查询会取出一堆不正确的数据。 例如:stub.rangeQueryState('id12', 'id1234'),会得到id121111111的数据。

2.写入的数据无法立即获取

通过putState写入的数据不会立即落入账本,需要在第二笔交易中所有peer节点达成共识后数据才会落地。 所以不能立即获取之前写入的值,比如批量插入数据以太坊虚拟机的缩写,使用putState写入数据,然后使用getState函数判断主键是否重复。

3. chaincode中的方法是否需要加锁?

不必要。 peer节点实现了消息队列,发送给chaincode的chaincode消息是顺序执行的,不是并行的。

链码事件

在 Hyperledger Fabric 中,有三种类型的事件监听器:

1. 块监听器:

当我们需要监控添加到 Fabric 账本的新区块时,我们会使用它。 当一个新块被提交到节点上的 Fabric 分类帐时,在 Fabric 客户端收到通知后,应用程序可以采取某些操作。

2.交易监听器(tx Listener):

当我们需要监视组织节点上的事务完成时,我们会使用它。 当一个新块被提交到节点上的 Fabric 分类帐时,客户端将收到通知,然后客户端将检查该块以查找已注册的事务标识符。 如果找到交易,回调函数将被通知交易 ID、交易状态和块号。

3. 链码监听器:

当我们需要监控将从我们的链代码发布的事件时,我们会使用它。 当一个新块被提交到 Fabric 分类帐时,客户端将收到通知,然后客户端将检查已注册的链代码模式的链代码事件名称字段。

智能合约的缺点

安全问题——目前全网89%的智能合约代码都或多或少存在安全漏洞/隐患。 这是一个非常令人震惊的调查结果,对社会来说也是一个巨大的风险因素。

智能合约审计

随着智能合约的增多和未来可能的大规模发展,各种合约代码的审计也将成为一个专业化的专业领域。 智能合约审计报告将包括以下内容:

免责声明 审计概述和良好特性 对合同的攻击 合同中发现的严重漏洞 合同中发现的中等漏洞 低严重性漏洞 逐行评论 审计总结

智能合约的标准化和模块化

智能合约模板,智能合约模板由专业技术人员开发设计并发布在区块链系统中供用户自由选择,用户使用智能合约模板发布新的智能合约

智能合约的未来

未来智能合约的发展确实应该有以下几个方面:

安全性:技术迭代,智能合约产品不断完善,成熟可靠的合约产品可以打包成模块运行。

可扩展性:在智能合约介入层面,必须优先支持支持的语言,少数语言会在语言竞争中脱颖而出; 智能合约的虚拟机将消失并嵌入到系统中; 在应用层面,智能合约将设计更广泛、更复杂的领域/关系。 链接:智能合约的发展有两个障碍。 一个是技术,而是现实世界中的法律体系。 在不远的将来,区块链技术倒逼社会变革的现象将会出现,智能合约的进一步进化和扩展将成为连接虚拟世界和现实世界的桥梁。

蚂蚁矿机挖以太坊_以太坊有虚拟平台吗_以太坊虚拟机的缩写