课程链接 https://www.coursera.org/learn/smarter-contracts/home/week/1

这是区块链专项课程的第二门课 智能合约 Smart Contracts

为自己学习记的笔记,翻译可能存在问题,望谅解。

智能合约 Smart Contracts

智能合约基础 Smart Contract Basics

目录

Why Smart Contracts?

智能合约定义(第1部分)(Remix IDE和Greeter演示)

智能合约定义(第2部分)(Simple Storage Demo)

处理智能合约(compilation artifacts 演示)

部署智能合约 Deploying Smart Contracts

REQUIRED Quiz Resources and Directions: Smart Contract


Why Smart Contracts?

智能合约的概念早在比特币问世之前就已经存在。 计算机科学家尼克·萨博(Nick Szabo)详细介绍了他的加密货币比特金的概念,他还在1996年的出版物中概述了智能合约的概念。 实际上,Szabo在20多年前就创造了“智能合约”一词。 智能合约是以太坊区块链的核心和主要推动力。

智能合约的设计和编码不当会导致重大故障,例如DAO hack和Parity钱包锁定。正如我们在课程一中讨论的那样,比特币具有包含规则和策略的脚本功能。 Linux Foundation的Hyperledger区块链具有称为Chaincode的智能合约功能。Chaincode用Go语言编写,并在docker环境中执行。 Docker是用于执行程序的轻量级容器技术。 您可以在参考资料部分中找到更多关于这些的信息。

学习目标:
1)能够解释智能合约的元素
2)讨论智能合约编程语言Solidity的语法和语义
3)解决问题并设计智能合约解决方案
4)使用remix开发环境进行构建测试智能合约,并使用remix部署智能合约,并从简单的Web界面调用合约。

在本课程中,必须在测试环境中尝试各种与智能合约有关的概念,以便理解和应用这些概念。我们将使用remix集成开发环境IDE,它是用于动手探索的Web界面。目前,请确保您能够在remix.ethereum.org上访问此界面。请注意,remix只是一个开发环境,并且随着添加新功能(甚至每周一次)而不断变化。本课程是您尝试智能合约的课程。下一课程中,我们将使用智能合约开发完整的端到端应用程序。完成本模块后,您将能够解释智能合约的元素,并解释智能合约可以解决的问题的类型,定义智能合约的结构,运用这些知识来理解真正的智能合约写的内容在Solidity语言中,使用Web开发环境remix来调用智能合约并与之交互。

比特币区块链主要用于传输数字货币。 比特币通过嵌入式脚本添加了简单的条件式价值转移。这是一个有条件的功能,被引导为比特币的软分叉。 该脚本的功能受到限制。 它启用了简单的条件转移。

比特币之后,发展了以太坊。 以太坊的创始人开发了智能合约,牢记了20年前尼克·萨博(Nick Szabo)关于智能合约的想法。
以太坊的一项重要贡献是可工作的智能合约层,该合约层支持在区块链上执行任意代码。 智能合约允许用户定义任意复杂的操作。 该功能增强了以太坊区块链成为强大的分散式计算系统的能力。

为什么要转移货币?
诸如比特币之类的加密货币无需任何中间人就能从点对点进行货币或货币等价值的转移。 为了什么? 为了赠送礼物,购买产品,甚至可能续签驾照,或送花给某人。
例如,我们可能希望在特定日期送达礼物。 购买具有特定颜色和质量的产品。 我们可能需要验证某些凭证才能续订许可证。 
这引入了条件,规则和策略,而简单的汇款加密货币协议无法处理这些条件,规则和策略。 智能合约可满足针对区块链应用程序的特定于应用程序验证的需求。

智能合约具有一些优势:
1)智能合约可促进交易以转移价值或加密货币以外的资产。
2)智能合约允许规范区块链上的操作规则。
3)它促进了分散网络中资产转移政策的实施。
4)它还为区块链增加了可编程性和智能性。
5)智能合约代表业务逻辑层,实际逻辑以特殊的高级语言编码。
6)智能合约嵌入了可以由类似于函数调用之类的消息调用的函数。 这些消息和单个消息的输入参数在事务中指定。

