当前位置:首页 » 以太坊知识 » 以太坊转账开发

以太坊转账开发

发布时间: 2023-05-10 15:46:51

以太坊钱包转账实战记录

最近项目中,要求给客户退款。 虽然之前我们写的服务封装了以太坊钱包转账的诸多细节,可以很方便的转账,但考虑再三,觉得最安全的方式还是用钱包本身的命令来转账。话不多说,这里记录下用以太坊钱包转账的步骤:

1. 首先网络搜索了下,网上此类的文章还不少。看了一圈后,觉得最好的还是这篇:  https://blog.csdn.net/DDFFR/article/details/53673650   geth账户管理转账。

2.开始打开自己的以太坊钱包。查看钱包各个账户的余额。命令:eth.getBalance('0xaddress')

3. 开始转账步骤:

3.1) 解锁账户。命令:personal.unlockAccount("0xaddress123456789",“123456”)。 第一个参数:账户,第二个参数:解锁密码。就是创建这个账户地址时的密码。 其实还有第三个参数,是时间,表示解锁多久。如60,就写0x3c。可以不写,默认是300秒,就是5分钟;

3.2)计算fee:因为想把账户里的钱都退回去,所以要计算一个合理的fee,fee的计算公式:

fee  <= gasPrice * gasLimit,对于普通的ETH交易,则gasLimit=21000即可,这个值可看区块浏览器的交易,一般都是这个值。而gasPrice则需要自己确定,这个是浮动的。获取方式:通过钱包的:

eth.gasPrice 来获取钱包本身推荐的矿工费。也可自己给一个值。但记住,给太低就没人打包了;

而对于gasLimit,钱包的值各不相同。如果不在乎手续费的话,可以用后面提到了的转账命令,给自己的账户发送一个0eth的转账,来获取本钱包的gaslimit参数。

3.3)计算实际款额度:

amout = 账户的余额-fee

3.4)转账命令:

有几个方式:

gasprice/gaslimit由钱包本身指定: eth.sendTransaction({from: '0xfromaddress', to: '0xtoaddress', value: web3.toWei(1, "ether")})

 eth.sendTransaction({from: '0xfromaddress', to: '0xtoaddress', value: web3.toWei(0, "ether")})//通过这个可以获取钱包本身提供的 gasLimit默认参数。

自己指定gasprice/gaslimit:eth.sendTransaction({from: '0xfromaddress', to: '0xtoaddress', gasPrice: web3.toWei(30, 'gwei'), gas:21000, value: web3.toWei(1, "ether")})

这里用到了web3.toWei()函数,这个函数表示将第一个数字参数变成最小以太坊单位Wei表示的一个数字。第二个参数表示这个参数的单位。可以是1Gwei = 10^9 Wei,1 ether=10^18 Wei. 

如果出现错误,根据提示修改参数。如果成功,则返回一个交易id。根据这个id到浏览器上查看交易状态即可。

上面步骤要在解锁时间范围内完成,要不就提示账户被锁定的信息。感觉以太坊这点做得还是挺好,挺安全的。

在做上面步骤时,这里还遇到了一个坑,就是有个服务会扫描钱包账户,进行资金归集。对此,为了操作不被打断。必须先停止对这个钱包操作的所有服务,否则会中断转账流程,引起不必要的安全隐患。所以切记:转账前,保证只有你自己在操作钱包;转账前,保证只有你自己在操作钱包;转账前,保证只有你自己在操作钱包;

② 以太坊怎么0旷工费转账

