一个简单的智能合约模型

开发一个简单的智能合约 开发简单的智能合约,从环境搭建,开发步骤,源代码,各方面解析,成功开发并运行一个智能合约 阅读详情

我问过的每个人对“智能合约”有着不同的定义。下面是我的智能合约定义。

最近这些天,我听到越来越的人谈论“智能合约”。但是,当你让他们对“智能合约”这一术语下一个定义的时候,他们不能清晰地表达,这一个概念就像从他们手中溜走了一样。

这不是什么新发现:Peter Todd在听过了多场研讨会以后,也得出了类似的结论。

经过多场智能合约的讨论后,我得出了这样的结论:没人真正知道智能合约是什么,如果实现智能合约,将需要预言机(oracles)。

— Peter Todd (@petertoddbtc) December 5, 2014

 事实上,我也是没能向Peter清晰阐明智能合约概念的人之一。

现在,对智能合约下一个定义,最简单的回答就是引用富有远见的学者的定义,他们在几十年以前就已经预言了“智能合约”。尼克萨博1997年的智能合约论文是非常简洁和有用的综述。另外,我也真的喜欢Grigg的“李嘉图合约”(Ricardian Contract)。萨博的“自动贩卖机”模型也十分有用。

但是,这些人的理念是在比特币、区块链和密码学货币出现以前提出来的,所以对密码学货币领域的新人来说,他们的定义存在隔阂,不够明显。更加使人混淆的是,现在有许多平台打算实施智能合约。事实上,你可以将比特币看作一个智能合约平台。所以,区分概念和具体实现的不同点变得更加困难。

在这篇文章中,我尽力解释为什么智能合约可能是一个非常棒的理念,然后做出我自己的“智能合约”定义和模型。

 

可复制、共享的账本( The Replicated, Shared Ledger)

当我思考区块链和分布式账本时,我首先从比特币的最核心创新开始:它教会世界如何在不需要信任第三方的情况下远距离转移价值。(我知道有些人会对此有异议,这个表述可能并不是100%精确–但是我觉得它能为思路带来直觉。)

我们当然可以面对面地转移实体纸币,但是,在比特币出现以前,我们做不到:在不需要信任中心化第三方机构(邮局、银行等)的情况,远距离向某人转移价值。

就好像银行和支付系统的传统转账模式的基础设施被重构为点对点支付网络。这种转变如下图所示:

 

smartcontracts1 (1)

比特币打开了点对点的电子价值转移模式的大门,完全不同于现在的银行系统、中央银行和支付系统。

但是,上面的图并没有解释比特币是怎样实现点对点价值转移的。

答案是:比特币系统建立在我所称的“可复制、共享的账本”之上。比特币网络中的每个参与者(完全节点)拥有一个完整的交易账本的副本,这一系统的神奇之处在于:它是如何做到使每个人的副本与其他人的副本保持一致的。

所以,正确的示意图应该是下图,每个参与者都能够从相同的可复制、共享的账本中获取信息。

smartcontracts2

 

比特币和其它去中心化共识系统的窍门在于:它们怎样保证每个人有一个账本的副本,并使每个人确信自己的账本与别人的账本是同步的。

先把可扩展性等问题放在一边,我们知道这样的架构能够运行:如果每个人拥有的账本的副本是相同的,那么人们就不再需要一个中心化的机构记录谁拥有什么。你知道:当你的账本更新,记录一笔新的资产所有权变动时, 其他人的账本也会发生相同的变动。

 

我们需要区分:账本记录什么和怎样记录

密码学货币领域的争论和竞争主要集中在:账本如何建构和保证安全。比特币的挖矿算法?以太坊的系统?瑞波币的共识算法?这些争论只聚焦于“怎样做”:怎样保证账本安全?共识过程如何工作?怎样防止坏人?因为不同的密码学货币对于自己可能面临的威胁的本质有着不同的假设,所以他们是不一样的。

但是,在这篇文章,让我们暂时忽视这些“怎样做”的问题,只问自己一个问题:账本记录什么?它可以用于哪些方面?

 

账本记录什么?

