Solidity

智能合约开发新趋势【2019】

你离开我真会死。 提交于 2020-03-01 13:02:13
智能合约开发语言已经被Solidity统治了一段时间,它用于开发可以在以太坊虚拟机EVM上运行的智能合约。不过Solidity有一些严重的问题,包括算术溢出、类型错误以及曾经冻结了3亿美元的delegatecall漏洞。所有这些漏洞都是在开发语言层面存在的问题。换句话说,如果有一个好点的开发语言,本来应该可以创造更安全的智能合约。文本将列出在2019年值得关注的区块链智能合约开发技术趋势。 上汇智网,用互动方式学习以太坊、比特币、EOS、tendermint等更多 区块链开发教程 。 2019年,Solidity的挑战者终于来了。 Waves RIDE Waves RIDE是一个图灵不完备(没有循环或递归)的、收Haskell启发的函数式编程语言, 用于Waves区块链。它的特点包括静态类型、惰性评估、模式匹配和用于决定交易是否允许 完成的断言表达式。目前图灵完备的版本也在开发中。Wave的智能合约支持目前在主网上 已经激活。我们应当可以在2019年看到第一批Waves的dApp。 官方地址: https://docs.wavesplatform.com/en/technical-details/ride-language.html Plutus (Cardano) Plutus是另一个类Haskell的函数式编程语言,用于Cardano区块链。Cardano计划在2019年

2019年需要关注的区块链智能合约开发平台

孤街醉人 提交于 2020-03-01 13:01:58
智能合约开发语言已经被Solidity统治了一段时间,它用于开发可以在以太坊虚拟机EVM上运行的智能合约。不过Solidity有一些严重的问题,包括算术溢出、类型错误以及曾经冻结了3亿美元的delegatecall漏洞。所有这些漏洞都是在开发语言层面存在的问题。换句话说,如果有一个好点的开发语言,本来应该可以创造更安全的智能合约。文本将列出在2019年值得关注的区块链智能合约开发技术趋势。 上汇智网,用互动方式学习以太坊、比特币、EOS、tendermint等更多 区块链开发教程 。 2019年,Solidity的挑战者终于来了。 Waves RIDE Waves RIDE是一个图灵不完备(没有循环或递归)的、受Haskell启发的函数式编程语言,用于Waves区块链。它的特点包括静态类型、惰性评估、模式匹配和用于决定交易是否允许完成的断言表达式。目前图灵完备的版本也在开发中。Wave的智能合约支持目前在主网上已经激活。我们应当可以在2019年看到第一批Waves的dApp。 官方地址: https://docs.wavesplatform.com/en/technical-details/ride-language.html Plutus (Cardano) Plutus是另一个类Haskell的函数式编程语言,用于Cardano区块链

技术沙龙|解读以太坊黄皮书,学习智能合约应用开发(北京)

拜拜、爱过 提交于 2020-03-01 04:14:17
前几天HiBlock区块链社区的杨镇老师在一次访谈中再次聊到了区块链技术学习和应用的话题,杨镇老师的观点很明确, 技术学习要回归本质,区块链应用要融入场景。 杨镇老师2017年初开始翻译以太坊Homestead官方文档,对以太坊黄皮书(以太坊技术手册)中文版进行独立校订和增补更新,并且独立翻译了以太坊分片技术说明,他认为:“了解以太坊,最好的方式是学习官方技术文档,也就是以太坊黄皮书”。他的这一观点与很多技术专家都不谋而合。 HiBlock区块链社区与Thoughtworks联合策划了本次技术沙龙,遵循“技术学习回归本质,区块链应用融入场景”这一观点, 邀请杨镇老师讲解以太坊黄皮书,同时邀请到ThoughtWorks 咨询师/软件开发工程师王瑞鹏老师分享区块链在房屋租赁中的应用。 虽然前些天的房屋租赁风波逐渐平息,但事件中暴露出的相关问题仍然存在,同时房屋租赁中还有类似于黑中介、涨房租等等一系列问题,在这个场景中,区块链能解决什么问题? 10月13日,本次活动在华贸商务楼联合创业办公社进行,点击“阅读原文”即可报名参与。 1 时间地点 主题:理论与实践|以太坊黄皮书解读+房屋租赁应用开发 时间 :10月13日13:30—17:00 地点 :北京朝阳区建国路89号华贸商务楼16号B1 联合创业办公社、一层入负一层(711便利商店旁,地铁大望路站F口) 2 分享嘉宾及主题 话题1