比较比特币交易和智能合约交易
比特币中,所有交易都与发送价值有关。
在支持智能合约的区块链的情况下,交易可以嵌入由智能合约实现的功能。

在这里,我们有一个投票智能合约。 这些功能是 Validate Voter,Vote,Count,Delare Winner。 智能合约提供了可以在区块链上执行的计算逻辑层,从而利用了区块链框架启用的功能。 回想一下我们在课程一,模块二中讨论过的去中心化应用程序的各层。 观察该智能合约为域应用程序提供了应用程序框架。 例如,考虑住房抵押贷款申请。 智能合约可以嵌入规则和法规的所有业务逻辑和智能,以实现自动计算和启动操作。

这与现有系统有何不同?
在这里,所有操作都是透明的,并记录在区块链上。 客户无需银行等中介就可以直接访问这些工具。 就像自动柜员机启动抵押贷款一样。

智能合约可以解决哪些问题?
通常,货币转移用于从个人或企业购买服务,产品或实用程序。 在执行交易时,除了资金可用性外,可能还有其他条件。例如,业务交易可能涉及规则,政策,法律,法规和管理环境。智能合约允许在区块链上实现这些其他现实世界的约束,因此,智能合约可以在区块链上实现各种任意复杂度的分散应用。这可以涵盖从供应链到灾难恢复的整个范围。可能尚未构思出区块链技术的许多应用程序。智能合约正在引领下一代区块链,超越了将价值转移到有远见的领域。智能合约允许实施规则,政策,并借助区块链,支持治理和出处的方法。

阅读材料:
Smart Contract: Building blocks for digital markets
How to Learn Solidity: The Ultimate Ethereum Coding Guide
Remix- Solidity IDE

测试题:


以下zip文件包含更新的智能合约版本(可靠版本5.9

智能合约定义(第1部分)(Remix IDE和Greeter演示)

学习目标:
1)能够定义智能合约的结构
2)运用此知识来理解以Solidity语言编写的真实合约
3)使用Web开发环境Remix来调用智能合约并与之交互。

在区块链协议级别验证交易的结构和元级别属性。特定于应用程序的约束如何? 答案在于智能合约扮演的关键角色。
智能合约使用交易的特定于应用程序的语义和约束条件,并检验 verify,验证 validates 和执行 executes 它们。 最重要的是,由于智能合约已部署在区块链上,因此利用了区块链的不变记录 immutable recording 和信任模型 trust model。

由于智能合约已部署在区块链中,因此它是不可变的代码,一旦部署,就无法更改。 我们将不得不将代码重新部署为新的智能合约,或者以某种方式将调用从旧合约重定向到新合约。 智能合约可以在其中存储称为状态变量的变量。我们可以检索这些变量在块上的变化方式。

以太坊区块链中的合约具有编译指示 pragma directive,合约名称 name of the contract,数据或定义合约状态的状态变量 data or the state variable that define the state of the contract,用于执行智能合约意图的功能集合 collection of function to carry out the intent of a smart contract。 其他项目,我们将在以后的课程中进行讨论。 表示这些元素的标识符仅限于ASCII字符集。 确保选择有意义的标识符,并遵循驼峰式命名 camel case convention 约定。

我们将使用以高级语言(称为Solidity)编写的简单合约来学习这些概念。 我们将使用一个称为Remix的Web集成开发环境IDE,来创建,部署,执行和探索一些代表性智能合约的工作。

remix.ethereum.org
欢迎使用Remix IDE。 这是可作为Web界面使用的环境。 在左侧,您将看到文件浏览器,在这里您可以看到您创建的所有智能合约。 您可以创建一个新的。 中间是编辑器窗口,您将在其中键入智能合约。 底部是控制台或输出窗口。 在右侧,您可以使用这些工具进行编译,运行,设置,分析,调试器和支持。 底部将是Web界面,而创建智能合约的能力将位于中间位置。 凭借所有这些功能,Remix确实是一个开发,部署和测试智能合约的一站式环境。
(现在新版本可能不太一样)