以太坊0矿工费转账,可以通过点击矿工费进行设置。最新版本的2.5.7imToken钱包支持三档矿工费,即“快、中、慢”。我们按照需要交易被确认打包的时间进行选择即可,不会出现手滑设置成天价矿工费的情况。
一、以太坊是什么?
本质上,以太坊是一个共享数据库,其中可以存储数据或信息,数据和信息不可伪造、可追溯、开放透明,这使得该技术奠定了坚实的信任基础,打造了可靠的协作机制,具有非常广阔的前景。如今,区块链已经进入公众的视野,成为社会关注的焦点。简单来说,以太坊是一个开发平台,它允许我们编写像区块链技术这样的应用程序。以太坊封装了底层的区块链技术,允许开发人员直接开发,只专注于应用程序本身的开发,大大降低了难度。
二、以太坊贸易平台是怎么做搬砖套利的
如下所示:1. 以太坊是一个基于智能合约和分布式互联网创作应用的平台,可以对比特币和以太坊的任何支付进行编程。一旦发现差价,就会从价格低的平台购买比特币和以太坊,然后转移到价格高的平台出售,从而从差价中赚取利润;2.使用大规模高端云计算,在全球货币交易平台上会做空或做多(低吸高抛),在0.28。只要数字货币存在,价格波动,价差空间就会一直存在。Ethtrade以太坊交易平台可以说开创了数字货币的新投资模式。3.Ethtrade以太坊有一套完整的交易策略,包括差价、币对币转换、市场预测和假币,这些都是普通人做不到的。
综上所述,以太坊是一个非常厉害的开发平台,它可以利用差价来进行售出,从而赚取利润,并且它的计算一般都是采用大型的高端云,在世界上都是非常厉害的,可以确保每个投资者都能分红增值。

③ 以太坊智能合约开发:让合约接受转账

在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢?

有三种方式:

部署合约时转账

调用合约提供的方法

直接向合约地址进行转账

但有一个问题,以太坊的智能合约默认是拒绝来自任何地址的转账,那么如何让合约能够支持接收转账呢?

1、部署转账

在进行合约开发时,如果想要在部署时,直接向该合约进行转账,只需要给构造函数中添加payable修饰符。

示例:

2、执行合约转账

执行合约转账,则需要给你需要支持转账功能的方法添加payable修饰符

示例:

3、直接转账

支持直接转账,需要借助后备函数(fallback function),只需要为后备函数添加 payable 修饰符

示例:

④ 用Go来做以太坊开发⑤事件日志

智能合约具有在执行期间“发出”事件的能力。 事件在以太坊中也称为“日志”。 事件的输出存储在日志部分下的事务处理中。 事件已经在以太坊智能合约中被广泛使用,以便在发生相对重要的动作时记录,特别是在代币合约(即ERC-20)中,以指示代币转账已经发生。 这些部分将引导您完成从区块链中读取事件以及订阅事件的过程,以便交易事务被矿工打包入块的时候及时收到通知。

为了订阅事件日志,我们需要做的第一件事就是拨打启用websocket的以太坊客户端。 幸运的是,Infura支持websockets。

下一步是创建筛选查询。 在这个例子中,我们将阅读来自我们在之前课程中创建的示例合约中的所有事件。

我们接收事件的方式是通过Go channel。 让我们从go-ethereum core/types 包创建一个类型为 Log 的channel。

现在我们所要做的就是通过从客户端调用 SubscribeFilterLogs 来订阅,它接收查询选项和输出通道。 这将返回包含unsubscribe和error方法的订阅结构。

最后,我们要做的就是使用select语句设置一个连续循环来读入新的日志事件或订阅错误。

我们会在下个章节介绍如何解析日志。

Commands

Store.sol

event_subscribe.go

智能合约可以可选地释放“事件”,其作为交易收据的一部分存储日志。读取这些事件相当简单。首先我们需要构造一个过滤查询。我们从go-ethereum包中导入 FilterQuery 结构体并用过滤选项初始化它。我们告诉它我们想过滤的区块范围并指定从中读取此日志的合约地址。在示例中,我们将从在 智能合约章节 创建的智能合约中读取特定区块所有日志。

下一步是调用ethclient的 FilterLogs ,它接收我们的查询并将返回所有的匹配事件日志。

返回的所有日志将是ABI编码,因此它们本身不会非常易读。为了解码日志,我们需要导入我们智能合约的ABI。为此,我们导入编译好的智能合约Go包,它将包含名称格式为 <Contract>ABI 的外部属性。之后,我们使用go-ethereum中的 accounts/abi 包的 abi.JSON 函数返回一个我们可以在Go应用程序中使用的解析过的ABI接口。