区块链100讲:Solidity语法constant/view/pure关键字定义

僤鯓⒐⒋嵵緔 提交于 2020-02-29 02:13:57
通过本文学习,熟悉了解以太坊智能合约语言Solidity语法中constant,view,pure的区别。 1 区别总结 在Solidity中constant,view,pure三个函数修饰词的作用是告诉编译器,函数不改变/不读取状态变量,这样函数执行就可以不消耗gas了(是完全不消耗!),因为不需要矿工来验证。 在Solidity v4.17之前,只有constant,后来有人嫌constant这个词本身代表变量中的常量,不适合用来修饰函数,所以将constant拆成了view和pure。 view的作用和constant一模一样,可以读取状态变量但是不能改; pure则更为严格,pure修饰的函数不能改也不能读状态变量,否则编译通不过。 大家可以运行以下测试代码来加深这3个关键字的理解。 contract constantViewPure{ string name; uint public age; function constantViewPure() public{ name = "liushiming"; age = 29; } function getAgeByConstant() public constant returns(uint){ age += 1; //声明为constant,在函数体中又试图去改变状态变量的值,编译会报warning, 但是可以通过

用工厂模式管理以太坊的多个solidity智能合约

限于喜欢 提交于 2020-02-28 19:56:49
我们写了一份小的计算合约作为 Hello World 。如果我们可以创建一个允许用户创建自己的计数器的合约怎么办? 让我们创建我们的合约 CounterFactory ,它将管理所有其他计数器 Counters 。它将包含一个映射,将所有者与其计数器合约的地址相关联。 mapping(address => address) counters; 当用户想要使用我们的计数器系统来拥有他自己的计数器时,他将需要请求创建他的计数器。 function createCounter() public { if (counters[msg.sender] == 0) { counters[msg.sender] = new Counter(msg.sender); } } 请注意,我们将构造函数的地址传递给构造函数,因此我们将转移调用者的所有权。在新智能合约的构造函数中, msg.sender 将引用我们的合约工厂的地址。这是一个非常重要的要点,因为使用合约与其他合约进行交互是一种常见做法。因此,你应该在复杂的情况下照顾谁是发件人。 现在是增量函数,我们首先检查用户是否已经注册了智能合约并从合约中调用增量函数。由于映射存储了智能的地址,我们需要将地址转换为 Counter 合约类型。存储合约的地址而不是直接引用智能合约允许我们通过使用空地址检查合约是否已初始化:0或0x0 .. function

用Solidity语言通过以太坊钱包开发hello world示例

☆樱花仙子☆ 提交于 2020-02-28 19:54:10
使用 以太坊钱包开发 实现经典的HelloWord智能合约类。本文中,我们将看到如何编写简单的合约并将其部署到区块链上。我们还将通过发送和读取数据来了解如何与我们的智能合约进行交互。 Solidity的合约语法实际上与面向对象编程语言中的类很类似。智能合约有我们可以调用的函数和可以存储和读取的变量。 我们的 Counter 合约将存储它被调用的次数,使这个值可供每个人从区块链上读取。 pragma solidity ^0.4.11; contract Counter { /* define variable count of the type uint */ uint count = 0; /* this runs when the contract is executed */ function increment() public { count = count + 1; } /* used to read the value of count */ function getCount() constant returns (uint) { return count; } } 1.首先要发布我们的智能合约到区块链上,打开以太坊钱包 Ethereum Wallet,点击 “智能合约” contracts。 2.然后单击“部署一个新合约” Deploy a new contract

区块链100讲:深入了解以太坊虚拟机的汇编代码基础

五迷三道 提交于 2020-02-28 15:57:04
Solidity提供了很多高级语言的抽象概念,但是这些特性让人很难明白在运行程序的时候到底发生了什么。我阅读了Solidity的文档,但依旧存在着几个基本的问题没有弄明白。 string, bytes32, byte[], bytes之间的区别是什么? 该在什么地方使用哪个类型? 将 string 转换成bytes时会怎么样?可以转换成byte[]吗? 它们的存储成本是多少? EVM是如何存储映射( mappings)的? 为什么不能删除一个映射? 可以有映射的映射吗?(可以,但是怎样映射?) 为什么存在存储映射,但是却没有内存映射? 编译的合约在EVM看来是什么样子的? 合约是如何创建的? 到底什么是构造器? 什么是 fallback 函数? 我觉得学习在以太坊虚拟机(EVM)上运行的类似Solidity 高级语言是一种很好的投资,有几个原因: Solidity不是最后一种语言。更好的EVM语言正在到来。(拜托?) EVM是一个数据库引擎。要理解智能合约是如何以任意EVM语言来工作的,就必须要明白数据是如何被组织的,被存储的,以及如何被操作的。 知道如何成为贡献者。以太坊的工具链还处于早期,理解EVM可以帮助你实现一个超棒的工具给自己和其他人使用。 智力的挑战。EVM可以让你有个很好的理由在密码学、数据结构、编程语言设计的交集之间进行翱翔。 在这个系列的文章中

区块链100讲:以太坊智能合约solidity如何节省GAS费?

痞子三分冷 提交于 2020-02-28 15:52:47
1 摘要 在以太坊上,代码即法律,交易即金钱。每一笔智能合约的运行,都要根据复杂度消耗一笔GAS费(ETH)。那么,智能合约solidity语言的编写,不仅要考虑安全,也要考虑语言的优化,以便高效便宜了。 本文将从以下一些方面分析如何节约GAS的编程总结: 1)如何在REMIX编译器上分析GAS/GAS LIMIT等信息 2) 如何优化节省GAS费用的方法 创建合约优化 存储优化 变量排序优化 交易输入数据优化 转账优化 部署合约优化 调用合约函数的成本优化 2 如何在REMIX编译器上分析GAS/GAS LIMIT等信息 如果你想了解以太坊的账户、交易、Gas和Gas Limit等基本概念信息,可以阅读文章《 以太坊的账户、交易、Gas和Gas Limit 》。 如果你不了解以太坊智能合约语言solidity编译IDE环境REMIX,可以阅读文章《 Solidity语言编辑器REMIX指导大 全》。 本章节聚焦在如何通过REMIX编译器查看GAS/GAS LIMIT等信息。 2.1 简单智能合约样例 以太坊指令执行主要依靠GAS。当你执行智能合约时,它会消耗GAS。所以,如果你正在运行一个智能合约,那么每一条指令都要花费一定数量的GAS费。这有两个因素,即您发送的GAS数量和总区块GAS上限(a total block gas limit)。 举例来说,一个简单的智能合约

