当前位置: 首页 > article >正文

Web3 详解

1. 使用 Web3 库

        Web3 是一个 JavaScript 库,可用于通过 RPC 通信与以太坊节点通信。 Web3 的工作方式是,公开已通过 RPC 启用的方法,这允许开发利用 Web3 库的用户界面,以便与部署在区块链上的合约进行交互。

        为了通过 Geth 公开这些方法,可以使用以下命令:

[admin@daolian ~]$geth --datadir .ethereum/privatenet/ --networkid 786 --rpc --rpcapi 'web3,net,eth,debug' --rpcport 8001 --rpccorsdomain 'http://localhost:7777'

注意:

--rpcapi 标志允许 web3、eth、net 和 debug 方法。

        这是一个功能强大的库,可以通过附加一个 Geth 示例来进一步探索。

        可以使用以下命令附加 geth 示例:

[admin@daolian ~]$geth attach ipc: ~/etherprivate/geth.ipc

        一旦 Geth JavaScript 控制台运行,就可以查询 Web3,如下图所示:

1.1 合约部署

        可以使用 Geth 部署简单的合约,并通过 Geth 提供的命令行界面 (控制台或附加) 与 Web3 进行交互。先来看以下源代码示例:

progma solidity ^0.4.0^;
contract valueChecker
{
    uint price=10;
    event valueEvent(bool returnValue);
    function Matcher (uint8 x) public returns (bool)
    {
        if (x>=price)
        {
            valueEvent(true);
            return true;
        }
    }
}

合约部署的步骤如下:

(1)使用以下命令运行 Geth 客户端:

[admin@daolian ~]$./geth --datadir ~/etherprivate/ --networkid 786 --rpc --rpcapi 'web3,eth,debug,personal' --rpccorsdomain '*'

 (2) 打开另一个终端并运行以下命令。如果 Geth 控制台没有运行,则在使用以下命令之后,它应该已经在运行:

[admin@daolian ~]$./geth attach ipc:/Users/drequinox/etherprivate/geth.ipc

 (3) 此步骤将需要合约的 Web3 部署,这可以从 Remix 浏览器中获得。

        首先,将以下源代码粘贴到 Remix IDE。

progma solidity ^0.4.0^;
contract valueChecker
{
    uint price=10;
    event valueEvent(bool returnValue);
    function Matcher (uint8 x) public returns (bool)
    {
        if (x>=price)
        {
            valueEvent(true);
            return true;
        }
    }
}

        其次,将代码粘贴到 Remix IDE 后,它将如下图所示:

(4)通过单击 Details (详细信息)按钮复制 Web3 部署脚本,然后将该函数复制到剪贴板。这可以通过在 IDE 中单击 WEB3DEPLOY 标题旁边的 Copy value to clipboard(复制值到剪贴板)图标来实现。 下图显示了 Web3 部署脚本:

(5)确保帐户已解锁且币基设置正确。

首先,使用以下命令查看帐户,该命令输出帐户 0,如下所示:

>personal.listAccounts[0]
"0xcf61d213faa9acabdf0d110e1397caf20445c58f"

其次,使用以下命令解锁帐户,它将需要你在创建此帐户时最初使用的密码短语(密码)。输入该密码以解锁帐户:

>personal.unlockAccount(personal.listAccounts[0])
Unlock account 0xcf61d213faa9acadbf0d110e1397caf20445c58f
Passphrase:
True

 (6) 现在打开之前的 Geth 控制台,并部署合约。

        但是,在部署合约之前,请确保在 Geth 节点上正在进行挖矿。下面的命令可用于在 Geth 控制台上开始挖矿。

>Miner.start(1)

(7) 将此 Web3 部署脚本粘贴到 Geth 控制台中,如下图所示:

上图显示了将 Web3 部署脚本粘贴到 Geth 控制台进行部署时的输出。还可以通过 Geth 日志进行验证,你将看到类似于以下内容的消息:

INFO [12-16|21:55:49] Submitted contract creatinon
fullhash=0x9f7c81a5942b01f2e2446cad6f0acbaa00514326fcf0abf7b7a076d1
contract=0xBD663C5136155cb6d7ED55446888271DCd5092Bc

(8)成功部署合约后,可以查询与此合约相关的各种属性。如下图所示,这包括合约地址和 ABI 定义等。

  

1.2 POST 请求

        可以通过 HTTP 上的 JSONRPC 与 Geth 进行交互。为此,可以使用 curl 工具。

