智能合约

以太坊智能合约的安全注意事项

匿名 (未验证) 提交于 2019-12-02 22:56:40
安全注意事项 虽然它通常是很容易建立一个运行正常的软件,它是更难检查,没有人能在这是一个方式来使用它没有预料到的。 在Solidity中,这更为重要,因为您可以使用智能合约来处理令牌,或者甚至可能使用更有价值的东西。此外,智能合约的每次执行都是在公共场合进行的,除此之外,源代码通常也是可用的。 当然,你总是要考虑有多大危险:你可以将智能合约与对公众开放的网络服务(以及对恶意行为者)甚至是开源的网络服务进行比较。如果您只将购物清单存储在该网络服务上,则可能不必太在意,但如果您使用该网络服务管理您的银行帐户,则应该更加小心。 本节将列出一些陷阱和一般安全建议,但当然可以永远不完整。另外,请记住,即使您的智能合约代码没有错误,编译器或平台本身也可能存在错误。可以在已知错误列表中找到编译器的一些公知的安全相关错误的 列表,这些错误也是机器可读的。请注意,有一个bug bounty程序,它涵盖了Solidity编译器的代码生成器。 与往常一样,使用开源文档,请帮助我们扩展此部分(特别是,一些示例不会受到伤害)! 陷阱 私人信息和随机性 您在智能合约中使用的所有内容都是公开可见的,甚至是标记的局部变量和状态变量private。 如果你不希望矿工能够作弊,在智能合约中使用随机数是非常棘手的。 重入 合约(A)与另一合约(B)之间的任何互动以及任何以太方移交控制权转移到该合约(B)

如何调用以太坊智能合约

旧巷老猫 提交于 2019-12-02 12:39:15
First and foremost 在CTF的智能合约题目里,一个很大的瓶颈(对于我自己🙁)就是不知道该如何调用合约,尤其是无源码的合约逆向。学习了一些文章,大概掌握了一些方法,因此再造个轮子记忆一下。可能还不是很全,学到新的再去补充。 需要用到的工具就是Remix IDE和MetaMask插件钱包。 通过部署源码来调用 当然,自己写的合约放在Remix里编译部署后就可以直接调用;如果是别人的合约,并且我们能够拿到合约地址和源码,依然可以使用Remix来调用。 这里以 一道题目举例 : 合约代码: pragma solidity ^0.4.21; contract CallMeChallenge { bool public isComplete = false; function callme() public { isComplete = true; } } 在Ropsten测试网络下,题目给出了合约源码及其地址,要求调用callme()函数。 首先编译合约源码: 因为本题环境是在Ropsten测试网络下,Environment应选择“Injected Web3”,并且MetaMask是需要登录的。 然后在“At Address”栏里填入合约地址并点击该按钮部署合约: 之后会出现部署好的合约及其函数: 然后点击callme按钮就能调用callme函数,等待交易完成后

Uport-为分布式网络设计的开放式身份系统

狂风中的少年 提交于 2019-12-02 11:54:15
一、背景介绍 目前的身份系统解决方案存在许多问题。 数字身份在各种服务提供商之间是分散的、孤立的,阻碍了整体性,导致用户需要重复注册和使用用户名和密码登录,这样的体验非常不好,更严重的是,这样的方式会导致很多不安全因素,用户在不同的网站或应用中使用相同的密码。当前数十亿台的网络设备依赖Google和Facebook提供身份服务,它们的集中式服务器极易成为黑客攻击的对象,因此这些身份提供商在管理或者技术上的漏洞将会对数字和物理基础设施造成灾难性后果。 密码学和区块链等去中心化技术为上述问题提供了非常有前景的解决方案。这些技术将身份的所有权从集中式服务推向个人控制,这通常被称为自主身份。这种方法将数据和计算去中心,并将它们推向边缘,它需要大量的努力来逐一攻击许多个人身份,这对黑客来说在经济上不太有价值。 然而,向普通用户引入新技术是非常困难的,像PGP这样的公钥加密工具已经存在了25年,但由于它们不够直观以及复杂的流程导致用户体验很差。 与基于区块链的系统进行交互需要可用的公钥私钥密码系统,到目前为止,密钥管理解决方案(通常称为“钱包”)很难用于非技术用户,但是,区块链本身可以通过充当去中心公钥基础设施(PKI)来帮助使公钥密码更加易用和安全。区块链可以被看作是一个去中心的认证机构(CA),可以维护身份到公钥的映射。智能合约还可以添加复杂的逻辑,有助于密钥的撤销和恢复

ETH&EOS开发资源及工具集合

