web3.js以太坊客户端

以太坊客户端是一个软件应用程序,它实现以太坊规范并通过p2p网络与其他以太坊客户端进行通信。如果不同的以太坊客户端符合参考规范和标准化通信协议,则可以进行相互操作。

这些基于以太坊的网络中有:以太坊,以太坊经典,Ella,Expanse,Ubiq,Musicoin等等。
虽然大多数在协议级别兼容,但这些网络通常具有特殊要求,以太坊客户端软件的维护人员、需要进行微小更改、以支持每个网络的功能或属性

太坊的多种客户端
go-ethereum ( Go )
官方推荐,开发使用最多
parity ( Rust )
最轻便客户端,在历次以太坊网络攻击中表现卓越
cpp-ethereum (C++)
pyethapp (python)
ethereumjs-lib ( javascript )
EthereumJ / Harmony ( Java )

以太坊全节点
全节点是整个主链的一个副本,存储并维护链上的所有数据,并随时验证新区块的合法性。
区块链的健康和扩展弹性,取决于具有许多独立操作和地理上分散的全节点。每个全节点都可以帮助其他新节点获取区块数据,并提供所有交易和合约的独立验证。
运行全节点将耗费巨大的成本,包括硬件资源和带宽。
以太坊开发不需要在实时网络(主网)上运行的全节点。我们可以使用测试网络的节点来代替,也可以用本地私链,或者使用服务商提供的基于云的以太坊客户端;这些几乎都可以执行所有操作。

远程客户端
不存储区块链的本地副本或验证块和交易。这些客户端一般只提供钱包的功能,可以创建和广播交易。远程客户端可用于连接到现有网络,MetaMask 就是一个这样的客户端。
轻节点
不保存链上的区块历史数据,只保存区块链当前的状态。轻节点可以对块和交易进行验证.

全节点的优缺点
优点
为以太坊网络的灵活性和抗审查性提供有力支持
权威地验证所有交易
可以直接与公众区块链上的任何合约交互
可以离线查询区块链状态(账户、合约等)
可以直接把自己的合约部署到公共区块链中
缺点
需要巨大的硬件和带宽资源,而且会不断增长
第一次下载往往需要几天才能完全同步
必须及时维护、升级并保持在线状态以同步区块

公共测试网络节点的优缺点
优点
一个testnet节点需要同步和存储更少的数据,大约10GB,具体取决于不同的网络
一个testnet节点一般可以在几个小时内完成同步
部署合约或进行交易只需要发送测试以太,可以从”水龙头“免费获得
测试网络是公共区块链,有许多其他用户和合约运行(区别于私链)
缺点
测试网络上使用测试以太没有价值。因此无法测试交易对手的安全性,因为没有任何利害关系
测试网络上的测试无法涵盖所有真实主网特性。例如:交易费用虽然是发送交易所必需的,但由于gas免费,因此 testnet上往往不会考虑。而且一般来说,测试网络不会像主网一样经常拥堵

本地私链的优缺点
优点
磁盘上几乎没有数据,也不同步别的数据,是一个完全干净的环境
无需获取测试以太,可以分配任意以太,也可以随时自己挖矿获得
没有其他用户与合约,无外部干扰
缺点
没有其他用户意味与公链的行为不同,发送的交易并不存在空间或交易顺序的竞争
除自己之外没有矿工意味着挖矿更容易预测,因此无法测试公链上发生的某些情况
没有其他合约意味着必须部署要测试的所有内容,包括所有的依赖项和合约库

我们的教程主要基于本地私链的搭建,以后的交易等也主要基于我们的私链,因此以太坊客户端及私链的搭建在我们本次学习中至关重要。

JSON-RPC
以太坊客户端提供了API 和一组远程调用(RPC)命令,这些命令被编码为 JSON。

JSON-RPCAPI 就是一个接口,允许我们编写的程序使用以太坊客户端作
为网关,访问以太坊网络和链上数据。

通常,RPC 接口作为一个 HTTP 服务,端口设定为 8545。

要访问JSON-RPC API,我们可以使用编程语言编写的专用库,例如JavaScript的 web3.js。或者也可以手动构建HTTP请求并发送/接收JSON编码的请求,如:
curl -X POST -H “Content-Type:application/json” --data ‘{“jsonrpc”:“2.0”,“method”:“web3_clientVersion”,“params”:[],“id”:1}’ http://127.0.0.1:8545

