qg777钱柜误乐

热门关键词: qg777钱柜误乐

以太坊生态系统中的工具和技术

本文旨在说明通过Geth、Node.js如何访问以太坊节点和UNIX下PHP如何访问以太坊节点。

1.以太坊

以太坊是一个智能合约区块链,你可以在其上构建去中心化的应用程序。如果你是技术专家,本白皮书值得一读:

如果你之前已经构建了Web应用程序,我写了一篇文章,比较以太坊区块链和Web应用程序架构,这可能有助于在更高层次上理解以太坊。

为了与区块链进行通信,我们必须使用区块链客户端。客户端是能够与其他客户建立p2p通信信道,签署和广播交易,挖掘,部署和与智能合约交互等的软件。客户端通常被称为节点。

说明如何通过RPC使用此以太坊节点

对于以太坊主网络使用RPC url:http://85.214.51.53:8545

对于Ropsten测试网络使用RPC url:http://85.214.51.53:8546

  • 1.确保你的本地IP已在你的用户配置文件中注册。使用RPC服务时,不会阻止从此IP访问。
  • 2.在本地系统上安装geth二进制文件约30MB,geth二进制文件包。
  • 3.查找geth目录位置
  • 4.使用命令./geth attach rpc:http://85.214.51.53:8545连接并启动JavaScript环境,参考文档。
  • 5.控制台正在启动,你会看到>作为输入提示符。
  • 6.写eth.getBlock并获取块信息作为结果,参考文档。

你的系统在几分钟内运行,无需安装已经500GB以上的以太坊区块链!

  • 安装正确的geth二进制文件。
  • 验证geth在本地系统上是否可用。
  • 检查用户配置文件中的IP。
  • 确认没有个人防火墙阻止你的发送出去请求。
  • 1.这将返回一个webserver响应并输出一个html文件。
  • 2.在node.js系统中通过NPM或其他方式安装web3。
  • 3.将服务器文件指向app.js。

这将为你带来一个帐户余额的输出。

const http = require;const walletAddress = '0xDED5f23C157aCef931946D9A695cAc3eF1AaaA8D';var Web3 = require;var web3 = new Web3();web3.setProvider(new web3.providers.HttpProvider('http://85.214.51.53:8545'));var balance = web3.eth.getBalance('0xDED5f23C157aCef931946D9A695cAc3eF1AaaA8D');http.createServer(function(request, response) { response.writeHead(200, {'Content-Type': 'text/html'}); response.end("<!DOCTYPE html>n" + "<html lang="en">n" + "<head>n" + " <meta charset="UTF-8">n" + " <title>ethernode.biz</title>n" + "</head>n" + "<body>n" + "<p>ethernode.biz</p>" + "<center>n" + "</center>n " + "<p> Ethereum balance : " + balance +"</p>n" + "</body>n" + "</html>n");}).listen(process.env.PORT);
  • 1.确保你的geth通过RPC正常工作。
  • 2.在geth_rpc_getblock.js下的Unix系统上保存以下shell脚本。确保你具有执行它的正确权限。
  • 3.在脚本中调整geth命令的路径。
  • 4.检查命令./geth_rpc_getblock.js是否会带来一些正确的输出。它应返回类似Data::QBIT=27867000000;WETH=0;ETH=0.002650772的内容。
  • 5.将下面保存在同一目录下的geth_access.phpPHP脚本。
  • 6.将$shellstring中的路径调整为脚本文件位置。
  • 7.php脚本应该回显脚本的输出。Data::QBIT=27867000000;WETH=0;ETH=0.002650772

你说对了!请记住,从长远来看,使用php shell_exec命令访问geth并不是很省事。

#!/bin/sh# ------------------------------------------------------------------------------# Qubitica.net# ------------------------------------------------------------------------------# Don't define PARAM to use the standard IPC comms# Use below to connect to RPC portPARAM="rpc:http://85.214.51.53:8545"/var/www/vhosts/ethernode.info/php/geth attach $PARAM << EOF | grep "Data:" | sed "s/Data: //"var erc20ABI = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"burn","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"}],"name":"burnFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"}];//var QBITWalletAddress = "$1"; You may pass a parameter from the php call into this $1.var QBITContractAddress1 = "0xCb5ea3c190d8f82DEADF7ce5Af855dDbf33e3962";var QBITContractAddress2 = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2";var QBITWalletAddress = "0x842286ea00502f8e5b1ea40d17ebc4b70becda08";var QBITContract1= web3.eth.contract.at(QBITContractAddress1);var QBITContract2= web3.eth.contract.at(QBITContractAddress2);var acctBal = web3.fromWei(eth.getBalance(QBITWalletAddress), "ether");totalBal += parseFloat;var QBITbalanceOf = QBITContract1.balanceOf(QBITWalletAddress);var WETHbalanceOf = QBITContract2.balanceOf(QBITWalletAddress);console.log("Data:"+":QBIT="+ QBITbalanceOf +";WETH="+ WETHbalanceOf +";ETH="+ acctBal);exit;<<<<< New File

<?php$shellstring= "./geth_rpc_getblock.js";$output=shell_exec($shellstring);echo "$output";?>
  • shell脚本对Windows换行符很敏感或返回nlf
  • 检查权限

======================================================================

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是原文如何通过Geth、Node.js和UNIX/PHP访问以太坊节点

3.Parity