凭借所有这些功能,Remix确实是一个开发,部署和测试智能合约的一站式环境。 我们将研究两个非常简单的智能合约,即greeter 和一个整数存储 one integer storage,即简单存储 simple storage。 这两个示例是Solidity文档中给出的示例的修改版本。 我们的目标是概览智能合约的结构,而无需深入了解Solidity语言的细节。

智能合约开发中的三个步骤:设计,代码和测试。

Greeter合约的设计:这是智能合约的Hello World

Greeter具有一个名为yourName的字符串变量,一个构造函数Greeter,一个用于设置名称的set函数以及一个返回字符串名称的hello函数,以便您可以使用它来 greeter world。

pragma solidity ^0.4.0;contract Greeter {/*Define variable greeting of the type string */string public yourName;/*This runs when the contract is executed*/function Greeter() public {yourName = "World";}function set(string name)public {yourName = name;}function hello() constant public returns (string) {return yourName;}
}

它从提供版本号的编译指示 pragma 开始,以便编译器知道此版本是在哪个Solidity版本中开发的。您还将看到合同Greeter的名称,状态变量yourName。 请注意,它采用骆驼符号。 接下来是函数,用于初始化yourName变量的构造函数Greeter,用于将变量设置为用户消息提供的名称作为参数的set函数,以及用于检索供调用应用程序使用的名称的hello函数。
在第一行,您会看到pragma Solidity。这提供了Solidity的版本。然后,它以合同名称开头,后跟数据或状态变量,然后是函数。这里有三个函数:Greeter(它是一个构造函数)和一个set函数(它用来设置数据变量),然后是一个hello函数(它提取状态变量的值并返回它)。这里的状态变量是yourName,它具有公共可见性 public visibility 修饰符,函数Greeter,构造函数将yourName初始化为World,函数集将yourName初始化为发送者提供的名称。 Hello返回状态变量中设置的任何值。


我将从编译compiling 它开始,然后运行它。运行时,我必须在JavaScript VM上部署智能合约。我将其更改为JavaScript VM,并创建它。创建它时,这是Web界面,您将在其中看到所有公共变量。 YourName是一个可用的公共变量。 Hello是在那里可用的公共功能,而set是那里可用的另一个公共功能。当我只是简单地说yourName时,给出的当前yourName是显示的 world。
如果我将名称设置为Buffalo,然后单击yourName,则yourName将显示在Buffalo。 如果单击函数hello,hello将返回恰好是Buffalo的当前yourName,它会显示出来。

这里的截图是我自己运行的截图,与课程视频中不太一样。仅供参考。

智能合约定义(第2部分)(Simple Storage Demo)

这是简单存储的设计表示。 在统一的建模语言类图中,它看起来完全像是常规的类定义。 有一些语法上的差异。 另外,请注意由于执行智能合约而导致的状态转换。 回想一下,我们在第一个课程中讨论了黑色标头中的状态和状态哈希。 这些是那些状态。 初始状态为状态一,由消息集更新,状态更改为状态二。 接下来,执行递增消息会导致状态为三,并且递减消息或函数的执行将转换为下一个状态,依此类推。

pragma solidity ^0.4.0;
/*Imagine a biginteger that the whole world could share*/
contract SimpleStorage {uint storedData;function set(uint x) public {storedData = x;}function get() constant public returns (uint) {return storedData;}function increment (uint n) public{storedData = storedData + n;return;}function decrement (uint n) public{storedData = storedData + n;return;}
}

只有一个单一状态变量存储数据。 有几种功能:set,get,增加 increment 和减少 decrement。 您会注意到没有显式构造函数,但是默认情况下会自动为智能合约创建一个构造函数。 我将对其进行编译,然后将其运行,然后执行该操作。 您可以看到set,get,increment 和 decrement 可用。 由于存储的数据不是公共数据,因此在此公共Web界面中不可用。

