以太坊开发--geth的使用入门

article/2025/9/20 16:59:09

       geth的全称是go-ethereum,是一个以太坊客户端,用go语言编写,应该是目前最常用的客户端。当然以太坊客户端还有用C++,Ruby,Python,Java等其他多种语言编写的,不同类型的客户端是为了满足不同的需求场景。今天我们主要来介绍geth(发音同guess )的使用。

      对于我们开发来说,比较普遍有两种方式打开geth控制台,以开发方式登录和私链方式登录。这两种方式是完全不同的,两者的账户也是不共用的,其中以开发方式登录相对比较简单,以私链方式登录还需要进行额外的配置,我会在后面的博客进行介绍。

(1)打开终端Terminal,执行以下命令,以开发方式启动geth

geth  --datadir “~/ethdev” --dev 

这会在当前根目录下创建一个ethdev文件夹,当然这个文件夹的名称你可以自己取,我们暂且不管这个文件夹是干嘛用的,后面会进行介绍。



(2)geth启动成功后,重新开一个终端,执行以下命令,打开geth控制台:

geth --dev console 2>>file_to_log_output

该命令会打开geth控制台,同时在目录下生成一个叫做file_to_log_output的日志文件,等下我们会来查看这个日志文件。



(3)查看当前有哪些账户

eth.accounts

.

可见当前没有任何账户。

(4)创建一个新账户

