智能合约

智能合约开发以太坊DApp应用程序示例

你离开我真会死。 提交于 2021-02-11 06:17:35
智能合约开发是以太坊开发的核心,学习编写智能合约主要是搭建以太坊开发环境和solidity开发智能合约。不使用任何以太坊Dapp框架,直接使用solidity在ganache下开发智能合约。 让我们构建一个简单的"Hello World!" 应用程序, 这是一个投票应用程序。 该应用程序非常简单,它所做的只是初始化一组候选人,让任何人投票给候选人,并显示每个候选人收到的总票数。 我有意避免使用任何DAPP框架构建这个应用程序,因为框架抽象掉很多细节,你不了解系统的内部。此外,当你使用框架时,将对框架所做的繁重工作有更多的体会! 我们的目标是: 建立开发环境。 学习编写智能合约 1. 设置开发环境 我们使用一个模拟的内存区块链(ganache)代替真实的区块链在进行开发。在本教程的2章,我们将与真实的区块链交互。下面是安装ganache、web3js的步骤,然后在linux上启动一个测试链。在macOS上安装过程也是一样的。 你可以看到ganache-cli自动创建了10个测试账号,每个账号预分配了100(虚构的)ethers 如果需要更详细的开发环境安装教程,可以参考如下文章: windows以太坊开发环境搭建 linux/ubuntu以太坊开发环境搭建 2.简单的投票合约 我们将使用solidity编程语言来编写我们的合约。如果您熟悉面向对象编程

开发基于以太坊智能合约的DApp