现在,如果我选择“get”,没有设置任何值,因此您将返回零。将其“set ”为值456,点击set,再点击 get,您将看到返回456。如果我在“increment” 输入 某个值,比如说3,然后点击 increment ,再次get 后得到459。输入“decrement” 的值为 8,然后点击decrement ,我应该得到451。我得到了451。这就是简单存储。



我可以使用智能合约地址再次创建此简单的存储,复制红框框起来的智能合约地址地址,将其放在本地合约地址中。再创建一个智能合约。在这里,我们就有两个智能合约,它们具有相同的地址。

这里的截图是我自己运行的截图,与课程视频中不太一样。仅供参考。

阅读材料
Structure of a Contract





Camel Case
Camel case 驼峰式大小写,是一种写短语的做法,使短语中间的每个单词或缩写都以大写字母开头,中间没有空格或标点符号。常见的示例包括“ iPhone ”和“ eBay ”。驼峰式大小写通常在计算机编程中用作变量名。某些编程风格更喜欢首字母大写的驼峰式大写,大驼峰大写(大写的首字母,也称为Pascal大小写)和小驼峰大写(小写的首字母,也称为Dromedary大小写)
Introduction to Smart Contracts

测试题

处理智能合约(compilation artifacts 演示)

完成本课程后,您将能够解释智能合约的地址,列出由编译器 compiler 生成的编译工件 compilation artifacts,字节码 byte code,ABI,web3deploy脚本,函数hashes和 gas 估计值 gas estimates。 可以代表外部拥有的帐户,通过从命令行界面以编程方式应用程序以及通过高级应用程序和用户界面或UI中的命令脚本来创建智能合约。 也可以从智能合约内部创建它。 我们将在以后的课程中介绍这种方法。我们需要一个用于智能合约的地址来部署它并调用其功能。 通过对外部拥有的帐户UI和随机数的帐号进行哈希运算来计算地址。

再次打开 Greeter 合约,编译后查看Detail

您将看到合约名称,合约元数据 metadata ,在以太坊虚拟机上执行的智能合同的字节码 bytecode, 应用程序二进制接口Application Binary Interface, Web3deploy脚本,Web应用程序使用它来连接智能合约和元数据哈希。还有其他细节,函数哈希,调用函数的哈希 The function hashes 以及执行函数时的 gas estimates,运行时字节码 runtime bytecode 以及汇编代码 assembly code。

要编译合约,会生成各种工件,包括:用于部署合约的字节码,以及用于智能合约与已部署的字节码交互的应用程序的应用程序二进制接口ABI。 Remix编译器脚本一次生成了许多工件。您可以通过单击“编译”按钮,然后单击“编译”按钮正下方的“详细信息”按钮来查看生成的这些项目。

Remix智能合约编译过程生成的一些工件 artificial 及其用法。

ABI:应用程序二进制接口,用于在智能合约实例字节码上调用功能的事务的接口架构。
合约字节码:这是为在EVM上实例化智能合约而执行的字节码。可以将其视为执行智能合约的构造函数来创建对象。
WebDeploy脚本:这是两个项目,json脚本到Web应用程序以调用智能合约功能,该脚本用于以编程方式从Web应用程序部署智能合约。
gas估算:这为部署智能合约和功能调用提供了gas估算。
函数哈希:函数签名的前四个字节,以促进事务处理函数的调用。
实例字节码:智能合约实例的字节码。

阅读材料
Account Types, Gas, and Transactions

测试题

部署智能合约 Deploying Smart Contracts

学习目标:
1)能够解释智能合约的部署过程
2)探索由Remix编译过程生成的工件
3)讨论如何使用这些工件来部署智能合约并与之交互。

智能合约部署过程
(根据视频内容自己总结的,可能不够准确。如有错误欢迎指出)

