主页 > imtoken怎么转bc1地址 > 区块链初体验以太坊——以太坊平台学习总结

区块链初体验以太坊——以太坊平台学习总结

imtoken怎么转bc1地址 2023-01-31 05:57:01

介绍

随着比特币的普及,作为比特币底层实现的核心支撑技术,区块链技术也逐渐为人们所熟知。

各种媒体和技术专家也对这项技术的应用前景及其对应用领域的颠覆性意义进行了大量的报道和说明。 区块链技术将像互联网技术一样改变现有的传统领域。 行业内也有技术实践的先行者,如R3区块链联盟、以太坊等,在平台落地和技术应用上做了很多尝试。

以太坊币有升值空间吗_有余额的以太坊私钥_以太坊为什么叫以太坊

最近由于工作需要,学习和研究了以太坊、区块链等技术和概念。 本文是作者前期学习、工作实践和同事交流的总结。

区块链发现

区块链是一种基于对等网络的分布式共享账本技术。

有余额的以太坊私钥_以太坊为什么叫以太坊_以太坊币有升值空间吗

通俗地说,区块链是一个公共的、去中心化的数据库。 每个节点(全节点)存储全量相同的数据。 当一笔交易数据被提交到区块链网络后,每个节点(nodes,也叫矿工)开始根据交易信息计算数据块,只有其他节点按照一定的共识计算并确认的第一个数据块机制获胜并被添加到链中。 这个过程也称为算力竞争。 后续数据块的计算将基于前一个块中数据的哈希值。

区块链技术之所以被寄予厚望,是因为该技术的应用可以改变目前中心化的交易机制(目前个人和组织的交易行为是基于一个可信的、中心化的机构进行的,例如跨境结算需要国际清算银行等中介机构完成交易),帮助人们建立可信、去中心化的交易机制,交易双方无需通过第三方机构直接完成交易。

这降低了交易的复杂性和中间成本,提高了业务效率。 同时,区块链通过分布式存储、公私钥加密等技术保证交易数据的安全性、可追溯性和不可篡改性。

以太坊发现

以太坊是一个基于区块链技术的开源平台,通过它可以非常容易地构建去中心化应用程序(Dapp)。 在底层,以太坊基于区块链技术,实现了数据的去中心化、分布式存储和信息交换的信任。 同时,以太坊实现了一个名为以太坊虚拟机(EVM)的运行环境,类似于JVM,其主要工作是执行智能合约的字节码(下文会介绍这个概念)。

以太坊为什么叫以太坊_以太坊币有升值空间吗_有余额的以太坊私钥

以太坊也有挖矿的概念,每笔交易只能通过网络中的矿工挖矿提交到以太坊区块链。

类似于比特币,是以太坊平台上的数字货币,英文简称ETH。

当用户向 EVM 提交交易或智能合约执行时,需要支付的费用按一定比例从以太坊转出。 当用户中的以太坊不足以支付 Gas 时,EVM 将停止执行提交的交易或智能合约。

以太坊币有升值空间吗_有余额的以太坊私钥_以太坊为什么叫以太坊

以太坊中有两种类型的账户:

外部拥有账户 (EOA)

用户可以通过地址和私钥来操作账户。 EOA可以在以太坊控制台通过命令创建,也可以通过IPC对外调用API创建;

智能合约

它在以太坊中的功能是:

1)维护数据存储

2)实施复杂的访问控制策略

3) 为其他合约提供方法调用。

但是,智能合约本身不能执行逻辑或方法,只能被 EOA 或其他合约调用。

在以太坊平台上,智能合约的编程语言有Solidity(文件扩展名以.sol结尾)和Serpent(文件扩展名以.se结尾),但最流行和最稳定的是Solidity。

以太坊账户的所有信息也存储在区块链结构中,如下图所示:

有余额的以太坊私钥_以太坊币有升值空间吗_以太坊为什么叫以太坊

与比特币不同的是,在以太坊的区块链结构中,它不仅包含了前一个区块的引用信息、区块号、交易和时间戳等信息有余额的以太坊私钥,还包含了所有以太坊账户的信息,存储在一棵帕特里夏树(“一种专门的一种 Merkle 树”),以“STATE_ROOT”作为根节点。 根节点的值是通过散列存储在整棵树上的数据来计算的。

从图中可以看出,每个账户节点包含四类信息:

NONCE--记录从该账户发起的交易次数;

BALANCE--记录账户余额;

有余额的以太坊私钥_以太坊币有升值空间吗_以太坊为什么叫以太坊

CODEHASH--智能合约账户的代码哈希值,指向合约代码,如果是EOA,该值为空;

STORAGE_ROOT--另一棵帕特里夏树的根节点,智能合约账户内部数据存储空间,当合约账户调用suicide()方法时,该值会被置为null。

搭建Discovery的智能合约开发环境

为了方便智能合约的开发和测试,需要在本地计算机上搭建以太坊开发环境。 本文下篇将介绍如何使用Truffle+Testrpc搭建环境。

Testrpc的介绍和使用

Testrpc是基于node.js开发的以太坊客户端。 整个区块链的数据都驻留在内存空间中。 Testrpc 可以模拟 geth 客户端的行为,包括所有 RPC API。 发送到 testrpc 的交易将立即处理,无需等待挖矿时间,使得基于以太坊的开发和测试工作更加方便快捷。

测试rpc安装。 在命令行终端输入“npm install -g ethereumjs-testrpc”,等待完成。