自闭症网瘾萝莉.ら 提交于 2021-02-10 13:26:54
最近要找个H5的前端写个简单的DApp,聊过几个H5的工程师,都被跟以太坊交互的部分吓住了。虽然网上有N多的教程,但是对于H5工程师来说,还是有些困难。分析其原因,在于不了解ganache-cli(原来叫testrpc)/web3/以太坊节点/metamask之间的架构关系。 梳理一下架构关系: web3.js与以太坊通信是通过rpc的方式实现的。 以太坊节点本来提供了rpc的访问方式,但是因为以太坊节点的地址不确定,并且DApp需要访问钱包,所以用web3.js直接访问以太坊节点的rpc服务是不现实的。 ganache-cli模拟了一个以太坊的测试节点并提供对外的rpc访问方式(就是例子里经常说的 http://localhost:7545或者http://localhost:8545)。同时在其中内置了M个以太坊帐号,用于测试。 MetaMask是一个以太坊的网络钱包插件,它也提供了web3的访问方式。而且可以通过这个插件指定后面的以太坊节点是什么。因为MetaMask是个钱包插件,所以解决了DApp中的支付问题。所以现在的DApp都依赖它。 有一个 以太坊教程 ,是在线学习的,大家可以去看看,如果自己本机上搞,开发DApp的基本过程都是一样的如下: 1、安装NodeJS 2、安装truffle:一个开发DApp的开发框架 nmp install -g truffle 3

以太坊智能合约示例

半世苍凉 提交于 2021-02-10 05:17:43
目前的智能合约基本都是运行在以太坊上。本文将通过一个简单而具体的智能合约实例来帮助大家理解智能合约的编写、部署与调用。这个例子很简单,但通过它你可以了解开发一个以太坊的智能合约的完整过程。 在之后的教程中,我们将结合不同的场景案例,分别举出不同的例子例如投票、众筹、拍卖、ERC20/ERC721代币发行等,并实现相应的solidity示例代码。我们希望你能在实践中逐步理解学习智能合约的开发语言solidity,理解智能合约的运行原理,并掌握必要的以太坊智能合约编程技能。 如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战开发入门 去中心化电商DApp实战开发 开发语言和开发环境选择 目前智能合约最受欢迎的编程语言为Solidity,但是并不只有Solidity。作为初学者,编写Solidity代码,我们可以使用Remix,它是一个基于浏览器的Soldity IDE,网址为: http://remix.ethereum.org/ 。Remix支持编写、测试和部署智能合约。 编写代码 学一门语言的第一个程序毋庸置疑都是HelloWorld,那么我们就来写一个HelloWorld的智能合约吧。合约代码如下。 pragma solidity ^0.4.21; contract HelloWorld { string hello =

以太坊智能合约Demo

巧了我就是萌 提交于 2021-02-09 09:50:30
智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战demo示例快速入门,用demo例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技术魅力。智能合约其实是“执行合约条款的计算机交易协议”。区块链上的所有用户都可以看到基于区块链的智能合约。 维基上说智能合约(英语:Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易。这些交易可追踪且不可逆转。智能合约概念于1994年由Nick Szabo首次提出。智能合同的目的是提供优于传统合同方法的安全,并减少与合同相关的其他交易成本。 由于区块链上的所有用户都可以看到基于区块链的智能合约。这也会导致包括安全漏洞在内的所有漏洞都可见,并且可能无法迅速修复。这样的攻击难以迅速解决。 插曲,2016年6月The DAOEther的漏洞造成损失5000万美元,而开发者试图达成共识的解决方案。DAO的程序在黑客删除资金之前有一段时间的延迟。以太坊软件的一个硬分叉在时限到期之前完成了攻击者的资金回收工作。以太坊智能合约中的问题包括合约编程Solidity、编译器错误、以太坊虚拟机错误、对区块链网络的攻击、程序错误的不变性以及其他尚无文档记录的攻击。 部署智能合约的经典案例有: 以太坊在其区块链上实施了一种近乎图灵完备的语言

「教程」用Solidity开始编写你的第一个智能合约

匆匆过客 提交于 2021-01-10 21:25:56
本文翻译自: Gerald Nash《Build Your First Smart Contract》 原文地址:https://medium.com/crypto-currently/build-your-first-smart-contract-fc36a8ff50ca 由微信公众号“Wancloud万云”翻译并发布于公众号上。 这篇文章,我们将用使用编程语言Solidity教大家编写一个简单的counter智能合约。Solidity这种语言与JavaScript相似。 开始之前,您需要安装的工具: 1. Ganache :这将是我们用来创建仅在我们的计算机上运行的私有区块链的工具。链接:http://truffleframework.com/ganache/ 2. MyEtherWallet副本 ,在这种情况下,URL托管的网站将不起作用。链接:https://github.com/kvhnuke/etherwallet/releases 注意:下载的版本是etherwallet-v3.xx.x.x.zip。 安装完成后,我们开始访问https://remix.ethereum.org/,打开这个网址后显示如下: 这是Remix,一个Solidity语言的在线编译器,我们将用此编译器来编写智能合约代码。 第一次访问该页面时,我们需要将本文编辑器预加载的代码删除

智能合约开发语言

雨燕双飞 提交于 2020-12-02 10:13:41
原文链接 区块链技术入门,涉及那些编程语言?在本文中,将介绍比特币、超级账本Fabric和以太坊这三种区块链中,分别使用什么开发语言来进行智能合约编程,并提供你进一步学习的资源链接。 比特币 比特币是第一个真正意义上的区块链,不过,从严格意义上来讲,它对智能合约的开发者是不友好的。 可以用一种低门槛的编程语言 Bitcoin Script 在比特币系统上编写智能合约。每个比特币地址都对应着一个Bitcoin Script程序。看起来是这样: IF 2 <Alices' pubkey> <Bob's pubkey> <Escrow's pubkey> 3 CHECKMULTISIG ELSE "30d" CHECKSEQUENCEVERIFY DROP <Alices' pubkey> CHECKSIG ENDIF 另一种较高级别的语言是Ivy,它可以编译成Bitcoin Script。Ivy能够帮助你编写自定义的比特币地址,这种地址与隔离见证(SegWit)兼容,在比特币协议(包括签名检查、hash特征值(commitment)和时间锁)的支持下,可以执行任意条件组合。例如: contract EscrowWithDeplay{ sender: PublicKey recipient: PublicKey, escrow: PublicKey, delay: Duration,

极简科普:关于智能合约,你需要了解的几点知识

自作多情 提交于 2020-03-17 18:32:52
某厂面试归来,发现自己落伍了!>>> 业内人士习惯将比特币称为“区块链一代目”,以太坊则是“区块链二代目”。以太坊区别于比特币区块链很重要的一点是它找了个CP“智能合约”。 智能合约是什么呢?它在区块链中的作用是什么?下面将从概念、工作原理、优势等几方面,为大家介绍智能合约。 智能合约是什么? 智能合约的概念最初是由密码学家和计算机科学家Nick Szabo(曾是2017年万向区块链全球峰会的演讲嘉宾)于1993年提出的。 随着它在区块链领域的运用,越来越为更多人所熟知。 智能合约可以简单地定义为运行在区块链顶部的计算机代码。它包含一组规则,这些规则决定了相关方如何相互作用于彼此。只要满足预先制定的规则,协议就会自动执行。 有趣的是,智能合约既不智能,又和现实生活中的法律协议不一样。智能合约“只能和编译它的人一样聪明”,换句话说,智能合约只是软件程序,与所有程序一样,完全按照程序员的意图执行。智能合约就像编程应用程序一样:“一旦出现,就去执行。” 此外,在满足某些条件的情况下,它们有可能成为合法合同。但是,不能把它们和现实中的法律合同相混淆。不过,随着区块链的快速发展,智能合约和法律合同有融合的可能性。 智能合约是如何工作的? 举个例子就很好理解了。 张三找李四借了1000元,双方说好在一周后还款。这时,他们没签任何字据,也没有指定第三方来监督。约定还款的时间到了,张三没还款

以太坊智能合约漏洞实战详解:整数溢出攻击

陌路散爱 提交于 2020-03-09 04:43:46
以太坊智能合约漏洞实战详解:整数溢出攻击 0x01 溢出攻击事件 2018年4月22日,黑客对BEC智能合约发起攻击,凭空取出 个BEC代币并在市场上进行抛售,BEC随即急剧贬值,价值几乎为0,该市场瞬间土崩瓦解。 2018年4月25日,SMT项目方发现其交易存在异常,黑客利用其函数漏洞创造了 的SMT币,火币Pro随即暂停了所有币种的充值提取业务。 2018年12月27日,以太坊智能合约Fountain(FNT)出现整数溢出漏洞,黑客利用其函数漏洞创造了 的SMT币。 让我们一起以沉痛的心情缅怀以上一夜归零的代币。 0x02 整数溢出简介 整数溢出原理 通常来说,在编程语言里由算数问题导致的整数溢出漏洞屡见不鲜,在区块链的世界里,智能合约的Solidity语言中也存在整数溢出问题,整数溢出一般分为又分为上溢和下溢,在智能合约中出现整数溢出的类型包括三种: 乘法溢出 加法溢出 减法溢出 在Solidity语言中,变量支持的整数类型步长以8递增,支持从uint8到uint256,以及int8到int256。例如,一个 uint8类型 ,只能存储在范围 0到2^8-1,也就是[0,255] 的数字,一个 uint256类型 ,只能存储在范围 0到2^256-1的数字。 在以太坊虚拟机(EVM)中为整数指定固定大小的数据类型,而且是无符号的

Go语言以太坊DApp开发教程

给你一囗甜甜゛ 提交于 2020-03-03 00:12:17
以太坊是备受关注的区块链,它基于密码学技术和P2P通信技术构建了一个去中心化的平台,所有的交易同步保存在每个节点中,通过将区块单向级联成链,以太坊有效的保证了交易的不可篡改: 智能合约平台 以太坊是第一个实现了虚拟机的区块链,因此为智能合约 - Smart Contract - 的运行提供了良好的支持环境。也正因为这个原因,以太坊被称为区块链2.0,以区别于比特币代表的以数字加密货币为核心特征的区块链1.0。 可以将智能合约理解为机器之间的合同约定,在满足一定条件时自动执行约定好的逻辑,例如在保险理赔流程中,如果理赔条件满足就自动将赔偿金释放给出险人,这个流程就可以使用智能合约来实现。 有多种语言可以开发以太坊智能合约,但目前最常用的是类似于JavaScript的Solidity语言。本课程中将采用Solidity讲解智能合约的开发。 JSON RPC 如果我们希望构造一个去中心化应用( DApp ),除了智能合约的开发,通常还需要使用其他开发语言为用户提供操作智能合约的用户接口,例如开发一个网页、一个手机App或者一个桌面应用。这些代码都需要与以太坊进行交互。 以太坊规定了每个节点需要实现的 JSON RPC API 应用开发接口,该接口是传输无关的,应用程序可以通过HTTP、websocket或IPC等多种通信机制来使用该接口协议操作以太坊节点:

学习笔记-5

纵然是瞬间 提交于 2020-03-02 13:14:27
智能合约&区块链 一、智能合约的定义 智能合约”(smart contract)这个术语至少可以追溯到1995年,是由多产的跨领域法律学者尼克·萨博(Nick Szabo)提出来的。他在发表在自己的网站的几篇文章中提到了智能合约的理念。他的定义如下: “一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。” 通俗来说,智能合约就是计算机中的一段代码,这段代码定义了一个协议,就像现实世界中的合同。当满足一定条件时间后(比如合同到期,乙方违约等),合约自动执行,中间无需第三方参与。 二、智能合约与区块链 智能合约看上去就是一段计算机执行程序,满足可准确自动执行即可,那么为什么用传统的技术为何很难实现,而需要区块链技术等新技术呢?传统技术即使通过软件限制、性能优化等方法,也无法同时实现区块链的特性: 是数据无法删除、修改,只能新增,保证了历史的可追溯,同时作恶的成本将很高,因为其作恶行为将被永远记录; 是去中心化,避免了中心化因素的影响。` 基于区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可攥改。同时,由区块链自带的共识算法构建出一套状态机系统,使得智能合约能够高效地运行。 三