1)用高级语言编写智能合约解决方案并编译字节码。还会为高级语言应用程序生成一个ABI。EVM为字节码提供执行环境。
2)生成智能合约地址。通过对发件人的帐户地址及其 nonce 进行哈希来生成合约地址。智能合约需要一个地址,以便在交易时可以将其作为调用其功能的目标。
3)保留一个唯一的目标帐户,用于智能合约的创建和部署。如果目标的地址为零或为空,则意味着使用其有效负载 payload feed 来创建新的智能合约。交易的有效负载 payload 包含智能合约的字节码。该代码作为事务执行的一部分执行,以实例化实际智能合约的字节码。
4)在EVM上部署此智能合约代码。与构造函数创建对象的方式类似,执行智能合约创建事务会导致在EVM上部署此智能合约代码。它被永久存储在EVM中,以备将来调用。
5)该交易经过以太坊区块链协议中规定的所有常规验证和确认,全节点的区块创建,交易确认在所有节点上部署相同的合约。当在智能合约上调用带有功能消息的常规交易时,这将提供一致的执行。

现在,我们已经解释了部署智能合约的基本过程,但是还有许多其他方法可以用于部署此智能合约。可以从Remix IDE,其他智能合约命令行界面,其他高级语言应用程序或Web应用程序进行部署。

对于使用 Remix IDE 进行部署
在Remix IDE中输入智能合约代码并进行编译。 Remix会生成一些前面所述的 artifacts 。

为了便于部署,Remix为我们提供了包含字节码、应用程序二进制接口(ABI)和帐户详细信息的Web3部署脚本。要部署智能合约,我们只需执行脚本即可。部署完成后,将通过哈希创建者的帐号和随机数生成地址。为了与智能合约进行交互,我们将使用智能合约地址,ABI定义和函数哈希。

阅读材料
Ethereum, Tokens, and Smart Contracts
Decoding the Enigma of Bitcoin Mining

测试题

REQUIRED Quiz Resources and Directions: Smart Contract

这些是本课程和演示中使用的 Solidity Documentation 中的所有智能合约程序。您将必须将正确的程序复制并粘贴到Remix中,进行编译和运行,然后根据结果回答问题。

注意:BallotBasic.sol 相当于视频中的Ballot version 1,BallotWithStages.sol 相当于视频中的 Ballot version 2, BallotWithModifier.sol 相当于视频中的Ballot version 3

区块链智能合约Coursera(第一周)智能合约基础相关推荐

  1. 区块链研习 | 区块链里所说的“智能合约”是什么? 本文作者:敖萌 编辑:温晓桦 2017-10-11 20:31 导语:谈到区块链,必然离不开“智能合约”这个词。我们在本系列的第一篇文章中提到“智能

    区块链研习 | 区块链里所说的"智能合约"是什么? 本文作者:敖萌 编辑:温晓桦 2017-10-11 20:31 导语:谈到区块链,必然离不开"智能合约"这个 ...

  2. 调用wasm_PDX Utopia区块链协议栈使用Solidity调用wasm智能合约

    在这个瞬息万变的世界中,智能合约已成为所有平台中强有力的服务.Solidity是一种趋势,PDX Utopia区块链协议栈使用Solidity调用wasm智能合约. ▼ 什么是Solidity? So ...

  3. 【硅谷商学院】全球颠覆性创新峰会:区块链投资,十一黄金周于美国硅谷华丽落幕!GDIS年度大会引领科技潮流...

    由硅谷商学院主办,深脑链合办的全球颠覆性创新峰会:区块链投资,十一黄金周于美国硅谷华丽落幕!本次峰会把握住当下最前沿的区块链趋势,深度探讨区块链投资.区块链+AI.区块链技术人才.峰会当天汇集了超过3 ...

  4. 区块链】利用Node.js开发与合约交互的Web界面

    区块链]利用Node.js开发与合约交互的Web界面 2018-03-11 16:10:37 宣之于口 阅读数 6128  收藏 更多 分类专栏: 区块链 区块链学习笔记 版权声明:本文为博主原创文章 ...

  5. 2018中国区块链百强企业第一弹 | 链塔智库

    2019年1月22日,领先的区块链数据服务商--链塔(BlockData)联合清华大学互联网产业研究院.工信部赛迪区块链研究院在清华大学经济管理学院伟伦楼举办第一届中国区块链产业经济发展年会. 会上, ...

  6. 官方认证,区块链从业者秋天的第一份上岗证书来啦!

    "人社证书已经到了!" 10 月 8 日,<区块链应用操作员>证书正式下发到每一位通过区块链应用操作员技能考试的学员手中,他们从此有了官方认证的从业"身份证& ...

  7. ​深度学习笔记 第四门课 卷积神经网络 第一周 卷积神经网络基础

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  8. 区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码

    本文使用区块链平台以太坊+智能合约实现一个区块链记账的功能,具体为: 借款人和贷款人以及数额被记录在区块链中.使用区块链地址来表示借款人或者贷款人. 若一个借款人多次向一个贷款人借钱,更新所有的数额之 ...

  9. EOS区块链技术开发(二)智能合约

    强烈建议直接去看EOSIO官网上的教程:https://developers.eos.io/ 不要看我的??博文了,以下博文就是我当时随便写写的,现在也没有什么时间详细修改.如果有问题可以提问. 注: ...

  10. 区块链技术精华:四十种智能合约支持平台(三)

    摘要: 智能合约是以数字形式定义的承诺,控制数字资产并涵盖合约参与者约定的权利和义务.它由计算机系统自动执行.在基于区块链的智能合约中,数据管理.事务验证和状态处理都是在区块链上完成的,区块链提供完备 ...

