Solidity

PHP如何通过编程在服务端验证以太坊签名

一个人想着一个人 提交于 2020-04-24 16:19:45
以太坊有一个非常强大的JavaScript生态系统。有一些很棒的开源项目,比如 ethereumjs-util ,它提供了一个用以太坊帐户签名的即插即用功能。 JavaScript的一个缺点是,在许多领域,它带来了安全问题。一个这样的安全风险是显而易见,这是由于我努力在 EthTools.com 上实现持久性认证(仍然是一个正在进行的被警告了的工作)。 利用开源项目(如ethereumjs-util)来签署任意的数据消息是相当容易的。然而,不容易的是告诉服务器有人已经成功地验证了某帐号的所有权。 当然这也不是绝对正确的,你也可以很容易做到这一点。简单地构建一个简单的API端点,并在成功认证后向其发出请求。 真正的问题是,创建一个“假”请求并将其发送到上述(易于识别 - 只需在控制台中查看)端点非常容易。 我可以轻松发出请求,说我已经验证了任何帐户的所有权。 凭借尖端技术……特别是处理“真实价值”的技术,尤其重要的是安全性体现出了它应有的重要性并被重视,特别是在历史上出现各种被利用的攻击的情况下。 而且即使是在初期,以太坊也吸引了最优秀的人——那些知道在做什么的人。如果有安全漏洞,有人会找到它。 现在。。虽然可以确保AJAX请求和伪造更难,但几乎不可能使交易100%的安全。我需要另一种方式。 我最终解决的方法是选择最简单的服务器端认证方式。 对每个人交易都是可视化的

【智能合约】编写复杂业务场景下的智能合约——可升级的智能合约设计模式(附Demo)