在我最近的一篇博文中,我探索了“可复制、共享的账本”这一概念如何应用到货币以外的领域。我的观点是:一旦你能确定地知道你对世界的观点与其他每个人是一致的,“可复制、共享的账本”在完全不相关的领域会开辟出新的可能性,例如会计领域。Ian Grigg写过关于三重记账法的文章,像tripleentry(三重记账)这样的公司正在探索三重记账法,变革现有的会计行业。

我们可以得到这样的结论:如果我知道每个人“看到”相同的事物,那么我就不再需要花费巨大的成本建立自己的账本,不再需要花费巨大的成本进行账本审计和与其他每个人的账本进行对账、调账。账本自身就可以为我做这些事情。

所以,可复制、共享的账本可能取代现有的商业系统中的记账方式。

哪些领域需要双重记账(duplication)?

 一个领域就是在商业逻辑之中(business logic)。在现实的商业中,有无数的这样的例子:合约的双方(或多方)分别独立地运行着一个计算/记账系统,对合约的条款进行建模。我有时候习惯于以银行为例,现在有几个非银行的例子:

大型线上零售商可能拥有一个系统,检查他们从快递公司收到的账单是否正确:所有商量好的打折都实行了吗?

大型杂货店与供应商就打折问题,达成复杂的合约协议。折扣的大小与一定时期内的销售量和许多其它因素有关。我们可以确信:合约的双方都已经开发出一套非常成熟的合约模型,并做成了软件。

 以上几个例子的共同点是:合约的每一方都需要独立的手段计算自己在合约中拥有的价值。他们不能相信对方。所以,每一方不得不建立自己的计算/记录系统。这会造成浪费,还需要对账、调账等。

但是回到我在上文所讲的:对于一个可复制、共享的账本,每个人都知道每个人看到的事情是相同的,一方不需要相信另一方是诚实的。

现在想象一下,你的账本也可以运行计算机代码。你需要做的是:

 当你与某人商定合约时,你也同意一份代码版的合约。

“合约使用哪个外部数据的信息源,怎么解决纠纷”,双方需要达成共识。

双方都仔细检查代码,确信不存在后门或者恶意漏洞。你也可以进行测试,查看它产生的答案是否正确。

双方对它感到满意后,签字并部署到账本上。

 现在双方都不需要花费精力在自己的系统中重新实现合约条款,双方都知道这段代码能够同时满足各自的目的。因为它运行在可复制、共享的账本,双方都能够确信程序的输出结果对两个人来说是一样的。

 

但是我们可以更加科幻

 到目前为止,我已经描绘了一种十分平常的应用场景:代表双方或多方之间合约协议的计算机程序。

但是,请记住:我们正在构想一个这些程序运行在可复制、共享的账本上的新世界。

如果这些程序能够与账本进行交互,会怎样?程序能够控制账本上的资产,你甚至可以向程序发送资产。所以,它不再只是一个计算机程序,而是一个自足的经济活动参与者。

回到上面提到的杂货店的例子:杂货店可以通过向计算机程序发送货款(数量为A),对供应商进行支付。程序可以计算出可能的折扣额(数量为B),然后将A-B(A减去B)数量的钱发给供应商,但是暂时保管折扣额B–因为我们只有到月底的时候才能确定地知道折扣率。到了月底,合约会将保管的B正确地计算并发给各方。

这个程序不再只是一个计算机程序:它自己就是一个参与者。它对接收到的信息进行回应,它可以接收和储存价值,也可以向外发送信息和价值。

这个程序就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。

我认为这就是人们谈论智能合约时想要表达的想法。

下面这个示意图就是我的智能合约模型:一段代码(智能合约),被部署在分享的、复制的账本上,它可以维持自己的状态,控制自己的资产和对接收到的外界信息或者资产进行回应。

smartcontracts4

我自己的智能合约模型:它是运行在可复制、共享的账本上的计算机程序,可以处理信息,接收、储存和发送价值。

 

理论上的问题

这就是智能合约的本质。如果更加正式一点,智能合约定义可能如下:

 智能合约是由事件驱动的、具有状态的、运行在一个复制的、分享的账本之上的、且能够保管账本上资产的程序。

 这只是我的临时性定义。智能合约还有许多理论问题没有解决。我总结了一下,以供将来的研究。

 导入真实世界信息