爱⌒轻易说出口 提交于 2019-12-02 05:39:56
作者:BinSTD 链接: https://www.nowcoder.com/discuss/142826?type=5 来源:牛客网 ETH 开发资源篇 一、开发语言 · Solidity - 官方推荐以太坊智能合约开发语言,也是目前最为主流的智能合约语言 · Bamboo - 是一种将智能合约描述为有限状态机的语言,把智能合约看成一个状态和交易的函数,同时生成一个新的状态 · Vyper - 一种类 python 的面向合约编程语言,专注于以太坊虚拟机,着重于安全、简洁、和稳定性 二、ERC 通证标准 · ERC-20 - 可替换资产的原始代币合约 · ERC-223 - 向后兼容ERC-20,解决地址错误丢失代币的缺陷 · ERC-721 - 非同质性代币,可用来标记独特的个人资产 · ERC-777 - 包含更大广度的交易处理,具有高度可定制性 · ERC-827 - 允许转让通证并允许持有人允许第三方使用通证 · ERC-918 - Mineable Token Standard · ERC-998 - 可拆解非同质化代币,可包含多个ERC-721和ERC-20形式 · ERC-1155 - 可在一个智能合约中定义多个物品(token) · ERC-1400 - 证券通证标准,部分可互换代币,该EIP标准具有能力进行强制转移 · ERC-1404 - 为证券通证

大白话科普区块链原理【子豪兄区块链讲义】

限于喜欢 提交于 2019-12-02 02:43:56
用大白话和可视化展示区块链基本原理、共识机制、虚拟货币、挖矿原理、智能合约,区块的产生与溯源及应用场景,并教你如何上传信息到以太坊主链上,并发行自己的数字代币。用可视化网页制作区块链,演示区块链中的哈希加密、工作量证明、分布式存储基本原理。 让初学者用十分钟时间了解改变世界的区块链技术,并理解为什么区块链能做到去中心化、公开透明、难以篡改、可溯源。 本文配套B站视频:01大白话讲解区块链基本原理 本文配套B站视频:02可视化网页搭建区块链 关注微信公众号 人工智能小技巧 回复 区块链 即可看到所有文章及视频链接、可视化区块链网站、区块链浏览器。 知乎专栏: 人工智能小技巧 ,所有文章欢迎转载! 作者:张子豪(同济大学在读研究生) 2018-11-24发布 文章目录 第一讲 区块链原理 第二讲:可视化网页搭建区块链 第三讲 大白话讲解比特币 第四讲 大白话讲解以太坊 补充内容:趣闻 第一讲 区块链基本原理 区块链ABC 区块链的本质:分布式数据库 区块数据结构 区块链的特点 区块链解决的问题 区块链为什么能保证数据安全 区块链的升级:智能合约 传统的中心化第三方资金托管 智能合约 以太坊:支持智能合约的区块链系统 区块链应用场景 区块链浏览器 比特币浏览器 以太坊浏览器 可视化区块链讲解 哈希256加密算法 单个区块内部的数据结构 单条区块链的形成 分布式区块链——工作量证明

以太坊智能合约升级策略

吃可爱长大的小学妹 提交于 2019-11-30 18:32:54
本文是对以太坊中可升级智能合约领域的各种实现策略的总结 ,目的是汇总迄今为止的相关资源, 以帮助我们在设计智能合约时,考虑如何对其进行升级和更新。 100%可升级机制 目前有两种主要策略用来实现可升级的智能合约: 使用代理合约 将逻辑和数据分离成不同的合约。 这两种方法要解决的根本问题是如何更新合同的逻辑,同时仍然保留对合同状态的访问。 代理合约 代理合约使用 delegatecall 操作码将函数调用转发到可更新的目标合约。 由于delegatecall 保留了函数调用的状态,因此可以更新目标合约的逻辑,并且状态将保留在代理合约中以供 更新后的目标合约的逻辑使用。 与delegatecall一样,msg.sender将保持代理合约的调用者身份。 由于最近的拜占庭硬分叉,现在可以获取函数调用的返回大小了,因此与 Nick Johnson 首次提出的方法相比,目前这种方法可以通用。 在 Daonomic 的文章中可以 看到一个通用代理合约的例子,你可以更详细地了解这个机制。 分离逻辑和数据合约 这中方法到将智能合约拆分两个合约: 包含数据(变量,结构,映射等)以及getter/setter的数据合约 包含如何更新这些数据的业务逻辑的逻辑合约 逻辑合约通过setter更新数据,而数据合约只允许逻辑合约调用setter。 这允许在保持数据不变 的同时更换实现逻辑,从而实现完全可升级的系统

从零学本体dApp开发(13):如何用VS code开发智能合约

南楼画角 提交于 2019-11-30 06:16:26
原创 | 工匠 (来自本体社区的技术人员) --------------- 写在前面 最近在利用业余时间学习本体的开发。我打算把自己学习的过程记录下来,一方面便于自己梳理学到的东西,另一方面希望可以通过笔记的共享,能使本体后来的开发者少走弯路。 由于是初学者,学习本体开发的过程中遇到了很多问题,在此,特别感谢本体社区的各位老师(宏雷、楚笙、Mickey、雪飞的逆袭、Andy季、周佩文等)耐心地为我解答各种各样的问题,本体有你们,真好! 学习本篇的目的: 前几篇我们创建智能合约都是在SmartX里面,但是本体官方推荐了一款更加强大的开发工具VS code, 这一篇我们就来学学如何利用VS code本体插件开发本体智能合约。 目录: 1. VS code是什么? 2. VS code本体插件是什么? 3. VS code本体插件安装和设置 1.VS code是什么? Visual Studio Code(点我下载)是Microsoft在2015年4月30日Build 开发者大会上正式宣布了 的项目,它是一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。 他的功能一款非常强大的工具,集成了各种语言,如GO, C++, JAVA, Python,C#,还有各种各样功能强大的插件,比如本体插件。 Visual