回眸只為那壹抹淺笑 提交于 2020-04-20 07:25:45
智能合约的现状 以太坊在区块链上实现了智能合约的概念,用于:同质化通证发行(ERC-20)、众筹、投票、存证取证等等,共同点是:合约逻辑简单,只是业务流程中的关键节点,而非整个业务流程。而智能合约想解决的信任传递,是环环相扣的,如果在传统系统环节被恶意侵入和篡改数据,那么传入智能合约的数据就是不受到信任的。因此,整体业务流程上链是智能合约发展的趋势。    智能合约的局限 智能合约在早期被设计的时候,并不打算支撑复杂的业务体系,这和它设计的初衷相违背:漏洞往往出现在程序员编写的代码和他想实现的逻辑之间存在着差距,越是简单的代码越是安全。简单和受限访问成了智能合约安全可靠的保障。 因此,智能合约引入了隔离网络和文件系统的沙箱环境、基于栈的编译器(有限高度的栈深以及仅可访问栈顶16个元素的限制)、静态语言、gasLimit(限定了合约的大小,每个合约能处理的逻辑有限;限定每个函数逻辑的复杂度,每一步操作都会消耗gas,以至于连使用循环都成了奢侈)、严格的内存访问限制(每个合约仅可以访问自己的存储单元),这就导致了智能合约不同于传统编程语言,自身就带着诸多限制。 目前,智能合约仍然处于发展的早期阶段,配套的工具、成熟的框架、第三方包寥寥可数。因此编写复杂业务场景的智能合约,只能从底层的逻辑开始编写:编写数据库模型CURD、跨合约数据交互、增强基本数据类型功能(string类型的slice

以太坊:事件、日志和布隆过滤器

拈花ヽ惹草 提交于 2020-04-18 05:03:02
版权声明:本文系博主原创,未经博主许可,禁止转载。保留所有权利。 引用网址: https://www.cnblogs.com/zhizaixingzou/p/10122288.html 目录 1. 事件、日志和布隆过滤器 本文Java源码 截图全部 来自开源的以太坊Java版本实现: https://github.com/ethereum/ethereumj 1.1. Solidity 中的事件在 Java 中被记录为日志 1.1.1. 包含事件定义和生成的 Solidity 源码 包含事件定义和生成的 Solidity 源码: pragma solidity ^0.4.12; contract EventDemo { event Sent(uint indexed value, address from, uint amount); constructor () public { emit Sent(25, msg.sender, 56); } } 事件的参数可用 indexed 标记,标记后就可以生成布隆过滤器,以便后续的事件查询。最多可以有 3 个 indexed 标记的参数,且 indexed 标记的参数必须在最前头。 另外,因为主题都是一个个的 32 字节存储的,因而能作为 indexed 的不能是动态类型。 编译后得到字节码:

使用OpenZeppelin在RSK上进行ERC20代币开发

天大地大妈咪最大 提交于 2020-04-18 00:41:10
在本文中,我们将讨论通过 RSK 网络部署和交互 Smart-Contracts 智能合约。我们的合约将是一个基于OpenZeppelin库的ERC20代币,我们将把它直接部署到Mainnet中。 创建合约 我们需要做的第一件事就是知道如何使用 Truffle 。 当我们这样做 $ truffle init 在一个空文件夹中,除了创建配置文件外,我们还为项目和迁移合约创建了文件夹,以记录对同一合约的更改。 合约的 .sol 代码文件位于 ~/Truffle/contracts 迁移脚本在 ~/Truffle/migrations 已编译的合约在 ~/Truffle/build 测试合约在 ~/Truffle/test 我们现在只处理前两个文件夹。 在Truffle文件夹中,我们从 OpenZeppelin 导入库 $ npm install -E openzeppelin-solidity 这些库不仅会安装我们代币token的主要类库,还会安装所有权相关,安全数学运算和许多其他设施的库。值得一提的是,这些库已经过审核以实现高标准的安全性,因此依赖于它们的合约在正确使用时不易受到黑客攻击。 我们的库将安装在 ~/Truffle/node_modules/openzeppelin-solidity/contracts 之后,我们可以将库 ABCD.sol 导入到我们的合约中,如下所示:

怎么学习区块链技术?

大憨熊 提交于 2020-03-26 17:06:59
3 月,跳不动了?>>> 随着科技的发展,越来越多的专业名词进入人们的生活,本来区块链是一个十分专业性的名词,常常是专业人士才会谈论区块链,但是在现在互联网和大数据的时代,区块链和我们每一个人都是相关的,俺们区块链技术入门应该学习什么呢? 区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法。区块链是比特币的底层技术,像一个数据库账本,记载所有的交易记录。这项技术也因其安全、便捷的特性逐渐得到了银行与金融业的关注。 看下面的例子: 比特币是用C ++语言实现的 以太坊有三种不同的编程语言的参考实现:Go语言实现的Geth客户端,C ++语言实现的Eth客户端以及Python语言实现的PyEthApp。 区块链应用平台Lisk采用JavaScript构建。利用JavaScript强大的API,该平台将允许在纯JavaScript中构建不同的区块链应用程序。 在其他语言中还有更多的区块链实现,如Rust,Ruby和ERLANG。 通过简单了解什么是分布式账本和什么是对等网络这些基本原则,您无法熟练掌握区块链技术。你需要能够实现这些原则。唯一的方法是学习相关的编程语言。要了解区块链技术,请按照以下步骤操作。 找出最相关的实现语言 区块链技术的应用范围很广,从智能合约到记录管理

solidity测试用例实战

梦想与她 提交于 2020-03-26 10:17:20
3 月,跳不动了?>>> Truffle开发框架提供了以太坊智能合约测试的两种方法:区块链级别的Solidity测试和DApp级别的JavaScript测试。在这个教程中,我们将介绍这两种以太坊智能合约测试方法的用途、区别与应用场景,并通过一个具体的示例来学习如何综合利用Solitiy测试用例和JavaScript测试用例对以太坊智能 合约进行单元测试和集成测试。 七种开发语言的以太坊教程: Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart 1、以太坊智能合约测试概述 作为软件开发者,我们都知道要让代码正常运行,测试是非常重要的一个环节。基于区块链的去中心化软件也不例外,而且由于区块链的不可修改特性,测试对于区块链软件来说就更重要了。 总体上来说有两种类型的软件测试:单元测试和集成测试。单元测试聚焦于单个函数的测试,而集成测试的目标则是确保各部分代码组合起来也可以按期望的方式运行。 Truffle是应用最广的以太坊智能合约与DApp开发框架,它提供了两种用于测试以太坊智能合约的方法:Solidity测试和JavaScript测试。问题是,我们应该选择哪一种方法? 答案是都需要。 用Solidity编写智能合约的测试用例让我们可以在区块链层级进行测试。这种测试用例可以调用合约方法

技术沙龙|破冰区块链技术,从钱包和智能合约开发入门区块链(西安)

≡放荡痞女 提交于 2020-03-09 14:47:22
身在区块链行业,最近这几个月有一种尘归尘土归土的感觉,随着大众对区块链热度的下降,对于区块链技术圈来说,倒是一件好事。 回归区块链技术本源,不可篡改的技术特性有了越来越多的应用场景,就像几年前的人工智能、大数据一样,真正的技术人才仍然千金难求。 对于数百万的软件开发从业者来说,掌握一些区块链技术,会打开新的技术视角,带来更多技术解决方案,而在区块链技术入门上,钱包开发和智能合约是两个既基础,又重要的,但又相对简单的区块链知识。 11月24日,HiBlock区块链社区在西安发起一场“破冰区块链技术”的沙龙活动 ,邀请胡键和鲍帅两位老师分别从以太坊钱包开发和编写安全的solidity智能合约两个话题分享区块链技术入门方式。此外,还有冯宇老师带来技术视频制作小技巧。 1 时间地点 主题:破冰区块链技术,从钱包和智能合约开发入门区块链 **时间:**11月24日 13:30-17:30 地址 : 西安市高新区沣惠南路36号橡树街区B-10101,哈希屋 (32路;35路;184路;260路;261路;261路区间;280路;324路;411路;高新1号线;高新4号线;高新9号线;高新草堂专线到科技六路中段下车) 本次活动 免费 参加,点击" 阅读原文 "即可报名 2 分享内容 话题1:使用Angular开发以太坊钱包 钱包是区块链应用的必备组件之一,对于任何意图入门区块链开发的开发者来讲

开发者的以太坊进阶指南 | Jeth 以太坊系列线下活动第四期(北京)

血红的双手。 提交于 2020-03-02 12:41:46
** 介绍** Jeth 以太坊系列线下活动: 《开发者的以太坊进阶指南》北京站 来了! Jeth 是由掘金技术社区主办,以太坊社区基金会、以太坊爱好者与 ConsenSys 协办,围绕以太坊技术开发主题的系列线下活动。每期 Jeth 会邀请以太坊开发领域的优秀技术团队和工程师在线下分享技术干货。旨在先让参与者对区块链技术有全面、准确的理解,然后进一步学习以太坊基本原理,以及如何构建智能合约和 DApp;同时也为开发者提供线下技术交流互动机会,帮助开发者成长。 门票免费 第四期的 Jeth 北京站线下分享我们邀请到 ArcBlock 资深前端工程师 王仕军 担任此次活动的出品人和讲师 Wormhole 核心开发者 韩元超 区块链技术布道者 杨镇 第一电商公链 CyberMiles 首席科学家兼联合创始人 Michael Yuan 博士 担任讲师,帮助有编程经验的开发者能够快速上手以太坊开发。 ** 日程** 时间:2018/11/10 13:30 - 17:30 地点:P2联合创业办公社 • 中关村e世界 ** 本期嘉宾** Michael Yuan 博士 - 第一电商公链CyberMiles首席科学家兼联合创始人 Michael Yuan本科就读南京大学天体物理专业,拥有德州大学奥斯汀分校的天体物理学博士学位。他著有5本软件开发书籍,分别由 Prentice Hall

solidity智能合约的经典设计模式

血红的双手。 提交于 2020-03-02 06:53:43
设计模式是许多开发场景中的首选解决方案,本文将介绍五种经典的智能合约设计模式并给出 以太坊solidity实现代码:自毁合约、工厂合约、名称注册表、映射表迭代器和提款模式。 如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战开发入门 去中心化电商DApp实战开发 1、自毁合约 合约自毁模式用于终止一个合约,这意味着将从区块链上永久删除这个合约。 一旦被销毁,就不可能 调用合约的功能,也不会在账本中记录交易。 现在的问题是:“为什么我要销毁合约?”。 有很多原因,比如某些定时合约,或者那些一旦达到里程碑就必须终止的合约。 一个典型的案例 是贷款合约,它应当在贷款还清后自动销毁;另一个案例是基于时间的拍卖合约,它应当在拍卖结束后 终止 —— 假设我们不需要在链上保存拍卖的历史记录。 在处理一个被销毁的合约时,有一些需要注意的问题: 合约销毁后,发送给该合约的交易将失败 任何发送给被销毁合约的资金,都将永远丢失 为避免资金损失,应当在发送资金前确保目标合约仍然存在,移除所有对已销毁合约的引用。 现在我们来看看代码: contract SelfDesctructionContract { public address owner; public string someValue; modifier ownerRestricted {

《区块链DAPP开发入门、代码实现、场景应用》笔记2——Solidity实现简单的智能合约

左心房为你撑大大i 提交于 2020-03-02 06:48:36
本节仅以一个简单的智能合约示例,介绍智能合约的基本组成元素,本合约定义一个uint类型的变量,以及对应这个变量的读写函数。 01 pragma solidity >=0.4.0 <0.6.0; 02 03 contract SimpleStorage { //使用关键字contract定义合约结构体 04 uint storedData; //定义一个变量 05 06 function set(uint x) public { //定义关于该变量的设置函数 07 storedData = x; 08 } 09 10 function get() public view returns (uint) { //定义关于该变量的读取函数 11 return storedData; 12 } 13 } 代码第1行是指明语法解释使用的编译器版本;目前以太坊的智能合约虚拟机仍然在开发升级中,尚未有release版本,不同版本之间的API变动比较大,因此在编写智能合约时,必须指明合约逻辑使用的API的版本号;代码第3行通过contract关键字,声明了一个智能合约结构体,可以将该关键字与面向对象编程的class做类比,contract的设计模式和方法重载,父子继承等特性,与面向对象的设计非常接近,因此说Solidity作为一种高级的编程语言,极大的降低了对以太坊公链编程的难度