现在我们可以通过日志进行迭代并将它们解码为我么可以使用的类型。若您回忆起我们的样例合约释放的日志在Solidity中是类型为 bytes32 ,那么Go中的等价物将是 [32]byte 。我们可以使用这些类型创建一个匿名结构体,并将指针作为第一个参数传递给解析后的ABI接口的 Unpack 函数,以解码原始的日志数据。第二个参数是我们尝试解码的事件名称,最后一个参数是编码的日志数据。

此外,日志结构体包含附加信息,例如,区块摘要,区块号和交易摘要。

若您的solidity事件包含 indexed 事件类型,那么它们将成为 主题 而不是日志的数据属性的一部分。在solidity中您最多只能有4个主题,但只有3个可索引的事件类型。第一个主题总是事件的签名。我们的示例合约不包含可索引的事件,但如果它确实包含,这是如何读取事件主题。

正如您所见,首个主题只是被哈希过的事件签名。

这就是阅读和解析日志的全部内容。要学习如何订阅日志,阅读上个章节。

命令

Store.sol

event_read.go

首先,创建ERC-20智能合约的事件日志的interface文件 erc20.sol :

然后在给定abi使用 abigen 创建Go包

现在在我们的Go应用程序中,让我们创建与ERC-20事件日志签名类型相匹配的结构类型:

初始化以太坊客户端

按照ERC-20智能合约地址和所需的块范围创建一个“FilterQuery”。这个例子我们会用 ZRX 代币:

用 FilterLogs 来过滤日志:

接下来我们将解析JSON abi,稍后我们将使用解压缩原始日志数据:

为了按某种日志类型进行过滤,我们需要弄清楚每个事件日志函数签名的keccak256哈希值。 事件日志函数签名哈希始终是 topic [0] ,我们很快就会看到。 以下是使用go-ethereum crypto 包计算keccak256哈希的方法:

现在我们将遍历所有日志并设置switch语句以按事件日志类型进行过滤:

现在要解析 Transfer 事件日志,我们将使用 abi.Unpack 将原始日志数据解析为我们的日志类型结构。 解包不会解析 indexed 事件类型,因为它们存储在 topics 下,所以对于那些我们必须单独解析,如下例所示:

Approval 日志也是类似的方法:

最后,把所有的步骤放一起:

我们可以把解析的日志与etherscan的数据对比: https://etherscan.io/tx/#eventlog

Commands

erc20.sol

event_read_erc20.go

solc version used for these examples

要读取 0x Protocol 事件日志,我们必须首先将solidity智能合约编译为一个Go包。

安装solc版本 0.4.11

为例如 Exchange.sol 的事件日志创建0x Protocol交易所智能合约接口:

Create the 0x protocol exchange smart contract interface for event logs as Exchange.sol :

接着给定abi,使用 abigen 来创建Go exchange 包:

Then use abigen to create the Go exchange package given the abi:

现在在我们的Go应用程序中,让我们创建与0xProtocol事件日志签名类型匹配的结构体类型:

初始化以太坊客户端:

创建一个 FilterQuery ,并为其传递0x Protocol智能合约地址和所需的区块范围:

用 FilterLogs 查询日志:

接下来我们将解析JSON abi,我们后续将使用解压缩原始日志数据:

为了按某种日志类型过滤,我们需要知晓每个事件日志函数签名的keccak256摘要。正如我们很快所见到的那样,事件日志函数签名摘要总是 topic[0] :

现在我们迭代所有的日志并设置一个switch语句来按事件日志类型过滤:

现在要解析 LogFill ,我们将使用 abi.Unpack 将原始数据类型解析为我们自定义的日志类型结构体。Unpack不会解析 indexed 事件类型,因为这些它们存储在 topics 下,所以对于那些我们必须单独解析,如下例所示:

对于 LogCancel 类似:

最后是 LogError :

将它们放在一起并运行我们将看到以下输出:

将解析后的日志输出与etherscan上的内容进行比较: https://etherscan.io/tx/

命令

Exchange.sol

event_read_0xprotocol.go

这些示例使用的solc版本

⑤ 【ETH钱包开发03】web3j转账ETH