personal.newAccount(‘密码')


我们这里创建两个账户。再使用eth.accounts查看账户:


就发现有两个账户了。

(5)可以把账户赋值给某一个变量,同时查询账户中的余额


可以看到两个账户中的以太币都是0.因为我们还没有启动挖矿。

(6)上面提到过日志文件,我们再重开一个终端,我们使用以下命令打开日志:

tail -f file_to_log_output


我们把这个终端界面放在一边,等下在geth控制台中有任何操作时,都可以来这边看看日志。

(7)在geth控制台中启动挖矿:

miner.start()



来观察日志输出:


可以看到在日志界面中已经显示在挖矿了。


(8)停止挖矿

miner.stop()


此时也可以看到日志界面输出也停止了。


(9)此时我们再来查看两个账户的账户余额


由此可见,挖矿所得的以太币默认是传入第一个账户的。


(10)user1向user2转移以太币

eth.sendTransaction({from: user1,to: user2,value: web3.toWei(3,"ether")})


提示我们账号是锁定的,所以我们需要解锁账户。


解锁账户后,转移操作就成功了。打印出来的是本次交易的地址。


(11)再次查看以太币转移后的user2账户余额


但是发现user2的账户还是为0.这是因为没有矿工来挖矿处理。根据区块链的概念,我们知道,每次交易的确认,其实都是需要挖矿的,也就是被其他矿工共识确认,然后才能加入区块链的账本中。

好,我们执行“miner.start()”开始挖矿,

.

然后就发现账户user2有3个以太币了。转账操作成功。


(12)下面我们来实现下在geth中编译一个智能合约

contract test {function multiply(uint a) returns(uint d) {return a * 7; } 
}
在geth中执行如下:

source = "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }"

然后编译该合约:

contract = eth.compile.solidity(source).test

编译后的结果如下:


code:就是合约编译后的字节码文件,在以太坊虚拟机EVM上运行的就是这个字节码;

abiDefinition:其实就是合约的二进制接口,可用来外部调用;

其他的一些参数也都是可以见名知意了。


然后就要获取合约的abi(其实该真正要用的abi可以通过https://ethereum.github.io/browser-solidity这个在线编译器获得):

abi=[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"type":"function"}]



然后是访问abi接口:

MyContract=eth.contract(abi)




然后获得合约的实例:

myContract=MyContract.new({from:user1,data:contract.code})


如果提示你没有解锁的话,只要解锁即可。


调用函数传递参数


函数做了乘以7的操作,输出符合预期。合约执行成功。

 

      以上就是对geth最基本的运用,我们会在以后的开发中学习geth更为深入的功能。


http://chatgpt.dhexx.cn/article/a6HoME0s.shtml

相关文章

Geth安装和使用

一、简介 Geth是Go Ethereum开源项目的简称,它是使用Go语言编写且实现了Ethereum协议的客户端软件,也是目前用户最多,使用最广泛的客户端。通过Geth客户端与以太坊网络进行连接和交互可以实现账户管理、合约部署、挖矿等众多有趣且实用的功能…

GETH的安装和使用(Windows)

目录 一、Geth介绍 二、Geth安装 1.下载安装 2.配置环境变量 三、Geth私有链搭建 1.创建创世块文件 2.初始化区块链 3.启动私有节点 四、账户交易 1.创建账户 2.挖矿操作 3.查看区块和奖励 ​ 4.转账交易 一、Geth介绍 Geth 又名Go Ethereum.是以太坊协议的三种实现…

最长上升子序列 详解

最长上升子序列 时间限制: 10 Sec 内存限制:128 MB 题目描述 给定一个序列,初始为空。现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置。我们想知道此时最长上升子序列长度是多少? 输入 第一行一个整数N,…

最长上升子序列(二分)

最长上升子序列 给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数 N。 第二行包含 N 个整数,表示完整序列。 输出格式 输出一个整数,表示最大长度。 数据范围 1≤N≤100000, …

C++最长上升子序列

最长上升子序列简介 题目描述 现有数列a1&#xff0c;a2&#xff0c;a3……aN。在其中找到严格递增序列ai1&#xff0c;ai2&#xff0c;ai3&#xff0c;……aiK&#xff08;1 < i1 < i2 < i3 < …… < iK < N&#xff09;&#xff0c;请找出序列a的最长上升…

LIS最长上升子序列

给定一个数组 &#xff0c;让你找出一个最长上升子序列的长度&#xff0c;例如[1,4,6,2,3,5] 答案为4&#xff1a;[1,2,3,5]。 我们用DP[i]表示以下标为i的元素结尾的子序列的最长上升子序列长度 代码如下&#xff1a; ll p[10010]; ll dp[10010]; int main() {ll n, ans 0…

最长上升子序列优化

引言 上次我们说了基础的最长上升子序列&#xff08;看这一篇前可以先看一下最长上升子序列&#xff09; 这次&#xff0c;我们再说一下如何优化&#xff0c;提高效率 我们先来看一道模板题 题目&#xff1a; 题目描述 输入格式 输出格式 输入样例 3 1 3 2 输出样例 1 …

最长上升子序列(LIS)算法

LIS定义 LIS&#xff08;Longest Increasing Subsequence&#xff09;最长上升子序列 一个数的序列bi&#xff0c;当b1 < b2 < … < bS的时候&#xff0c;我们称这个序列是上升的。 对于给定的一个序列(a1, a2, …, aN)&#xff0c;我们可以得到一些上升的子序列(a…

11.最长上升子序列(LIS)

视频讲解&#xff1a;最长上升子序列_哔哩哔哩_bilibili 解题思路&#xff1a; 1.最长上升子序列的含义是从给定的数中选取尽量多的数字形成单调递增的序列 2.可以把以每一个数字形成单调结尾的方案数看待成一个子问题&#xff0c;然后对后面的子问题提供最优解 3.设定状态…

C++动态规划之最长上升子序列

1 子序列与上升子序列 1.1 子序列 一个序列A{a1,a2,...an}中任意删除若干项&#xff0c;剩余的序列叫做A的一个子序列。例如序列A{1,3,5,4,2}&#xff0c;删除其中的第3项和第5项&#xff0c;得到序列B{1,3,4}&#xff0c;删除其中的第3项和第4项&#xff0c;得到序列C{1&#…

最长上升子序列(c++图文详解)

这题思路是这样&#xff0c;假设这个序列长度为n&#xff0c;存在数组a中&#xff0c;maxlen[i]表示以第i个数为终点的最长上升子序列的长度&#xff0c;它被初始化为1&#xff0c;因为一开始单个字符的最长上升子序列都是1&#xff08;它自己&#xff09;&#xff0c;我们先用…

最长上升子序列(动态规划)

子序列 所谓的子序列就是在原来序列中找出一部分组成的序列。 与子段不同&#xff0c;不需要连续的某一段&#xff0c;但是要保持原序列的先后顺序 最长上升子序列 在子序列的基础上&#xff0c;后一项大于前一项。 【题目描述】 【输入格式】 【输出格式】 【输入样例】 1…

最长上升子序列 (LIS) 详解+例题模板 (全)

欢迎访问https://blog.csdn.net/lxt_Lucia&#xff5e;&#xff5e; 宇宙第一小仙女\(^o^)/&#xff5e;萌量爆表求带飞≡Σ((( つ^o^)つ~ dalao们点个关注呗&#xff5e; --------------------------------我只是一条可爱哒分界线------------------------------- 1.摘要&…

Import Dependency Management with Exclusion

文章来源: Import Dependency Management with Exclusion Exclusion at import won’t work, try excluding it from the actual user of the dependency 意思是&#xff1a; 在dependencyManagement里面的dependency中&#xff0c;使用exclusions&#xff0c;是不会有作用的…

maven配置中的 scope, type,optional, classifier, 传递依赖,exclusions解释

scope用于依赖范围控制,它管理哪些依赖在哪些classpath 中可用&#xff0c;哪些依赖包含在一个应用中. 它的取值列表如下: 关于为什么使用provided 引入 servlet-api,jsp-api的问题的澄清: 在eclispe里创建web项目时&#xff0c;eclipse为我们自动添加了这两个jar包&#xff0…

记录--对于$off,Exclude 和 Extract的一点理解

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 一.typescript 高阶类型 Exclude 和 Extract Exclude<T, U> TypeScript 2.8 中增加了 Exclude 类型&#xff0c;该如何理解这个高级类型的定义呢&#xff1f; type Exclude<T, U> T exte…

[1120]Maven依赖冲突解决之exclusions

1. 背景 1、作为java生态下开发者&#xff0c;往往需要使用大量线程的第三方库&#xff0c;一般都是以jar包形式存在。 2、maven作为事实上主流的jar包依赖管理工具&#xff0c;Idea和Eclipse都支持创建maven工程来管理jar包依赖。 3、使用maven进行jar包依赖管理时&#xff0…

logical exclusive 与 physical exclusive 的区别

数字电路中一般会有多个clock&#xff0c;这些clock 相互之间有些是同步的&#xff0c;需要做 timing check 的&#xff0c;有些是异步的&#xff0c;不需要做 timing check 的&#xff0c;还有些是互斥的&#xff0c;需要 exclude 掉的&#xff0c;这些关系就需要在 sdc 中声明…

Maven中 排除依赖 exclusions

使用maven进行jar包依赖管理时&#xff0c;maven会自行管理jar包及其依赖链条&#xff0c;但往往会遇到依赖冲突问题&#xff0c;这时候就可以尝试使用exclusions来进行依赖管理 demo:排除tomcat 启用 jetty <dependency><groupId>org.springframework.boot</g…

Exclusive or

题目连接 题意&#xff1a; 每次给一个n&#xff0c;求 (2≤n<10500) 分析&#xff1a; 先说一下自己的想法&#xff0c;如果将n换成二进制数&#xff0c;也就一两千位左右&#xff0c;那么一位一位处理是可以接受的。将0-n写成二进制形式后&#xff0c;显然所有数某一个二进…