启动 Testrpc。 输入命令“testrpc”。 启动完成后会出现如下信息:

有余额的以太坊私钥_以太坊为什么叫以太坊_以太坊币有升值空间吗

从中我们可以看出,testrpc在启动的时候默认创建了多个账号,并且开启了rpc 8545端口。

松露简介

Truffle是一款基于以太坊的智能合约开发工具,支持对合约代码进行单元测试,非常适合TDD。 同时,它内置了智能合约编译器。 只要使用脚本命令有余额的以太坊私钥,就可以轻松完成合约编译、动态库链接、部署、测试等,大大简化了智能合约的开发生命周期。

Truffle的安装非常简单,只需在终端输入命令“sudo npm install -g truffle”,等待安装完成即可。

使用Truffle开发智能合约的过程如下(如何编写合约和solidity语法不在本文讨论范围):

mkdir 我的项目

cd 我的项目

有余额的以太坊私钥_以太坊为什么叫以太坊_以太坊币有升值空间吗

松露初始化

初始化完成后,Truffle会在项目目录下默认生成名为MetaCoin的智能合约demo及其测试文件。 目录结构如下:

以太坊币有升值空间吗_有余额的以太坊私钥_以太坊为什么叫以太坊

各目录含义:

app/:存放前端javascript文件和stylesheets文件,开发Dapps时使用;

contracts/:智能合约文件存放目录;

migrations/:存储部署脚本;

test/:存放智能合约测试文件;

truffle.js:truffle的主要配置文件,在里面可以指定以太坊客户端的地址、rpc端口、network_id等;

1. 编写编译智能合约文件。 例如,如果有一个Multiply.sol,把它放到contracts目录下,执行命令“truffle complie”。 代码片段如下:

有余额的以太坊私钥_以太坊为什么叫以太坊_以太坊币有升值空间吗

2、部署合约,执行命令“truffle deploy”,或者将合约发布到以太坊客户端,在migrations目录下添加部署文件,如3_deploy_multiply.js文件,修改truffle中相关rpc的配置。 js,执行“truffle migrate”命令,终端打印如下信息,表示发布成功;

以太坊币有升值空间吗_以太坊为什么叫以太坊_有余额的以太坊私钥

3、编写测试文件,保存为multiply.js,放到test目录下(代码如下),执行命令“truffle test”:

以太坊为什么叫以太坊_有余额的以太坊私钥_以太坊币有升值空间吗

执行结果如下:

以太坊为什么叫以太坊_以太坊币有升值空间吗_有余额的以太坊私钥

以太坊为什么叫以太坊_有余额的以太坊私钥_以太坊币有升值空间吗

智能合约的外部调用 Discovery

在一些应用场景中,业务系统为了接入以太坊区块链,需要调用以太坊客户端的API,将用户的交易数据发送到以太坊平台。 以太坊客户端对外提供了RPC和IPC两种api调用方式。

以RPC方式为例,curl命令请求格式如下:

调用客户端命令:

假设我们要调用客户端命令eth.getBalance()查询地址为0x407的账户余额,命令如下:

curl --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407", "latest"],"id":1}' localhost:8123

其中:jsonrpc字段指定JSON-RPC版本号,method字段指定调用的api方法名,params字段为传输参数,id为消息标识字段;

调用合约方法:

假设当前部署了一个智能合约,地址为0x6ff93,我们要调用的合约方法签名为multiply(uint256),传入参数值为6,那​​么调用命令格式如下:

以太坊币有升值空间吗_以太坊为什么叫以太坊_有余额的以太坊私钥

其中from为扣除GAS的账户地址,to为智能合约部署地址,data为调用方法的签名和传入参数,编码方式为:

"0x"+sha3("multiply(uint256)").substring(0,8)+to_32bit_Hex_str(6)

to_32bit_Hex_str()方法的实现会根据不同的变量类型而有所不同。 具体规则请参考以太坊合约ABI文档(HERE)。

从上面的例子可以看出,从外部调用智能合约需要复杂的编码。 好在目前以太坊官方提供了一个用javascript语言实现的web3.js模块,里面封装了RPC和IPC两种调用方式d,对外提供简洁的接口,使用起来非常方便。

下文将使用web3.js模块实现nodejs环境下对智能合约的调用,对外提供RESTful API。 详情如下:

有余额的以太坊私钥_以太坊币有升值空间吗_以太坊为什么叫以太坊

系统环境:

Ubuntu14.04.4+Node V5.1.1;

需要导入的节点模块

express、web3、net,可以使用npm命令安装依赖;

主要代码片段

导入模块依赖

有余额的以太坊私钥_以太坊币有升值空间吗_以太坊为什么叫以太坊

设置 RPC 和 IPC 连接对象

有余额的以太坊私钥_以太坊币有升值空间吗_以太坊为什么叫以太坊

调用以太坊客户端方法查询指定账户余额

以太坊为什么叫以太坊_以太坊币有升值空间吗_有余额的以太坊私钥

创建一个新的以太坊账户,这个方法必须使用IPC api的调用方法

以太坊币有升值空间吗_以太坊为什么叫以太坊_有余额的以太坊私钥

新建一个合约对象,其中contractData为合约代码编译后的16进制字符串

以太坊币有升值空间吗_以太坊为什么叫以太坊_有余额的以太坊私钥

调用智能合约方法

有余额的以太坊私钥_以太坊为什么叫以太坊_以太坊币有升值空间吗