1.3 HTML 和 JavaScript 前端

        网页可以提供更友好与合约进行交互的方式,因此可以考虑使用 HTML/JS/CSS 的网页中的 Web3.js 库与合约进行交互。

        可以使用任何 HTTP Web 甩务器来提供 HTML 内容,而 Web3.js 则可以通过本地 RPC 连接到正在运行的以太坊客户端 (Geth), 并为区块链上的合约提供接口。如下图所示:

2. 安装和使用 Web3.js

        只需发出以下命令,即可通过 npm 安装 Web3:

[admin@daolian ~]$npm install web3

现在,可以使用任何浏览器来通过 TCP 端口 7777 查看服务的网页,如下图所示.

 应该注意的是,此处显示的输出在浏览器的控制台窗口中.

3. 开发框架

        以太坊现在有各种开发框架。从上面讨论的示例中可以看出,通过手动方式部署合约可能会非常耗时,如果能够使用 Truffle 或类似框架(如 Embark),则可以使该过程简单、更快捷。我们选择 Truffle 是因为它拥有更活跃的开发者社区,并且是目前使用最广泛的以太坊开发框架。请注意,现在还没有 “最佳” 框架,因为所有框架都旨在提供简化开发、测试和部署的方法。

4. Truffle 应用示例

        前文简介绍过 Truffle, 本节将讨论 Truffle 的示例项目,该项目将演示如何使用 Truffle 来开发完整的去中心化应用程序。 

        我们将使用 Ganache 作为本地区块链来提供 Web3 接口.因此,你需要确保 Ganache 在后台运行并进行挖矿.在以下示例中,它有 5 个帐户,并在端口 7545 上运行.可以在 Ganache 的 SERVER(服务器) 选项中修改这些选项,如下图所示:

为了验证这一点, 可以在 Ganache 中显示交易的帐户列表,如下图所示: 

 还要注意的是,如下图所示,以太币已从帐户中被消耗掉.随着交易的运行,可以在 Ganache 中看到 BALANCE (余额) 更新.

这将显示类似于下图所示的输出.

这 打开 Web 浏览器并转到 http://localhost:8080,这将显示下图所示的输出.

这些交易将显示在 Ganache 上,如下图所示

6. 去中心化存储

        为了充分利用去中心化机制,除去中心化状态/计算(区块链)之外,还可以对存储和通信层也去中心化。

         传统上,Web 内容是通过集中式服务器提供服务,但也可以使用分布式文件系统来进行去中心化。


http://www.kler.cn/news/303529.html

相关文章:

  • vue vueUse利用useInfiniteScroll API 实现虚拟滚动
  • Spring Boot实战-文章管理系统(1.用户相关接口)
  • 【动态规划】回文串问题
  • PHP省时省力海报在线制作系统小程序源码
  • day-55 从字符串中移除星号
  • Nature|纪念斯隆凯·特琳癌症中心发布有效率达50%的个性化RNA疫苗,强力阻断胰腺癌复发|顶刊速递·24-09-14
  • 掌握ChatGPT:高效利用AI助手
  • SciPy 插值
  • 机器学习--卷积神经网络(包括python实现)
  • spring揭秘20-spring事务02-编程式事务与声明式事务管理
  • 如何在Oracle中实现数据的加密
  • 深度学习-12-多模态Multimodality人工智能
  • React与Vue的对比
  • 秋招突击——算法练习——9/4——73-矩阵置零、54-螺旋矩阵、48-旋转图像、240-搜索二维矩阵II
  • vue原理分析(十四)研究new Vue()中的 initProvide
  • 局域网windows下使用Git
  • c#如何读取Modbus中Slave和Poll的值
  • vue之 package.json和package-lock.json
  • 【机器学习】线性动态系统的基本概念以及卡尔曼滤波器的概念和应用方式
  • c#引用同一命名空间下的其他类
  • 提权——Linux
  • Sequential的使用和搭建实战
  • js 深入理解生成器
  • 实时分析都靠它→揭秘YashanDB列式存储引擎的技术实现
  • 力扣第560题 和为k的子数组
  • 解锁编程潜力,从掌握GitHub开始
  • 突发!OpenAI发布最强模型o1:博士物理92.8分,IOI金牌水平
  • 高职人工智能训练师边缘计算实训室解决方案
  • 产品规划文档
  • PHP一键寄送尽在掌中快递寄件小程序