最新文章

  1. 曲线数学NURBS之bezier曲线
  2. wireshark 配 filddler 手机抓包
  3. 方立勋_30天掌握JavaWeb_(JSP+JavaBean实现)简单计算器
  4. 【CodeForces - 208C 】Police Station(单源最短路条数,起点终点建图,枚举顶点)
  5. 密码与安全新技术总结
  6. Java的ATM界面任务台选择同时有文本和数据库登陆注册
  7. AndroidStudio_android开发在线文档_在线API_蓝牙开发在线文档---Android原生开发工作笔记243
  8. MIT6.006Lec03:插入排序,归并排序,递归树
  9. 跟着【莫烦python】学习神经网络框架TensorFlow和Pytorch学习笔记
  10. html 媒体查询改变字体,CSS----媒体查询设置根节点字体大小
  11. win7计算机管理没有键盘,win7系统中出现键盘无法输入的详细解决步骤
  12. (二) icarus主题配置
  13. Django框架学习——4—(DTL模板标签、模版常用过滤器、模版结构优化、加载静态文件)
  14. 安卓逆向(Android)之二__《全民捕鱼》游戏内购破解
  15. Deep Freeze冰点还原精灵破解|对Persi0.sys文件的思考
  16. Android支付接入(一):支付宝
  17. Hive SQL 计算指定日期本周的第一天和最后一天
  18. 软考高级软件架构风格定义以及分类
  19. dnf史诗计算机手机版,DNF手游终于要来了!可端游的史诗级装备该咋办…
  20. Jacobi 和 Gauß-Seidel 迭代方法

热门文章

  1. 【云速建站】让你轻轻松松建立属于自己的网店
  2. Word处理控件Aspose.Words功能演示:使用 C# 在 Word 文档中创建和修改 VBA 宏
  3. 欧洲发展最快的金融科技初创公司如何扰乱支付行业
  4. 读万卷书+行万里路+阅人无数+名师指路+自己悟
  5. mysql30天到期了_msyql设置合同到期提醒天数30天
  6. 使用ArcGIS制作专题图,并添加经纬网
  7. 离婚时分割房产无法达成一致,怎么办?
  8. 02-06 普通线性回归(波斯顿房价预测)+特征选择
  9. matlab中SG滤波器的说明
  10. Eolink上传文件和其他参数设置