用solidity语言开发代币智能合约

南楼画角 提交于 2020-02-28 15:22:29
智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助。 以太坊的应用被称为去中心化应用(DApp),DApp的开发主要包括两大部分: 智能合约的开发 用户界面的开发 在本文中,我们将介绍智能合约的开发语言solidity。 让我们先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节。 contract SimpleStorage { uint storedData; function set(uint x) { storedData = x; } function get() constant returns (uint retVal) { return storedData; } } 在Solidity中,一个合约由一组代码(合约的函数)和数据(合约的状态)组成。合约位于以太坊区块链上的一个特殊地址。 uint storedData ; 这行代码声明了一个状态变量,变量名为storedData,类型为 uint (256bits无符号整数)。你可以认为它就像数据库里面的一个存储单元,跟管理数据库一样,可以通过调用函数查询和修改它。在以太坊中,通常只有合约的拥有者才能这样做。在这个例子中,函数 set 和 get 分别用于修改和查询变量的值。 跟很多其他语言一样

节约Gas成本的10个Solidity代码模式

只愿长相守 提交于 2020-02-27 05:02:14
在以太坊区块链上,Gas被用来补偿矿工为智能合约的存储与执行所提供的算力。目前以太坊的利用在逐渐增长,而交易手续费成本也水涨传告 —— 现在每天的gas成本已经高达数百万美元。随着以太坊生态系统的扩大,Solidity智能合约开发者也需要关注gas利用的优化问题了。本文将介绍在使用Solidity开发以太坊智能合约时常用的一些Gas优化模式。 以太坊教程链接: Dapp入门 | 电商Dapp实战 | Token实战 | Php对接 | Java对接 | Python对接 | C#对接 | Dart对接 1、使用短路模式排序Solidity操作 短路(short-circuiting)是一种使用或/与逻辑来排序不同成本操作的solidity合约开发模式,它将低gas成本的操作放在前面,高gas成本的操作放在后面,这样如果前面的低成本操作可行,就可以跳过(短路)后面的高成本以太坊虚拟机操作了。 // f(x) 是低gas成本的操作 // g(y) 是高gas成本的操作 // 按如下排序不同gas成本的操作 f(x) || g(y) f(x) && g(y) 2、删减不必要的Solidity库 在开发Solidity智能合约时,我们引入的库通常只需要用到其中的部分功能,这意味着其中可能会包含大量对于你的智能合约而言其实是冗余的solidity代码