Java调用以太坊智能合约

蓝咒 提交于 2019-11-30 04:04:52
Web3j让Java开发者可以轻松地访问以太坊区块链并调用区块链上的智能合约的方法,在本教程中,我们将学习如何创建一个简单的命令行应用来访问区块链上的合约。 1、什么是web3j Web3j是一个开发包,你可以利用这个开发包快速实现对以太坊/Quorum节点的访问,同时也可以用它为某个智能合约文件生成对应的java封装类,以便在Java应用中调用。 系统学习web3j开发,推荐汇智网的在线互动教程: 《Web3j以太坊开发详解》 2、节点安装与智能合约部署 首先我们需要搭建一个以太坊网络并部署智能合约,你可以参考这个 repo ,按照README说明搭建并部署智能合约。 要调用以太坊链上的合约,我们需要两个东西: 钱包私钥 合约地址 在区块链领域,账号通常称为钱包,不过这是一个比较混乱的词语,有时钱包指的是单一地址,有时又指的是包含多个地址的容器。在本文中,一个钱包指的是单一的以太坊地址, ganache在启动时会列出10个钱包地址以及其对应的私钥。例如: (0) 11af9e9f87c53beedfe7eb3f1e9b6e2592b382ab3ecd83a92a6c20cb0c885f63 (1) 7cb8f9f70eac9aca70b514a9a8ebd36a3c2c4a9d28dc9534d6042914ed814161 (…) 在这个教程中,我们将使用0#地址,即:

数字身份-ERC1484、ERC725 、ERC1056

泪湿孤枕 提交于 2019-11-30 03:53:39
以太坊社区提出的新兴身份标准和相关框架包括ERC-725、ERC-735、ERC-780、ERC-1056等。 随着现有方法的成熟、新标准的出现以及孤立的、非标准的身份开发方法的出现,对区块链用户和开发人员来说,协调身份将变得越来越繁重,对于使用哪一个特定的身份框架尚未达成广泛共识。 ERC1484 作为一种身份聚合协议,ERC-1484开启了一种全新的身份管理思路。 该协议基于以太坊区块链的身份管理和聚合框架,允许实体通过单一的身份注册中心智能合约声明身份,以多种方式将其与以太坊地址相关联,并使它与智能合约进行交互。 值得关注的是,ERC-1484不仅可以创建具有自主权的身份,还可以原生支持ERC-725和ERC-1056身份。 ERC 725 谈到ERC-1484就不得不提到ERC-725和ERC-1056,既然有了这两个身份协议为何还要开发ERC-1484这样一个全新的身份协议呢?ERC-725身份标准填补了以太坊身份认证环节的缺失, ERC-725本质上是一个智能合约,它构成管理身份和信任的基础,并保证智能合约协议的执行。 简单来说,它是一个身份验证和识别机制,将为数字合约提供更有保障的身份认证,由于ERC-725只是设定了一个接口,因此人们可以按照自己的意愿去实现它们。 从整体上看,ERC-725处于十分初级的身份协议阶段,只是对区块链身份管理的方法对进行了最基本的定义

以太坊解析:默克尔树、世界状态、交易及其他

依然范特西╮ 提交于 2019-11-29 21:46:37
默克尔树 以太坊的主要数据对象之前,我想先向各位简要介绍一下默尔克树到底是什么,以使得它得以发挥作用的属性特征 假设由定制的默克尔-帕特里夏树维护世界状态和交易。 在默克尔树中, 由叶子节点保存区块数据的哈希,而由非叶子节点保存其子节点的哈希。 -默克尔树示意图(包括节点以及他们之间的关系) 默克尔树所 指向数据的任何改动都会引起节点哈希的变化。 由于每一个父节点中所保存的哈希值都取决于子节点所包含的数据,所以子节点中数据的变更都会引起父节点哈希的变化。并且这样的影响是连锁反应,从叶子节点直达根节点的。因此对叶子节点所指向数据的改动会引起根节点所保存哈希的变化。由上述结构特征,我们可以引申出两条重要的属性: 在判断两棵默克尔树所指向数据是否完全相同时,我们不需要比较每个叶子节点,而只需比较根节点所保存的哈希。 在判断特定数据是否被树所指向时,我们可以使用 默克尔证明 技术。此处不对该技术作过多介绍,只需知道这是证明数据存在于默克尔树中的一种简单、高效的方法。 第一种属性的重要之处在于,我们能够仅利用根节点的哈希值,就标示某一时刻整棵树所指向的数据。这意味着仅通过保存根节点的哈希值就能标示区块(无需储存区块链中所有的数据),且维护数据的不可篡改。 至此我们理清了默克尔树中根节点哈希的作用,下面来介绍以太坊中的主要对象。 世界状态 世界状态是地址(账户)到账户状态的映射