在之前的文章中,讲解了创建、导出、导入钱包。
【ETH钱包开发01】创建、导出钱包
【ETH钱包开发02】导入钱包

本文主要讲解以太坊转账相关的一些知识。交易分为ETH转账和ERC-20 Token转账,本篇先讲一下ETH转账。

1、解锁账户发起交易。钱包keyStore文件保存在geth节点上,用户发起交易需要解锁账户,适用于中心化的交易所。

2、钱包文件离线签名发起交易。钱包keyStore文件保存在本地,用户使用密码+keystore的方式做离线交易签名来发起交易,适用于dapp,比如钱包。

本文主要讲一下第二种方式,也就是钱包离线签名转账的方式。

交易流程
1、通过keystore加载转账所需的凭证Credentials
2、创建一笔交易RawTransaction
3、使用Credentials对象对交易签名
4、发起交易

注意以下几点:

1、Credentials
这里,我是通过获取私钥的方式来加载 Credentials

还有另外一种方式,通过密码+钱包文件keystore方式来加载 Credentials

2、nonce

nonce是指发起交易的账户下的交易笔数,每一个账户nonce都是从0开始,当nonce为0的交易处理完之后,才会处理nonce为1的交易,并依次加1的交易才会被处理。

可以通过 eth_gettransactioncount 获取nonce

3、gasPrice和gasLimit
交易手续费由gasPrice 和gasLimit来决定,实际花费的交易手续费是 gasUsed * gasPrice 。所有这两个值你可以自定义,也可以使用系统参数获取当前两个值

关于 gas ,你可以参考我之前的一篇文章。
以太坊(ETH)GAS详解

gasPrice和gasLimit影响的是转账的速度,如果gas过低,矿工会最后才打包你的交易。在app中,通常给定一个默认值,并且允许用户自己选择手续费。

如果不需要自定义的话,还有一种方式来获取。获取以太坊网络最新一笔交易的 gasPrice ,转账的话, gasLimit 一般设置为21000就可以了。

Web3j还提供另外一种简单的方式来转账以太币,这种方式的好处是不需要管理nonce,不需要设置gasPrice和gasLimit,会自动获取最新一笔交易的gasPrice,gasLimit 为21000(转账一般设置成这个值就够用了)。

这个问题,我想是很多朋友所关心的吧。但是到目前为止,我还没有看到有讲解这方面的博客。

之前问过一些朋友,他们说可以通过区块号、区块哈希来判断,也可以通过Receipt日志来判断。但是经过我的一番尝试,只有 BlockHash 是可行的,在web3j中根据 blocknumber 和 transactionReceipt 都会报空指针异常。

原因大致是这样的:在发起一笔交易之后,会返回 txHash ,然后我们可以根据这个 txHash 去查询这笔交易相关的信息。但是刚发起交易的时候,由于手续费问题或者以太网络拥堵问题,会导致你的这笔交易还没有被矿工打包进区块,因此一开始是查不到的,通常需要几十秒甚至更长的时间才能获取到结果。我目前的解决方案是轮询的去刷 BlockHash ,一开始的时候 BlockHash 的值为0x00000000000,等到打包成功的时候就不再是0了。

这里我使用的是rxjava的方式去轮询刷的,5s刷新一次。

正常情况下,几十秒内就可以获取到区块信息了。

区块确认数=当前区块高度-交易被打包时的区块高度。

⑥ 以太坊入门(三)用web3j进行以太转账及代币转账

上章讲到账户的查询,本章讲述账户转账。

代币转账和以太转账的区别在于,to地址是合约地址,而input是有三部分数据构成:transfer方法的哈希+收款人的地址+转账金额。此处比较难理解的正是Function部分,设置好参数以后,调用rawTransaction就可以了。

⑦ 以太坊转账流程

发起:用户在本地的以太坊钱包软件中选择要发送的交易地址(From)、输入目标地址(To)、金额(Value)、是否部署或调用合(Data)、手续费单价(Gasprice)等,确认发送至以太坊节点节点和钱包可以是同一台
广播:节点收到(或自己发起)交易后,会对交易进行验证。验证:交易的签名、发起账号的余额是否能支付转账余额与手续费、Nonce是否为账号已发出的交易数。验证为合法后,将交易加入节点的交易池中交易池中存储着待打包的交
安装以太坊浏览器钱包插件,创建钱包,获取虚拟以太币,进行转账交易。 实验内容 学习 初识以太坊,发送交易 1.学习《初始以太坊,发送交易》,虚拟以太币交易。