智能合约十分依赖于发送给它的信息的质量。“预言机”和“m个中选n个”(n-of-m)方案可以帮助解决问题。但是,我认为还应该考虑:如果信息源消失了,如果以前独立的信息源合并,如果新的更好的信息源出现了,该怎么办?

构建模型

如果可以有多种方式(例如,程序直接作为账本上的资产或者作为合约)为世界各种现象构建模型,最终选择哪一种,这可能是一种商业上的问题。需要出现最佳实践,以正确的方式为不同的真实世界现象建立模型。

处理程序错误

你写过没有bug的程序吗?智能合约部署后,发现它存在bug,明显地有利于合约的一方,该怎样进行修复? 就像律师可以通过发现合约中的漏洞,赚到许多钱一样,会出现一种通过发现智能合约中的漏洞赚钱的“工程师-律师”吗?

流动性

如果资产由智能合约保管,那么这些资产任何人都不能使用。这将改变许多商业模式的经济逻辑。

合法性

智能合约具有与“真正”合约一样的法律效力吗?如果智能合约的结果违背法律,或者法庭发现它有合约法冲突,怎么办?

隐私

大多数分享的、复制的账本都是公开的。我不知道有多少零售商同意公开自己与供应商之间的合约。

技术问题

底层技术能够满足需要吗?可以进行扩展吗?等等

其它更多的问题

但是,我十分确信社区中的聪明人都在关注并解决这些问题。所以,也许问题只有一个:哪些引人注目的商业情景将率先采用智能合约?

如果你已经看到这里,理解我所说的,我力劝你研究萨博、Grigg和其他这个领域大神的著作,他们比我更好地解释了智能合约领域。

Solidity实现简单的智能合约 Solidity实现简单的智能合约 今天使用solidity来实现一个简单的智能合约 Solidity是以太坊中编写智能合约的语言,编译成字节码之后可以运行在以太坊虚拟机上。solidity语法与JavaScript很相似,有编程基础的开发者可以轻松上手,智能合约一旦部署就无法修改。 首先介绍我们的编译工具: Remix remix是一款非常好用的在校编译工具,我们通过这个工具能部署实现简单的智能合约。 传送门:链接: remix. 打开之后首页会是这样的。接下来我向大家演示一下如何实现helloworl 阅读详情

相关推荐

使用web3调用智能合约的简单例子

