web3j

分享实录|以太坊开发需知

ε祈祈猫儿з 提交于 2021-02-12 09:07:11
1 以太坊开发与传统应用开发的差异 相比起传统应用而言,以太坊开发引入了新的基础设施,由此必不可少的带来了部署和运维的复杂度,比如作为系统设计者,我们需要做出选择: 自建节点,还是信任第三方节点? 公有链、联盟链、私有链? 由于加入了新的设计单元:智能合约,我们将面对 设计的复杂度 合约的升级问题:因为智能合约一旦发布就无法更改,万一需要更新合约错误或规则,怎么办? 合约的组织问题。 与一般代码不同,合约的好坏直接与金钱挂钩 不安全的合约会造成客户的金钱损失,立竿见影。 合约的每一步都需要消耗gas,不讲究的合约会造成执行成本高居不下。 并且,以太坊本身的限制同样也会影响到整个应用系统的设计和选型: 交易确认需要时间:20笔/秒 交易易受外界影响 交易费的高低 流行应用会造成网络拥堵,从影响交易的确认 相比起传统CS编程,与以太坊进行交互要复杂得多: 需要有钱包账户 发出去的交易需要签名 由于整个过程是异步为主,因此交易需要验证 对于区块链本身的定位,同样也会影响设计: 仅仅用作数据共享和防篡改的基础设施? 围绕区块链打造价值网络? Token设计模式 Token引入对于业务本身带来的影响 这一点尤其差异巨大,不单单像传统开发那样仅仅只需要了解用户的业务就可以开足马力前进。Token设计本身需要一定的经济常识,虽说这部分可以由专业背景的人来设计,但对于开发者和架构师而言

第十章 FISCO BCOS权限控制下的数据上链实操演练

蹲街弑〆低调 提交于 2021-01-06 02:05:45
想了解相关区块链开发,技术提问,请加QQ群:538327407 一、目的 前面已经完成FISCO BCOS 相关底层搭建、sdk使用、控制台、WeBASE中间件平台等系列实战开发, 本次进行最后一个部分,体系化管理区块链底层,建立有序的底层控管制度,实现权限化管理。 完成:链管理、系统管理、数据上链操作等。 其中数据上链分为:合约版本上链、crudService 版本上链等操作。 二、准备工作: 在进行之前,我们首先要了解一下,fisco bcos 的底层权限系统介绍。 https://mp.weixin.qq.com/s/QJNk71w4o_cGX2O-1aW29Q 三、设计理念差异 1、底层默认是可以部署合约,只有一旦操作 grantDeployAndCreateManager 命令,才开始限制用户部署合约权限 ps:一开始权限基本开放,而不是像常规系统设计那样,一开始权限为无,等到分配好权限才可以相应的的操作。 2、底层默认是写表操作,写表操作就有了CRUD等操作,常规的区块链体系是在不断区块打包过程中附加数据,FISCO BCOS 提供写表操作,实质上业务数据可以有修改的权限, 所以在链搭建好后,就必须限制Update等操作权限,并且在业务设计时候,需要多方去验证修改数据等过程,才可以防止区块链底层数据让高权限的人的篡改。 ps:与官方人员交谈,提供的例子

java通过web3j调用智能合约传递数组参数的坑

