区块链开发之获取BTC,ETH的余额,BTC的UTXO列表,ETH的nonce

获取eth的余额

先来说说eth的余额获取,这个是很简单的,直接通过节点的rpc接口,就可以获取到,具体使用到的RPC接口为:eth_getBalance

参数:

1.要查询钱包地址
2.查询不同状态的余额”latest”(已经确认了的), “earliest”(创世区块的) , “pending”(包含未确认的交易的余额)

params: [
   '0xc94770007dda54cF92009BFF0dE90c06F603a09f',
   'latest'
]

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xc94770007dda54cF92009BFF0dE90c06F603a09f", "latest"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x0234c8a3397aab58" // 158972490234375000
}

获取BTC的余额 和 UTXO列表

直接使用btc节点的rpc服务是很难查出某个地址的余额的,因为btc的utxo机制,想通过rpc服务查余额,就只能先把地址导入节点,节点扫描整个区块,维护本地utxo列表,然后才能查询余额,这需要耗费一定的时间(20分钟以上),所以这个方式根本不适合查询余额。最终只能自己搭建一个btc的区块链浏览器,来解决这个问题(同时也解决了获取utxo列表和查询历史记录的问题)。使用的比较广的btc浏览器应该是insight-api,它的代码是开源的,并且提供接口,github地址:https://github.com/bitpay/insight-api

他提供的接口,足以满足你的需求

获取eth的nonce

估计有些人会有疑问,nonce是用来干啥的呢?其实他是eth用来防止双花的机制:

为了防止交易的重播攻击,每笔交易必须有一个nonce随机数,针对每一个账户nonce都是从0开始,当nonce为0的交易处理完之后,才会处理nonce为1的交易,并依次加1的交易才会被处理。以下是nonce使用的几条规则:

当nonce太小,交易会被直接拒绝。

当nonce太大,交易会一直处于队列之中;

当发送一个比较大的nonce值,然后补齐开始nonce到那个值之间的nonce,那么交易依旧可以被执行。

那如何获取这个nonce和防止交易失败呢,那就应该使用rpc接口获取,并且获取pending状态的值,具体rpc接口为:eth_getTransactionCount

参数:

1.要查询钱包地址
2.查询不同状态的余额”latest”(已经确认了的), “earliest”(创世区块的) , “pending”(包含未确认的交易的次数,推荐使用这个)

params: [
   '0xc94770007dda54cF92009BFF0dE90c06F603a09f',
   'latest'
]

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0xc94770007dda54cF92009BFF0dE90c06F603a09f","latest"],"id":1}'

// Result
{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0x1" // 1
}
如果您希望在 TradingView 上加载 BTC 数据,并根据该数据下单 ETH,您可以使用 `security()` 函数来加载 ETH 数据。下面是一个例子: ``` //@version=4 strategy("My Strategy") btc_data = security("COINBASE:BTCUSD", timeframe.period, close) eth_data = security("COINBASE:ETHUSD", timeframe.period, close) buy_signal = crossover(sma(btc_data, 10), sma(btc_data, 50)) sell_signal = crossunder(sma(btc_data, 10), sma(btc_data, 50)) if (buy_signal) strategy.entry("My Long Entry Id", strategy.long) strategy.order("My Long Entry Id", false, qty=100/eth_data, limit=eth_data, oco=1) if (sell_signal) strategy.entry("My Short Entry Id", strategy.short) strategy.order("My Short Entry Id", true, qty=100/eth_data, limit=eth_data, oco=2) strategy.exit("My Long Entry Id", "My Long Exit Id", stop=close * 0.9) strategy.exit("My Short Entry Id", "My Short Exit Id", stop=close * 1.1) ``` 这个策略加载了 COINBASE:BTCUSD 和 COINBASE:ETHUSD 的数据,并使用 BTC 数据生成交易信号。当 BTC 的 10 日移动平均线上穿 50 日移动平均线时,会产生一个买入信号,当 BTC 的 10 日移动平均线下穿 50 日移动平均线时,会产生一个卖出信号。在这个策略中,下单时使用了 `strategy.order()` 函数,它可以在指定的价位和数量下单,这里使用了 `100/eth_data` 计算以 BTC 为基础的 ETH 数量, `limit=eth_data` 设置以此价格下单, `oco=1` 和 `oco=2` 分别表示两个互斥的订单。在这个策略中,止损条件分别设置为买入价的 10% 和卖出价的 10%。 请注意,这只是一个示例策略,实际的交易策略需要更加复杂和全面的考虑。在进行实际交易之前,请确保您对市场有足够的了解,并根据您的交易计划调整您的策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值