当使用Solidity语言开发完成一个智能合约并部署后,如何在一个Web应用程序(或者手机App)中调用它?使用web3.js库,可以很容易的做到这些。通过一个最简单的例子我们来看看如何做到这些,分为三个步骤。 1. 编写智能合约 简单起见,我们直接使用Remix自带的Storage.so合约l例子,就是简单的存储和获取一个整数数值。 pragma solidity >=0.4.22 <0.7.0; /** * @title Storage * @dev Store & retre

wumingzhifu的博客 9693

什么是Ricardian Contract李嘉图合约?

Ricardian Contracts是数字文档,用于定义两方或多方之间交互的条款和条件。 在20世纪90年代,伊恩·格里格(Ian Grigg)在寻找创造数字化现金的愿景的朋友之后学会了资产的数字化。Ian Grigg发现债券数字化的必要性,并试图在互联网上发行相同的债券,因为它们也是金融资产,而世界正在开始通过互联网创建业务。在努力解决问题的过程中,...

rejames的博客 585

学习solidity的一个简单智能合约(1)——投票

这篇博客作为记录学习solidity语言的备忘录

qq_39733285的博客 4501

聊聊李嘉图合约

什么是李嘉图合约? 简单来讲,是用人们可以阅读的语言,用类似合同的方式,描述智能合约里每个接口的意图。例如EOS里eosio.token是发币合约,其中transfer这个action是用来转账的,它有4个参数: from,转出账户 to,接收转账的账户 quantity,转账数量 memo,备注 它的李嘉图合约是: ## Transfer Terms & Conditions...

ssmmddss的博客 496

以太坊智能合约部署——一个简单的投票系统

首先在Remix上进行测试代码如下pragma solidity ^0.4.16; /// @title Voting with delegation. contract Ballot { // This declares a new complex type which will // be used for variables later. // It will re...

ChenJinchao_的博客 5216

用python如何实现智能合约?

另外,使用智能合约记录的交易数据被保存在区块链上,具有不可篡改性,同时也保证了交易的透明度和公正性。为了达到这个目的,我们通常需要编写一个新的智能合约,并将其部署到区块链上,然后将现有合约中的数据迁移到新合约中。通过这些步骤,我们可以使用Python编写一个完整的智能合约,并将其部署到区块链上,并使用Web3.py API调用智能合约中的方法。然而,智能合约也存在一些挑战。智能合约可以应用于各个领域,通过去中心化、智能化的特点,增加交易双方的信任度和效率,并且有望成为未来的主要商业模式之一。

苏凉.py的博客 4715

详解区块链的智能合约

智能合约的历史 在全面阐述什么是智能合约之前,我们先回顾一下它创建的历史背景,有助于理解它的重要性。 1994年,计算机科学家和密码学家Nick Szabo首次提出“智能合约”概念。它早于区块链概念的诞生。Szabo描述了什么是“以数字形式指定的一系列承诺,包括各方履行这些承诺的协议”。虽然有它的好处,但智能合约的想法一直未取得进展——主要是缺乏可以让它发挥出作用的区块链。 什么是智能合约 ...

EAForest_的博客 2216

以太坊智能合约之如何执行智能合约?

区块链技术在顶级技术中占据主导地位的主要原因在于其去中心化。虽然区块链的主要目的是在没有中心的情况下维护交易记录,但为了实现自动化,智能合约被引入。那么在写完智能合约之后呢?在本文的这个以太坊智能合约教程中,我们将了解如何使用Truffle Ethereum和以太坊专用网络来执行智能合约。 我们将在以太坊智能合约教程中查看以下主题: 使用案例:保险流程中的智能合约 智能合约的好处 安装先决条件 ...

mongo_node的专栏 4052

【蚂蚁链学习1】初识蚂蚁链的智能合约(solidity)

文章目录1.版本指令和contract关键字合约版本指令实战2.状态变量和整数状态变量无符号整数uint实战3.数学运算实战4.结构体实战5.定义函数实战 1.版本指令和contract关键字 下面将学习什么是合约,并尝试如何创建合约。 合约 智能合约(Smart Contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约实质上是一套以数字形式定义的承诺(Promises),包括合约参与方可以在上面执行这些承诺的协议。 Solidity的代码都包裹在合约里面,所有变量和函数都属于一个

要像蜗牛一样一步一步往上爬! 9926

什么是李嘉图合约?-研究论文

最近的技术创新为“ Ricardian”合同的构建和实施创造了空间,这些合同是可以用软件表达和执行的健壮,透明和有效的合同结构。 本讨论文件讨论了此类合同结构的范围和功能,并考虑到它们的交易成本降低,争议解决速度更快,可执行性更好以及透明度更高,从而考虑了其更广泛的实施和使用。

数学建模入门——数据预处理(全)

介绍了数据预处理的入门知识

n04j04h06的博客 4347

编写一个简单的智能合约

上篇文章:快速入门 Remix IDE 简单的介绍了Remix IDE的一些常规按钮以及其意思,这篇文章我主要就是通过写一个简单的智能合约来具体的看看这个编译器怎么使用。 1.创建一个名字为HelloWorld.sol的合约 2.然后在里面写入这段代码 pragma solidity ^0.4; contract HelloWorld { function sayHelloWorld() public returns(string){ return ("hello wo

3385

模拟滤波器的基础知识和设计

使用Python实现多种模拟滤波器

faltas的博客 3530

智能合约简单介绍

对于智能合约最基本的认识和部分,关于solidity语言的helloworld入门和一个简单的银行合约的代码解析。

hmysn的博客 6123

国产FPGA开发实战:紫光同创编程软件中的约束文件详解与常见问题

本文详细解析了紫光同创FPGA编程软件中约束文件的关键配置技巧与常见问题。通过基础架构解析、时钟约束实践、物理约束调控及典型问题排查指南,帮助开发者高效掌握国产FPGA开发中的约束文件应用,提升开发效率与设计稳定性。

gin88的博客 908

PP触发EWM产生PMR捡配

PP触发EWM产生PMR捡配 前言 PMR: Production Material Request 在流程订单/生产订单下达后,可以在EWM中产生PMR,在EWM中, PMR其实代表了ERP中的流程订单/生产订单。 You can use SAP EWM in conjunction with the following PP application components: • Production Orders • Process Orders • Repetitive Manufacturing •

ZevYang的博客 1918

简单的智能合约开发

智能合约(Smart Contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。它允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约的概念最早由美国计算机科学家Nick Szabo于1994年提出,其设计初衷是在无需第三方介入的情况下,通过自动化的程序来执行合同条款。

linwq057的博客 2413

把 ABAP 经验装进 GitHub Copilot 的按需大脑,Agent Skills 如何改变 ABAP 开发

2026 年 8 月,SAP Community 上出现了一次很有代表性的 ABAP 实验。开发者把标准 Flight Model 里的复制成自己的测试类,删除原有 ABAP Unit Test,再让 GitHub Copilot Agent 为方法重新生成测试代码。真正有意思的地方并不是 Copilot 会不会写,而是开发者给 Copilot 准备了两个专门的 Agent Skills,一个负责 ABAP Unit Test 的通用规则,一个负责 ABAP Test Double Framework。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 155

一个简单的Python智能合约开发

在Python中开发智能合约,我们可以使用Web3.py库,它是一个用于与以太坊区块链交互的Python库。以下是一个简单的Python智能合约开发教程,包括安装所需库、创建智能合约、部署智能合约和调用智能合约的功能。view关键字表明这个函数只是从合约读取数据,并不修改它,这使得它在只读上下文(如交易或对其他合约的调用)中是安全的。运行此脚本,它将调用智能合约的set函数设置值42,然后调用get函数并打印存储的值。现在我们已经有了部署好的智能合约,我们可以调用它的set和get函数。

pa007的博客 1164

笔试题-2023-星宸-数字IC设计【纯净题目版】

4 笔试题-2023-星宸-数字IC设计【纯净题目版】

w0shishabi的博客 1172

COSMO-RS理论:流体相热力学预测的核心模型与技术突破

摘要:COSMO-RS模型通过量子化学计算分子表面电荷分布,实现了从微观量子尺度到宏观化工过程的热力学预测。该模型基于介电连续介质理论,将分子表面片段化处理,通过σ-剖面描述电荷分布,并计算片段间的静电失配能和氢键能。其核心算法通过自洽化学势方程求解活度系数,克服了传统模型依赖实验参数的局限。随着技术进步,模型引入了高阶描述符和色散力修正,提升了预测精度。在药物研发、化工分离等领域广泛应用,但仍存在对长程有序结构预测不足等局限性。该模型为复杂体系的热力学性质预测提供了重要理论工具。

ASKCOS博客 974

年轻人的第一个智能合约

上面的代码在Solidity中定义了一个名为的智能合约。在Solidity语言中,contract关键字用于声明一个新的智能合约,类似于许多面向对象编程语言中的class关键字。智能合约是区块链上的一个程序,它包含了一组规则以及这些规则的自动执行逻辑。一旦部署到区块链上,智能合约在交易触发时按照编写的逻辑自动执行操作。//“王五”,“13598534006”// 用于存储所有的名字上面的代码定义了两个private变量,只能够被合约内部的函数访问。其中一个是map类型的变量,一个是array。

zhangyh111111的博客 1583

Hyperledger Fabric 网络搭建详解

写在前面:博主也是因为一些原因刚刚入坑区块链,我认为在我们入门新技术的时候,入门总是最困难的部分,只要入门了,后面学习起来就会越来越轻松,在网上找了很多文章,我觉得大多条理不是很清楚。本文章会详细介绍fabric(v1.0)环境部署,以及在搭建过程我遇到一些问题及解决方案,希望可以帮助到你们。 博主环境机器:VMware15 Ubuntu16.04 fabric(v1.0)环境部署一、必备软件安装1.ubuntu环境安装2.Go语言3.Docker安装4. Docker-Compose 安装二、Fa.

林中有神君 1万+
上一篇: Python代码样例列表
下一篇: 格雷厄姆和他的9大门徒
比特量化
博客等级 码龄7年 952粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特量化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值