我的未来我决定 提交于 2020-12-11 17:47:37
最近在写solidity智能合约,用java与solidity交互过程中,需要传递数组参数到智能合约,但是用web3j转换后的数组参数去调用智能合约接口一直返回错误信息,在万能的互联网上翻阅了大量资料后,终于解决,在此记录一下: 首先java项目需要引入web3j的依赖包: <dependency> <groupId>org.web3j</groupId> <artifactId>core</artifactId> <version>4.5.18</version> <exclusions> <exclusion> <artifactId>okhttp</artifactId> <groupId>com.squareup.okhttp</groupId> </exclusion> </exclusions> </dependency> 合约demo代码如下: function arrTest(bytes32[] memory arr) public view returns(string memory) { return bytes32ToString(arr[0]); } function bytes32ToString(bytes32 bname) view public returns(string memory){ // 此处要加上memory // 先将有效字符计算出来

Java使用web3j调用智能合约

≯℡__Kan透↙ 提交于 2020-03-23 22:53:48
3 月,跳不动了?>>> 1.Java程序引入相关依赖,后面用于调用智能合约中的函数 <!-- https://mvnrepository.com/artifact/org.web3j/core --> <dependency> <groupId>org.web3j</groupId> <artifactId>core</artifactId> <version>4.5.15</version> </dependency> <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.4.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp-ws --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp-ws</artifactId> <version>3.4.2</version> <

web3j教程:java使用web3j开发以太坊智能合约交易

痞子三分冷 提交于 2020-03-01 13:02:26
从广义上讲,有web3j支持三种类型的以太坊交易: 1.以太币从一方交易到另一方 2.创建一个智能合约 3.与智能合约交易 为了进行这些交易,必须有以太币(以太坊区块链的代币)存在于交易发生的以太坊账户中。这是为了支付 gas 成本,这是为支付参与交易的以太坊客户端的交易执行成本,支付了这个成本就能将结果提交到以太坊区块链上。获得以太币的说明下文会说到。 此外,我们还可以查询智能合约的状态。 如何获得以太币Ether 要想获得以太币Ether你有两种途径可以选择: 1.自己开采挖矿 2.从别人那里获取以太币 在私有链中自己挖矿,或者公共测试链( testnet )是非常简单直接的。但是,在主要的公有链( mainnet )中,它需要很多很明显的专用GPU时间,除非你已经拥有多个专用GPU的矿机,否则基本上不太可行。如果你希望使用私有链,则在这个 官方文档 中有一些指导。 要购买以太币Ether,你需要通过交易所。由于不同的地区有不同的交易所,你还需要研究自己去哪儿合适。 官方文档 中包含多个交易所,是一个很好的参考。 以太坊测试链(testnets) 针对Ethereum以太坊有许多专用测试网络或者叫测试链,他们由各种客户端支持。 1.Rinkeby:只支持geth客户端。 2.Kovan:只支持Parity客户端。 3.Ropsten:支持geth和Parity客户端。 对于开发

Java开发区块链的三大sdk库

你说的曾经没有我的故事 提交于 2020-02-26 10:37:33
如果你想将区块链合并到一个Java项目中,现在我们来看看就是这个细分领域中三个最大的OSS玩家。 好的伙计们,我们都听说过比特币,以太坊或其他加密货币,其中有一些时髦的名字围绕着我们常见的新闻,但我们作为Java开发人员知道如何轻松地与这些区块链技术进行交互吗?以下是可用于利用区块链趋势的前三大Java项目。该列表基于GitHub存储库星级排序。非常感谢评论和意见。 BitcoinJ 这个名字很具描述性,你不觉得吗?如果你想知道如何创建比特币钱包并管理节点之间的交易,那么你应该尝试使用 BitcoinJ 。该项目拥有不断增长的社区和非常好的文档,这使得每个开发人员都非常有利可图。当然,作为大多数试图获得普及的开源项目,它在开始时都有局限性。有几个已知的安全问题与开放错误和可伸缩性问题相一致。如果你想了解比特币协议的运作方式,它仍然非常有用。单个人意见目前还不适合生产应用。 Web3j 一个词——以太坊。这是基于这种尖端技术的第二个最受关注的加密货币。 Web3j项目 允许你使用以太坊区块链,而无需为平台编写自己的集成代码。同样,核心功能是创建钱包,管理交易,这次是智能合约sdk包。是的,打包好的。以太坊项目的一部分是一种称为Solidity的特殊语言,它是创建智能合约的事实标准。如果你想避免使用智能合约的底层实现细节,则使用Web3j的智能合约开发包

Android和Java以太坊开发区块链应用使用web3j类库

空扰寡人 提交于 2020-02-25 21:05:23
如何使用web3j为Java应用或Android App增加以太坊区块链支持,教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤器和事件等,同时也详细说明如何使用web3j提供的API开发接口与以太坊进行交互,是java工程师学习以太坊应用开发的不二选择。 以太坊概述 以太坊是备受关注的区块链,它基于密码学技术和P2P通信技术 构建了一个去中心化的平台,所有的交易同步保存在每个节点中, 通过将区块单向级联成链,以太坊有效的保证了交易的不可篡改: 智能合约平台 以太坊是第一个实现了虚拟机的区块链,因此为智能合约 - Smart Contract - 的运行提供了良好的支持环境。也正因为这个原因,以太坊被称为区块链 2.0,以区别于比特币代表的以数字加密货币为核心特征的区块链1.0。 可以将智能合约理解为机器之间的合同约定,在满足一定条件时自动 执行约定好的逻辑,例如在保险理赔流程中,如果理赔条件满足就自动 将赔偿金释放给出险人,这个流程就可以使用智能合约来实现。 有多种语言可以开发以太坊智能合约,但目前最常用的是类似于JavaScript的 Solidity语言。本课程中将采用Solidity讲解智能合约的开发。 JSON RPC与web3j 如果我们希望构造一个去中心化应用(DApp),除了智能合约的开发,

钱包开发经验分享:ETH篇

*爱你&永不变心* 提交于 2020-01-07 15:53:44
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 钱包开发经验分享:ETH篇 [TOC] 开发前的准备 工欲善其事,必先利其器 一路开发过来,积累了一些钱包的开发利器和网站,与大家分享一下。这些东西在这行开发过的人都知道,只是给行外打算入行的人做个参考。 最好用的ETH钱包--MetaMask 下载: MetaMask(谷歌插件) 简介:这是一款以太坊浏览器插件,他可以很方便的查看或操作以太坊、erc20代币余额,也方便配合remix之类的合约IDE来部署合约,支持自定义代币,支持多种测试网络和正式网络以及自定义网络节点。总而言之,这是一款十分便利好用的钱包。 最官方的区块链浏览器--etherscan 网址: 以太坊官方区块链浏览器 简介:这是以太坊最最最官方的区块链浏览器了,对于开发者而言,它不仅仅只是查询区块交易那么简单,他还有更多有利于程序员开发的功能。它提供了众多api和小工具,它是所有测试网络的父域名,可以轻松地切换查看到所有测试网络的区块和交易,在部署合约时,它又协助你发布合约,因此对于开发者而言,这是一个不可缺少的网站。 获取测试币的网站--rinkeby、ropsten 网址: rinkeby 、 ropsten 简介:以太坊有很多共享的测试网络, 这篇博文 介绍了各个网络的区别和其区块链浏览器

python以太坊类库web3.py概览

吃可爱长大的小学妹 提交于 2019-12-27 12:40:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> python通过web3.py库与以太坊交互共同入口是 web3 对象。web3对象提供API接口,python开发应用与以太坊进行交互如钱包创建、支付、转账等连接JSON-RPC服务器进行。 Providers提供者 Providers 使web3连接到区块链上。Web3.py库带有以下内置的 providers ,它们能够适用于大多数用例。 web3.HTTPProvider :用于连接基于http和https的JSON-RPC服务器。 web3.IPCProvider :用于连接基于ipc套接字的JSON-RPC服务器。 web3.WebsocketProvider :用于连接基于ws和wss的websocket的JSON-RPC服务器。 HTTPProvider :用于获取可以找到服务器的完整URI。对于本地开发,这类似 http://localhost:8545 。 IPCProvider :用于获取可以找到IPC套接字的文件系统路径。如果不提供任何参数,它将使用操作系统的默认路径。 WebsocketProvider :用于获取可以找到服务器的完整URI。对于本地开发,这类似 ws://127.0.0.1:8546 。 示例代码如下: >>> from web3 import Web3,

C++开发EOS基础指南:模版

北城以北 提交于 2019-12-24 18:10:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 上一篇C++开发EOS的文章是 C++开发EOS基础指南:类与结构 ,这篇文章我们主要来说说模板 Templates 。具有静态类型的语言具有很多好处,因为可以通过类型检查在编译时捕获错误。但是,它在编写函数或类时也会引入开销,因为它们需要针对特定类型编写。如果你正在编写库并且不确切知道如何使用库,该怎么办?如果你想支持更多类型,你必须重复编码并重载该函数。看个例子就知道了: int max(int a, int b) { return a > b ? a : b; } max(5, 3); // 正常工作。 max(5.0, 3.0) // 不起作用,因为它们是_double_s而不是_int_s。 您需要为双精度 double 定义另一个函数: double max(double a, double b) { return a > b ? a : b; } 正如你所看到的,两种情况下功能体完全相同。重要的是该类型实现了比较运算符 > 。 对于这些用例,C++提供了类型 templates ,可以使用泛型类型而不是特定类型。这允许你创建函数或类,其功能可以适用于多种类型或类,而无需重复每种类型的整个代码。 // @url: https://repl.it/@MrToph/CPPBasics-Templates