mt logoMyToken
Market cap:$0
0%
FGI:0
0%
Cryptocurrencies:--
Exchanges --
ETH Gas:--
English
USD
APP
Ap Store QR Code

Scan Download

Rosetta比特币介绍:Coinbase的Rosetta API的比特币实现

Comprehensive

0

Activity

Fund holdings

Trading pair

0

Registration

-

Followers

0

24h platform transaction volume
$0
0 BTC
2020/09/22 19:15:32发布,内容以 原文链接 为准

6月,我们发布了Rosetta作为开放源代码规范,该规范使与区块链的集成更加简单,快捷和可靠。 现在有20多个区块链项目正在实施Rosetta实施 (附近,卡尔达诺,塞洛,科达,新,特隆,握手,绿洲,波斯菊,Decred,Filecoin,本体论,新亚,Zilliqa,Digibyte,和谐,Kadena,Nervos和Blockstack), 五个进行中的SDK (Golang,JavaScript,TypeScript,Java和Rust)以及八个团队为GitHub上的Rosetta仓库中的至少一个做出了贡献rosetta-specificationsrosetta-sdk-gorosetta -cli )。

今天,我们正在为不断增长的实现集合提供重要贡献: rosetta-bitcoin

为什么选择比特币?

比特币是所有加密技术的领头羊,是最受欢迎的区块链,拥有最大的市值,并且大多数区块链开发人员都知道其工作原理(因此更容易理解Rosetta如何在其他区块链上实现)。

另一方面,比特币的参考实现(称为比特币核心 )并未为集成商想要的许多功能提供本地支持。无法查询所有帐户的帐户余额和/或UTXO,无法将预处理的块提供给调用者,这样他们就不需要获取所有输入来解析交易,也无需在不将私钥导入节点的情况下构造交易(对于从未在线使用私钥的用户来说不可行)。通常,这些缺失的功能会促使集成商运行某种附加的“索引”软件,并实现自己的库来处理事务构造

rosetta-bitcoin提供对所有这些功能的访问,默认情况下无需配置,并且可以使用单个命令启动。此外,rosetta-bitcoin仅通过与Bitcoin Core的RPC交互来启用这些功能,因此我们无需维护Bitcoin Core的分支即可启用此新功能和轻松配置!

Rosetta API刷新器

rosetta-bitcoin实现了Rosetta API的两个核心组件: Data APIConstruction API 。这些组件共同提供对比特币的通用读写访问 。我们在下面提供了一些图表,概述了任何Rosetta API实施支持的特定端点。如果您有兴趣在实现的基础上进行构建,建议您使用rosetta-sdk-go (将这些流抽象到Golang函数后面)。

数据API包含用于“获取有关区块链信息”的所有端点。我们可以获得实现支持的网络 (如果区块链支持分片或如果它是通向多个网络的网关,则可能大于1), 每个网络上支持的操作类型以及每个网络 的状态

Data API还允许获取任何区块的内容获取 区块中 的特定交易 ,以及获取区块中存在的任何帐户的余额 。 Rosetta验证工具可确保通过块操作为任何帐户计算的余额等于节点返回的余额(通常称为“对帐”)。

最后,Data API允许获取所有内存池事务,获取任何特定的内存池事务 。这对于希望监视广播状态并在链上确认任何存入之前检查入金的集成商很有用。

尽管Data API提供了以标准格式从区块链读取数据的功能,但是Construction API使开发人员能够以标准格式写入区块链(即构造交易)。为了满足严格的安全标准,期望实现是无状态的,完全脱机运行,并支持分离的密钥生成和签名。我们可以从公钥中获取地址 (在不需要链上起源的区块链上)。

一般而言,构建交易时,通常无法完全指定结果或链上可能出现的内容(例如:构建尝试使用“快速贷款”的交易 )。我们将操作集合称为“交易意图”(通常是链上交易中所有操作的子集)。在高层次上,使用Construction API构造事务需要创建“意图”,收集使用“意图”创建事务所需的元数据,从负责“意图”的帐户中签名有效负载,并广播创建的事务。在尝试签署或广播交易之前,我们先确认我们构建的交易具有开始构建流程时最初提供的“意图”。您可以在下图中看到整个构建流程:

一旦我们进行了签名交易(执行我们选择的“意图”),我们就可以计算其特定于网络的哈希并进行广播

这个怎么运作

我们在开发Rosetta比特币时优化了包的重复使用。如果可以使用rosetta-sdk-go的现有软件包来完成,我们将使用它。在基准测试和优化Rosetta比特币的过程中,这导致了上游的一些重大性能改进。

我们使用Bitcoin Core来同步块/广播事务,使用syncer包摄取这些块,使用存储包存储处理后的块,并使用服务器包中的服务包来处理Rosetta API请求(使用存储包缓存的数据)。您可以在下面找到此架构的高级视图:

要实现Rosetta API / account / balance端点 ,我们必须构建一个提供原子平衡查询的UTXO索引器。从这个意义上说,“原子”意味着我们可以在单个RPC调用中使用有效的块索引和块哈希来获得帐户的余额。使用我们的Rosetta Bitcoin实现,您不再需要运行单独的索引器!

我们实施并发块提取以加快块同步,并在提取块以节省空间后自动修剪以从Bitcoin Core中删除块。并发块提取允许我们在等待最近填充的块保存(使我们的存储资源处于繁忙状态)的同时,在当前正在处理的块之前填充多个块。因为我们将所有提取的块存储在我们自己的存储缓存中,所以我们不需要将重复的数据保留在Bitcoin Core的数据库中。

最后但并非最不重要的一点是,我们实现了从任何SegWit-Bech32地址发送的无状态,离线,基于曲线的事务构造。我们选择仅支持从SegWit-Bech32地址发送,以最大程度地降低第一版的复杂性(此处有许多新的动态部分)。我们期待审查添加MultiSig,Lightning和其他地址支持的社区贡献。

试试看

讲够了,给我看看代码!本节将引导您构建Rosetta比特币,启动Rosetta比特币,与Rosetta比特币进行交互以及测试Rosetta比特币。要完成以下步骤,您需要处于满足rosetta-bitcoin系统要求的计算机上,并且必须安装Docker

首先,我们需要下载预先构建的rosetta-bitcoin Docker映像(保存为tag Rosetta-bitcoin:latest):

 curl -sSfL https://raw.githubusercontent.com/coinbase/rosetta-bitcoin/master/install.sh | sh -s 

接下来,我们需要使用下载的映像启动一个容器(该容器以分离模式启动):

 docker run -d --rm --ulimit“ nofile = 100000:100000” -v“ $(pwd)/ bitcoin-data:/ data” -e“ MODE = ONLINE” -e“ NETWORK = TESTNET” -e“ PORT = 8080“ -p 8080:8080 -p 18333:18333罗塞塔比特币:最新

启动容器后,您将在终端上看到一个标识(即Docker容器ID)。要从此正在运行的容器查看日志,应运行:

码头工人日志--tail 100 -f <container_id> 

为了确保一切正常,让我们向当前网络状态发出cURL请求(您可能需要等待几分钟,节点才能开始同步):

 curl --request POST'http:// localhost:8080 / network / status'\ 
 --header'接受:application / json'\ 
 --header'内容类型:application / json'\ 
 --data-raw'{ 
 “ network_identifier”:{ 
 “ blockchain”:“ Bitcoin”, 
 “ network”:“ Testnet3” 
 } 
 }'| q 

现在,Rosetta比特币正在运行,乐趣就可以真正开始了!接下来,我们安装rosetta-cli ,这是用于与Rosetta API实现进行交互并对其进行测试的CLI工具(将在./bin/rosetta-cli中安装):

 curl -sSfL https://raw.githubusercontent.com/coinbase/rosetta-cli/master/scripts/install.sh | sh -s 

我们还需要下载配置文件以与rosetta-bitcoin进行交互:

 curl -sSfL https://raw.githubusercontent.com/coinbase/rosetta-bitcoin/master/rosetta-cli-conf/bitcoin_testnet.json -o bitcoin_testnet.json 

我们可以查找当前的同步状态:

 rosetta-cli视图:网络-配置文件bitcoin_testnet.json 

我们可以查找任何已同步块的内容(确保查找的索引小于以同步状态返回的当前索引返回的索引):

 rosetta-cli视图:块<块索引>-配置文件bitcoin_testnet.json 

我们可以使用`check:data`命令来验证Data API端点:

 rosetta-cli检查:数据-配置文件bitcoin_testnet.json 

最后,我们可以使用`check:construction`命令来验证Construction API端点:

 rosetta-cli检查:构造-配置文件bitcoin_testnet.json 

当您玩完了Rosetta-bitcoin后,请运行以下命令将其关闭:

码头工人杀--signal = 2 <container_id> 

未来的工作

  • 在testnet和mainnet上发布同步速度,存储使用率和负载测试的基准测试
  • 实现Rosetta API / mempool / transaction端点
  • 使用rosetta-cli将CI测试添加到存储库(可能在regtest网络上)
  • 支持多签名交易多阶段交易构建
  • 编写一个钱包程序包(使用rosetta-sdk-go原语)来协调任何Rosetta实现的事务构造(您可以在此处找到有关此工作的一些早期工作)

在Coinbase工作

我们正在积极招聘充满激情的开发人员加入Crypto团队,并且开发人员关系负责人负责Rosetta项目。 如果您有兴趣帮助构建用于与区块链交互的通用语言, Coinbase正在招聘。


罗塞塔比特币简介:罗塞塔API的Coinbase比特币实现最初发表在《 Coinbase Blog on Medium》上,人们通过强调和回应这个故事来继续对话。

Previous:MXC抹茶关于Perpetual Protocol(PERP)和WHALE(WHALE)上线考核区的公告
Media
No Data
Quotes
Choose the mostList of gainersContinuous riseMost followed
#
Name
Fiat price
Today's gain