⑧ 以太坊开发(2):在以太坊私有链上的基本操作

在上一讲 如何使用geth搭建以太坊私有链 完成了私有链的搭建,下面介绍在私有链上的基本操作。

启动私有链后在命令行输入:

执行完之后可以查看到生成的账户地址为

查询账户余额:

刚刚创建的私有链账户都是没有余额的,需要通过挖矿才会产生eth,下面介绍如何在私有链上挖矿。

在geth环境下执行:

这时候查看日志geth.log可以看到以太坊私有链有个启动的百分比,到100就正式启动了:

挖矿开始:

这时候有个疑问,挖矿挖到的eth到哪了,其实默认到了eth.account[0],就是第一个账户上:

如何修改挖矿所得的账户:

命令如下:

下面开始进行转账:

这时候出现报错,原因是转账的账户没有解锁,需要输入密码解锁转账的账户才能完成转账操作:

⑨ eth钱包开发(nodejs)(一)

tips: sendEthTransaction方法将eth转账和token转账合并,转账eth时将tokenValue赋值为0,转账token时将value赋值为0即可

⑩ 【ETH钱包开发04】web3j转账ERC-20 Token

在上一篇文章中讲解了ETH转账,这一篇讲一下ERC-20 Token转账。
【ETH钱包开发03】web3j转账ETH

1、直接用web3j的API
2、java/Android调用合约的 transfer 方法

不管用哪种方式来转账,你都需要先写一个solidity智能合约文件来创建ERC-20 Token,然后部署合约,最后才是通过客户端来调用。

注意:erc-20 token转账和eth转账的区别如下:
1、erc-20 token创建交易对象用的是这个方法 createTransaction

2、erc-20 token需要构建 Function ,它其实对应的就是erc-20 token合约中的那些方法。它的第一个参数就是ERC20中那几个方法的名称,第二个参数的话就是对应合约方法中的参数,第三个参数是和第二个参数对应的,按照我那样就行了。转账的话就是 transfer ,我们从合约的 transfer 可以看到第一个参数是收款地址,第二个参数是金额,所以 Function 这里对应起来就好。

这种方法不需要使用web3j封装的方法,而是直接调用solidity合约的方法。

步骤
1、web3j加载一个已经部署的合约
2、验证合约是否加载成功 isValid
3、如何加载合约成功,则调用合约的 transfer 方法

注意:
1、这里的 TokenERC20 是根据solidity智能合约生成的对应的Java类,用于java/Android和智能合约交互的,如果你对这里不太清楚,不妨看看我之前的一篇文章。
以太坊Web3j命令行生成Java版本的智能合约

2、如果加载合约失败,可能的一个原因是合约对应的Java类中的 BINARY 的值不对,这个值是你部署合约成功之后的bytecode,你最好检查对比一下。

我发送一笔交易,可以通过这个地址查询
https://rinkeby.etherscan.io/tx/

热点内容
冒险与挖矿凛孙策 发布:2024-11-18 10:12:40 浏览:273
怎么算合法使用区块链 发布:2024-11-18 09:45:41 浏览:522
挖矿难度全网算力关系 发布:2024-11-18 09:40:35 浏览:333
新华社最新的元宇宙新闻 发布:2024-11-18 09:19:29 浏览:564
以太坊币圈信息预测 发布:2024-11-17 23:13:49 浏览:291
最新手机挖矿软件下载 发布:2024-11-17 23:04:22 浏览:512
禁比特币平台 发布:2024-11-17 22:31:16 浏览:286
区块链pdf新浪博客 发布:2024-11-17 22:27:48 浏览:531
eth要转成pos还要等6年 发布:2024-11-17 22:21:49 浏览:960
重启linuxeth0 发布:2024-11-17 22:09:55 浏览:975