eth转账开发
① btc鍜宔th鐨勫尯鍒
btc锛堟瘮鐗瑰竵锛夊拰eth锛堜互澶鍧婏級鐨勫尯鍒鏄鍏辫瘑鏈哄埗銆佸簲鐢ㄥ紑鍙戠瓑绛夈
1銆佸叡璇嗘満鍒
姣旂壒甯佷娇鐢ㄧ殑宸ヤ綔閲忚瘉鏄庡叡璇嗘満鍒讹紝闇瑕佺熆宸ラ氳繃璁$畻闅鹃樻潵楠岃瘉浜ゆ槗骞剁淮鎶ょ綉缁滃畨鍏ㄣ傝繖绉嶆満鍒跺彲浠ラ槻姝㈠弻閲嶆敮浠樺拰娆鸿瘓浜ゆ槗锛屼絾涔熼渶瑕佸ぇ閲忕殑鑳芥簮鍜岃$畻鑳藉姏銆傜浉姣斾箣涓嬶紝浠ュお鍧婁娇鐢ㄦ潈鐩婅瘉鏄庡叡璇嗘満鍒讹紝鍏佽告寔鏈夎呮姷鎶间互澶甯佹潵楠岃瘉浜ゆ槗鍜屽弬涓庣綉缁滃畨鍏ㄣ傝繖绉嶆満鍒舵洿鐜淇濓紝浣嗕篃闇瑕佹洿澶氱殑璧勬湰鎶曞叆銆
浠ュお鍧婄殑杩愯屾満鍒
1銆佸尯鍧楅摼鎶鏈锛氫互澶鍧婁娇鐢ㄥ尯鍧楅摼鎶鏈鏉ヨ板綍鍜岄獙璇佷氦鏄撱備笌姣旂壒甯佺被浼硷紝浠ュお鍧婄殑鍖哄潡閾炬槸涓涓鍘讳腑蹇冨寲鐨勫垎甯冨紡鏁版嵁搴擄紝瀹冭板綍浜嗘墍鏈夌殑浜ゆ槗鍜屾櫤鑳藉悎绾︽墽琛岀粨鏋溿傛瘡涓鑺傜偣閮芥湁瀹屾暣鐨勮处鏈鍓鏈锛屽苟涓旈氳繃鍏辫瘑鏈哄埗鏉ヤ繚鎸佷竴鑷淬傝繖绉嶇粨鏋勭‘淇濅簡浜ゆ槗鐨勫畨鍏ㄦу拰涓嶅彲绡℃敼鎬с
2銆佹櫤鑳藉悎绾︼細浠ュお鍧婂厑璁稿紑鍙戜汉鍛樺湪鍖哄潡閾句笂鍒涘缓鍜岄儴缃叉櫤鑳藉悎绾︺傛櫤鑳藉悎绾︽槸涓绉嶈嚜鍔ㄦ墽琛屽悎鍚屾潯娆剧殑璁$畻鏈虹▼搴忥紝瀹冧滑瀛樺偍鍦ㄥ尯鍧楅摼涓婏紝骞朵笖鍙浠ュ搷搴斿栭儴浜嬩欢鍜岃Е鍙戝櫒銆備互澶鍧婄殑鏅鸿兘鍚堢害浣跨敤鍥剧伒瀹屽囩殑鑴氭湰璇瑷锛圫olidity锛夌紪鍐欙紝鍙浠ュ疄鐜板悇绉嶅嶆潅鐨勯昏緫鍜屽姛鑳姐
② 【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刷新一次。
正常情况下,几十秒内就可以获取到区块信息了。
区块确认数=当前区块高度-交易被打包时的区块高度。
③ 比特派 ETH、ERC20 Token 批量转账教程,好用!
功能简介:
比特派的批量转账功能可以将你的ETH或ERC20的TOKEN 同时发送到多个地址(当前最多支持255个)。
优势:
节省操作时间,节省矿工费。
操作教程:
1、打开比特派,在左上角切换到“ETH体系”点击 “批量转账”
2、进入操作页面后,首先确认自己用来付款的的币种、地址。然后点击加号【+】来添加收款方信息。
3、你可以选择【从剪贴板获取】或者【手动输入】收款方信息。
当你选择从剪贴板获取时:
你需要按固定格式提前复制好相关内容,再点击此按钮才可添加成功。
格式为:
地址,金额 (地址和金额之间用英文的逗号分隔,多组信息之间需要换行)
例如:
0xc35f4f66ef......20db8f7d , 0.001
0xfe4503c78......4e4ae1ae , 0.002
如果您要处理的地址较多,建议使用电脑表格软件进行整理,格式如下。
当你整理的地址在表格内显示异常时,选中所有异常的表格,右键选择单元格格式,并将单元格格式选择文本。(不同的软件操作步骤略有差异,核心操作在于将单元格文本格式选择成文本。)
整理完成后,可通过微信等其他软件将内容发送到手机并复制,打开批量转账页面点击加号+,选择从剪贴板复制,即可批量添加收款信息。
当你选择手动输入时:
可以手动输入地址、金额。也可以通过扫码、地址簿添加等方式添加地址。
4、地址信息添加完成并确认无误后,点击确认转账,核对好相关信息后点击确认,即可发出。等待合约确认后,便可查看所有的转账详情。
④ 【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/
⑤ USDT_ERC20和ERC20代币转账提币API接口的调用流程
USDT_ERC20和ERC20的代币都可以按照这个教程来只是代币名字不一样:
ERC20的USDT,就是以太坊的代币。转账手续费低,速度快。
1、ERC20地址收到USDT后(ztPay平台会根据应用配置里面的通知地址进行通知),USDT转账时需要扣ETH作为手续费。ERC20地址收到USDT后是没有ETH的。那么就需要充值ETH。
2、在ztPay平台创建一个ETH地址,往里面冲入一定数量ETH作为手续费资金池。 这个可以在线接口处创建地址 或者自己调用接口创建地址。
3、等这个地址有了ETH,就可以调用ETH的转账接口,往收到USDT_ERC20的地址里面充值0.0035ETH以上作为手续费 。
因为USDT_ERC20转账是扣的当前这个转出地址里面的eth作为手续费。
4、总结:USDT_ERC20这个当前地址里面有usdt,也要有 0.0035以上的eth手续费。那么才可以调用转账接口,开始转账。
USDT_ERC20转账流程:
第一步:首先通过获取地址余额接口(name=usdt_erc20),查询USDT余额包括ETH手续费余额。
第二步:检测ETH手续费是否大于0.0035ETH,大于则即可调用接口转出USDT ,转账完毕。ETH以太坊网络gas limit和gas price设置
第三步:ETH手续费不足则 调用之前准备的ETH手续费资金池地址,往这个地址里面转入至少0.0035的ETH。完毕。等下次执行转账时即可转账成功。
做一个定时任务最好5以上分钟执行一次可以通过以太坊浏览器来查询相关金额:https://eth.tokenview.com/cn/ 或者 https://etherscan.io/
接口参考资料: ztPay数字货币接口文档
⑥ 浠ュお鍧奅TH鎬庢牱鎵归噺杞璐︼紵
涓銆佷互澶鍧奅TH鎬庢牱鎵归噺杞璐︼紵
.com閽卞寘鏈夌洿鎺ユ壒閲忚浆璐﹀伐鍏凤紝鏂逛究鐨勫緢銆
浜屻佹瘮鐗规淳閽卞寘鎵归噺鍦板潃璧勪骇鎬庝箞鍚堝苟鍒颁竴璧
姣旂壒娲鹃挶鍖呮壒閲忓湴鍧璧勪骇鎬庝箞鍚堝苟鍒颁竴璧
1銆佺‘璁ゆ偍瑕佸彂閫佺殑甯佺嶏紝濂介渶瑕佹敹娆剧殑鍦板潃
?
2銆侀摼鎺 BITHD锛岀偣鍑昏浆璐︼紝杈撳叆鏀舵惧湴鍧锛屾牳瀵规敹娆惧湴鍧锛岃緭鍏ヨ佽浆璐︾殑閲戦
?
?
浠ヤ笂灏辨槸姣旂壒娲鹃挶鍖呬娇鐢ㄦ暀绋嬶細BITHD杞璐︽暀绋嬬殑璇︾粏鍐呭癸紝鏇村氬叧浜嶣ITHD杞璐︽暀绋嬬殑璧勬枡璇峰叧娉ㄨ剼鏈涔嬪跺叾瀹冪浉鍏虫枃绔狅紒
鏈绔欐彁閱掞細鎶曡祫鏈夐庨櫓锛屽叆甯傞』璋ㄦ厧锛屾湰鍐呭逛笉浣滀负鎶曡祫鐞嗚储寤鸿銆 Tag锛氭瘮鐗规淳 閽卞寘 BITHD
涓夈佷互澶鍧奅TH鎬庢牱鎵归噺杞璐?
bitpie 姣旂壒娲鹃挶鍖 浜叉祴鍙鐢ㄣ
⑦ 以太坊怎么0旷工费转账
以太坊0矿工费转账,可以通过点击矿工费进行设置。最新版本的2.5.7imToken钱包支持三档矿工费,即“快、中、慢”。我们按照需要交易被确认打包的时间进行选择即可,不会出现手滑设置成天价矿工费的情况。
一、以太坊是什么?
本质上,以太坊是一个共享数据库,其中可以存储数据或信息,数据和信息不可伪造、可追溯、开放透明,这使得该技术奠定了坚实的信任基础,打造了可靠的协作机制,具有非常广阔的前景。如今,区块链已经进入公众的视野,成为社会关注的焦点。简单来说,以太坊是一个开发平台,它允许我们编写像区块链技术这样的应用程序。以太坊封装了底层的区块链技术,允许开发人员直接开发,只专注于应用程序本身的开发,大大降低了难度。
二、以太坊贸易平台是怎么做搬砖套利的
如下所示:1. 以太坊是一个基于智能合约和分布式互联网创作应用的平台,可以对比特币和以太坊的任何支付进行编程。一旦发现差价,就会从价格低的平台购买比特币和以太坊,然后转移到价格高的平台出售,从而从差价中赚取利润;2.使用大规模高端云计算,在全球货币交易平台上会做空或做多(低吸高抛),在0.28。只要数字货币存在,价格波动,价差空间就会一直存在。Ethtrade以太坊交易平台可以说开创了数字货币的新投资模式。3.Ethtrade以太坊有一套完整的交易策略,包括差价、币对币转换、市场预测和假币,这些都是普通人做不到的。
综上所述,以太坊是一个非常厉害的开发平台,它可以利用差价来进行售出,从而赚取利润,并且它的计算一般都是采用大型的高端云,在世界上都是非常厉害的,可以确保每个投资者都能分红增值。
⑧ Geth实现以太账户之间转账
1、打开控制台
F:\Geth>geth --datadir "data" console
2、查看目前所拥有的账户列表
> eth.accounts
[""]
3、新建账户
> personal.newAccount('123456')
""
4、查看目前所拥有的账户列表
> eth.accounts
["", "
efed9a8240"]
5、查看账户余额
> eth.getBalance(eth.accounts[0])
665000000000000000000
> eth.getBalance(eth.accounts[1])
0
6、定义变量
> var acc1=eth.accounts[0]
undefined
> acc1
""
> var acc2=eth.accounts[1]
undefined
> acc2
""
7、转账
> eth.sendTransaction({from: acc1 , to: acc2, value: web3.toWei(10,"ether")})
Error: authentication needed: password or unlock
at web3.js:3143:20
at web3.js:6347:15
at web3.js:5081:36
at <anonymous>:1:1
(账户被锁报错)
8、解锁账户
> personal.unlockAccount(acc1,"123456")
true
9、转账
> eth.sendTransaction({from: acc1 , to: acc2, value: web3.toWei(10,"ether")})
INFO [11-14|14:34:24.526] Setting new local account address=0xF4f
INFO [11-14|14:34:24.551] Submitted transaction fullhash=0x98
recipient=0x1DfA2
"0x98"
10、查看账户余额
> eth.getBalance(acc1)
665000000000000000000
> eth.getBalance(acc2)
0
11、挖矿
>miner.start(1);admin.sleepBlocks(20);miner.stop();
12、挖矿结束查看账户余额
> eth.getBalance(acc2)
10000000000000000000
(欢迎打赏,一分也是爱)
⑨ iOS开发ETH钱包
框架:web3swift => https://github.com/matter-labs/web3swift
1、创建钱包
2、导入钱包
3、获取余额
4、转账
5、调用智能合约
注意:
1、网络的切换
测试网 let web3 = Web3.InfuraRinkebyWeb3()
主网 let web3 = Web3.InfuraMainnetWeb3()
2、转账相关的,必须配置
KeystoreManager
TransactionOptions
3、调用智能合约,参数不对,会直接返回nil
⑩ ETH转账的2种方式的对比
web3j支持使用以太坊钱包文件(推荐)和以太网客户端管理命令来发起一笔交易。当你创建了一个拥有以太币的账户后,你可以通过以下两种交易机制,和以太坊网络(私网/公网)交易:
这里主要讲一下 线下签名交易(Offline transaction signing) 。线下签名交易允许你使用web3j提供的钱包账户发起交易,你完全控制自己的私钥,交易发送到网络上的其它节点并广播。
线下签名交易使用 RawTransaction 对象来完成,一共有如下几步:
1、通过私钥或密码+钱包文件(keystore)来加载转账凭证Credentials
2、获取发起转账账户的nonce 值,也就是第几笔交易
3、创建 RawTransaction交易 对象
4、签名 RawTransaction 对象,也就是对交易做签名
5、发送交易( RawTransaction 对象)给节点处理。
6、获取交易哈希值TxHash
以太坊实战-再谈nonce使用陷阱: https://blog.csdn.net/wo541075754/article/details/79054937
此外,还有一种简单的转账方式
这种方式,不需要自己管理nonce。
这2种方式都是离线交易,先组装交易,然后发送到链上。
参考:
https://docs.web3j.io/getting_started.html#transactions
https://www.jianshu.com/p/6650d2a3aea9