Parity是以太坊协议的另一个很好的实现,用Rust编程语言编写。它是一个非官方的客户端,由一家名为Parity Inc.的公司维护。任何人都可以实现客户端软件并加入以太坊网络。你可以按照本黄皮书中的规范来实施你自己的客户端!

图片 1image

以太坊节点必须遵循的功能的正式定义在以太坊黄皮书中定义。黄皮书定义了网络上节点所需的函数,挖掘算法,私钥/公钥ECDSA参数。它定义了使节点与以太坊客户端完全兼容的全部功能。

2.Geth

Geth是以太坊基金会提供的官方客户端软件。它是用Go编程语言编写的。该软件包含一些值得理解的组件:

  • 客户端守护程序

当你启动此客户端守护程序时,它将连接到网络中的其他客户端并下载区块链的副本。它将不断与其他节点通信,以使其区块链的副本保持最新。它还能够挖掘块并向区块链添加交易,验证块中的交易并执行交易。它还通过公开可以通过RPC与之交互的API充当服务器。

图片 2image

  • geth控制台

这是一个命令行工具,可让你连接到正在运行的节点,并执行各种操作,如创建和管理帐户,查询区块链,签署并向区块链提交交易等。

  • mist浏览器

这是用于与节点通信的桌面应用程序。你使用geth控制台执行的任何操作都可以通过此图形用户界面完成。

这里可以看到完整的客户端列表。

如果你是以太坊区块链的新手,那么你可能会不知所措,并试图了解以太坊生态系统中的所有工具和技术。因此,我决定在开始学习以太坊时简要描述下你经常遇到的各种组件。希望这将有助于你全面了解以太坊生态系统以及所有部分如何组合在一起。

运行Geth

为了启动Geth节点,你唯一需要做的就是转到终端窗口并运行geth。当你这样做时,你应该得到类似于这样的输出:

~ gethINFO [06-03|11:03:13] Maximum peer count ETH=25 LES=0 total=25INFO [06-03|11:03:13] Starting peer-to-peer node instance=Geth/v1.8.10-stable/darwin-amd64/go1.10.2INFO [06-03|11:03:13] Allocated cache and file handles database=/Users/mjvr/Library/Ethereum/geth/chaindata cache=768 handles=128INFO [06-03|11:03:13] Writing default main-net genesis blockINFO [06-03|11:03:14] Persisted trie from memory database nodes=12356 size=2.34mB time=48.31016ms gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00BINFO [06-03|11:03:14] Initialised chain configuration config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Byzantium: 4370000 Constantinople: <nil> Engine: ethash}"INFO [06-03|11:03:14] Disk storage enabled for ethash caches dir=/Users/mjvr/Library/Ethereum/geth/ethash count=3INFO [06-03|11:03:14] Disk storage enabled for ethash DAGs dir=/Users/mjvr/.ethash count=2INFO [06-03|11:03:14] Initialising Ethereum protocol versions="[63 62]" network=1INFO [06-03|11:03:14] Loaded most recent local header number=0 hash=d4e567…cb8fa3 td=17179869184INFO [06-03|11:03:14] Loaded most recent local full block number=0 hash=d4e567…cb8fa3 td=17179869184INFO [06-03|11:03:14] Loaded most recent local fast block number=0 hash=d4e567…cb8fa3 td=17179869184INFO [06-03|11:03:14] Regenerated local transaction journal transactions=0 accounts=0INFO [06-03|11:03:14] Starting P2P networkingINFO [06-03|11:03:16] UDP listener up self=enode://a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628@[::]:30303INFO [06-03|11:03:16] RLPx listener up self=enode://a4cb08519bc2bceecb8ad421871c624d5212888653bbaee309fda960f3c87ca7aa9855ee14684d521836ae88ad1986b8ca944348e976760d2bd1247ed3ca7628@[::]:30303INFO [06-03|11:03:16] IPC endpoint opened url=/Users/mjvr/Library/Ethereum/geth.ipc

在此之后,你应该看到定期出现新行,Geth说“导入新状态”或“导入新区块头”或“导入新收据”。状态,块头和交易是 Ethereum’s tree tries的一部分:必须下载它们才能使你的节点与以太坊区块链同步。

这个过程可能需要很长时间,因此你可以选择运行这样的轻型节点。

geth --light

Geth现在需要做的只是拉动最新的块头并依赖其他完整节点来通过使用merkle证明来验证交易。

9.Swarm

区块链可以存储少量数据。如果你想存储患者记录,销售合同或某些需要公开时间戳的大型文件,该怎么办?在区块链中存储blob既昂贵又无法扩展。Swarm用于解决这个问题。Swarm是一种分散的内容存储和分发服务。你可以将其视为CDN,而不是在一家公司的服务器上托管的整个CDN,它通过互联网分布在计算机上。就像运行以太坊节点一样,你运行一个swarm节点来连接到群网络。

当你将以太坊合约部署到区块链时,你将获得ABI的部署地址和JSON接口(合同接口类似于API)。当你希望某人使用你的合约时,你必须向他们提供已部署的地址和ABI。将来,ABI将存储在Swarm上,所以任何人都可以通过查看以太坊地址来查找ABI。

迄今为止最受欢迎的客户是Geth和Parity。实现的不同之处主要在于选择的编程语言:Geth使用Golang,而Parity使用Rust。

本文由qg777发布于编程,转载请注明出处:以太坊生态系统中的工具和技术

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。