二、用 Geth 搭建以太坊私链
2.1安装 go
大家首先输入 go version 查看自己是否配置成功go环境,若不成功参考下面博客:
go : GoLand安装及环境配置

2.2 安装 Geth
安装 Geth 有很多种方式,这里主要就 Linux 环境给出两种方法:系统包管理器(apt-get)安装和源码安装。更加推荐大家用源码安装,在整个过程中可以看到 Geth 各组件的构建步骤。

方法一、apt-get
sudo apt-get install software-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install ethereum
方法二、源码安装

  1. 克隆 github 仓库我们的第一步是克隆 git 仓库,以获取源代码的副本。
    git clone https://github.com/ethereum/go-ethereum.git 2. 从源码构建 Geth要构建 Geth,切换到下载源代码的目录并使用 make 命令:
    cd go-ethereum make geth
    如果一切顺利,我们将看到 Go 编译器构建每个组件,直到它生成 geth 可执行文件:
    build/env.sh go run build/ci.go install ./cmd/geth >>> /usr/local/go/bin/go install -ldflags -X main.gitCommit=58a1e13e6dd7f52a1d5e67bee47d23fd6cfdee5c -v ./cmd/geth github.com/ethereum/go-ethereum/common/hexutil github.com/ethereum/go-ethereum/common/math github.com/ethereum/go-ethereum/crypto/sha3 github.com/ethereum/go-ethereum/rlp github.com/ethereum/go-ethereum/crypto/secp256k1 github.com/ethereum/go-ethereum/common […] github.com/ethereum/go-ethereum/cmd/utils github.com/ethereum/go-ethereum/cmd/geth Done building. Run “build/bin/geth” to launch geth.
    查看 geth version,确保在真正运行之前安装正常

启动节点同步
geth –datadir . --syncmode fast
–datadir:后面的参数是区块数据及秘钥存放目录

2.3 搭建自己的私有链
{“config”: { “chainId”: 15 }, “difficulty”: “2000”, “gasLimit”: “2100000”, “alloc”: { “7df9a875a174b3bc565e6424a0050ebc1b2d1d82”: { “balance”: “300000” }, “f41c74c9ae680c1aa78f42e5647a62f353b7bdde”: { “balance”: “400000” } } }

要创建一条以它作为创世块的区块链,我们可以使用下面的命令:
初始化完成后目录下多了geth和keystore两个文件夹:
geth:保存该链上的区块数据
keystore:保存该链上的账户信息

// 简单开启 (base) haobo@haobo:~/home/mnt/bitcoin/test$ geth --datadir . --networkid 150 – nodiscover console // 更一般的形式 (base) haobo@haobo:~/home/mnt/bitcoin/test$ geth --networkid 150 --datadir “.” - -identity “kexin” --rpc --rpcport “8545” --rpcaddr “localhost” --port “30303” – nodiscover --allow-insecure-unlock --rpcapi “eth,net,web3,personal,admin,shh,txpool,debug,miner” console

3、Geth 控制台命令
Geth Console 是一个交互式的 JavaScript 执行环境,其中 > 是命令提示符,里面内置了一些用来操作
以太坊的 JavaScript对象,我们可以直接调用这些对象来获取区块链上的相关信息。

3.1 操作测试
3.1.1 创建账户
进入控制台后,可以通过使用命令来与私有链进行交互。创建一个新的账户:

personal.newAccount() Passphrase: Repeat passphrase: “0xc8248c7ecbfd7c4104923275b99fafb308bbff92”
eth.accounts
查看账户余额
eth.getBalance(eth.accounts[0]) 0

3.1.2 挖矿
启动挖矿:

miner.start(1)
可以使用以下命令,当新区块挖出后,挖矿即可结束。
miner.start(1);admin.sleepBlocks(1);miner.stop();
3.1.3 交易
目前,账户 0 已经挖到了 3 个块的奖励,账户 1 的余额还是0: > eth.getBalance(eth.accounts[0]) 15000000000000000000 > eth.getBalance(eth.accounts[1]) 0

3.1.3 查看交易和区块
查看当前区块总数:

eth.blockNumber 4

3、智能合约操作
3.1、创建和编译智能合约
经过part2的学习大家已经基本上掌握了Solidity,接下来我们编写一个智能合约:
该合约包含一个方法 multiply(),将输入的两个数相乘后输出:
将上面的代码复制到Remix编辑器里,程序将自动完成编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值