GitHub 图像, (中文(简体) ), 编导 Devs Discord, (中文(简体) ), 开发者门户
@blooo/hw-app-acre (英语)
Ledger 硬件钱包 Acre JavaScript 绑定. 也支持许多代币.
您是否将 Ledger 支持添加到您的软件钱包中 ?
您可能正在使用这个软件包与 Acre Nano App 通信 .
为了顺利和迅速地实现一体化:
API 密码
目录
- 毕生灵
- 亩
- 占地面积
- 脱钩
- 面积
- 创建交易日志
- 地址格式
- Acre 撤回数据
- 账户类型
- 单键账户
- 获取 Taproot 输出键
- 用户
- 客户端命令解释器
- 默克尔化Psbt
- 默克勒语Name
- 默克勒地图
- 钱包政策
- 提取
- 最后确定
- 已清除 投入
- 写入 Push
- 静态V2
- 序列化交易输出
- 签名P2SH 切换
- 交易投入
- 交易产出
- 交易
毕生灵
BIP32 比特币钱包的路径处理
此文件提供了处理 BIP32 路径的功能, 用于分级确定(HD)钱包. 它包括从不同格式转换BIP32路径的功能, 从扩展公钥(xpubs)中提取组件,并操纵路径元素.
亩
Acre应用API.
参数
transport用于通信的运输层.scrambleKey此参数被贬值而不再需要.currency要使用的货币,默认为"比特币".
实例
import Acre from "@blooo/hw-app-acre:";
const acre = new Acre({ transport, currency: "bitcoin" });
获取WalletXpub
获得带有分类器的 XPUB
参数
arg{路径 : 字符串, xpubVersion : (中文(简体) ) 编号{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢 衍生参数*路径:账户水平的BIP 32路径. (例如: 引出路径84'/0'/0'沿着purpose' / coin_type' / account'标准,目的=84,硬币 类型=0,账户=0)- xpubVersion:所使用硬币的XPUBVersion. (指分类账/包装/催眠资产/弧/克) xPUBVersion 值(如果需要)
获取Wallet 公钥
参数
-
path字符串 a BIP 32路径(即:purpose’ / coin_type’ / account’ / change / address_index标准) -
opts{验证: 布尔*,格式: 地址格式{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? -
options具有可选这些字段的对象:* 验证( 布尔) 是否要求用户确认设备上的地址-
格式("legacy""legacy""p2sh"""bech32""bech32m""cashaddr"),用于使用不同的比特币地址来取材. 编号 通常使用:* 有44'路径的遗留格式
-
有49'路径的 p2sh 格式
-
bech32 有 84' 路径的格式
-
bech32m 有 86' 路径的格式
-
比特币现金
-
实例
acre.getWalletPublicKey("44'/0'/0'/0/0").then(o => o.bitcoinAddress)
acre.getWalletPublicKey("49'/0'/0'/0/0", { format: "p2sh" }).then(o => o.bitcoinAddress)
回返 答应公共钥匙: 字符串比特币地址: 字符串,链码 : 字符串}>
符号
您可以按照 Bitcoin 签名格式签名信件, 并检索 v, r, s 给定信件和账户的 BIP 32 签名路径 .
参数
实例
acre.signMessage("44'/60'/0'/0'/0", Buffer.from("test").toString("hex")).then(function(result) {
var v = result['v'] + 27 + 4;
var signature = Buffer.from(v.toString(16) + result['r'] + result['s'], 'hex').toString('base64');
console.log("Signature : " + signature);
}).catch(function(ex) {console.log(ex);});
回返 答应校对:soup 编号时,r: 字符串时,s: 字符串}>
创建支付交易
要签名涉及标准( P2PKH) 输入的交易, 请使用以下参数调用创建 Transferction
参数
arg创建交易日志inputs是一个[交易,输出 index,可选赎回脚本,可选序列]的数组,其中 * 交易是这个 UTXO 先前计算的交易对象- 输出 index 是用于输入此 UTXO 的交易中的输出( 从 0 计算)
- 赎回脚本是可选的赎回脚本,用于消耗隔离的目击输入
- 序列是用于此输入的序列号( 当使用 RBF 时), 或非存在
associatedKeysets是指向每个UTXO所使用的私有密钥路径的 BIP 32 路径数组changePath是一个可选的 BIP 32 路径, 指向用于计算更改地址的公钥路径outputScriptHex是交易中要签名的十六进制序列化输出,包括引导 vararg voutCountlockTime是要签名的交易的可选锁定时间, 或默认( 0)sigHashType是要签名的交易的散列类型,或默认(全部)segwit是一个可选的布尔表示wether是否使用 segwit。 这包括被包裹的Segwit.additionals用于本地 segwit 输出的附加选项列表 * “ bech32 ”- “bech32m”用于支出 segwit v1+ 产出
- "abc" 对于 bch
- btg的"黄金"
- 被"废"了
- zcash 的“ zcash ”
- 使用 BIPxxx 的“ bipxxx ”
- 用于表示zec交易的"树苗"支持树苗(将设定在419200区块上)
expiryHeight是 Zec 超冬/ 幼苗 Txs 的可选缓冲useTrustedInputForSegwit用于sigwit交易的信任输入。 如果应用版QQ 1. 4.0,这应该是真的.
实例
acre.createTransaction({
inputs: [ [tx1, 1] ],
associatedKeysets: ["0'/0/0"],
outputScriptHex: "01905f0100000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88ac"
}).then(res => ...);
签名P2SH 交易
要获得多签名( P2SH) 输入的签名, 请使用 flowlowing 参数呼号 P2SH Transaction async
参数
arg签名P2SH 切换inputs是[交易,输出 index,赎回脚本,可选序列]的数组,其中*交易是此UTXO之前计算的交易对象- 输出 index 是用于输入此 UTXO 的交易中的输出( 从 0 计算)
- 赎回脚本是与当前 P2SH 输入相关的强制赎回脚本
- 序列是用于此输入的序列号( 当使用 RBF 时), 或非存在
associatedKeysets是指向每个UTXO所使用的私有密钥路径的 BIP 32 路径数组outputScriptHex是交易中要签名的十六进制序列化输出lockTime是要签名的交易的可选锁定时间, 或默认( 0)sigHashType是要签名的交易的散列类型,或默认(全部)
实例
acre.signP2SHTransaction({
inputs: [ [tx, 1, "52210289b4a3ad52a919abd2bdd6920d8a6879b1e788c38aa76f0440a6f32a9f1996d02103a3393b1439d1693b063482c04bd40142db97bdf139eedd1b51ffb7070a37eac321030b9a409a1e476b0d5d17b804fcdb81cf30f9b99c6f3ae1178206e08bc500639853ae"] ],
associatedKeysets: ["0'/0/0"],
outputScriptHex: "01905f0100000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88ac"
}).then(result => ...);
交易
对于您交易中包含的每个UTXO,请从此UTXO中使用的交易原始序列版本创建交易对象.
参数
transactionHex字符串 原始十六进制序列化交易isSegwitSupported(单位:千美元)布尔 无效 未定义(中文(简体) ) 是布尔表示是否支持 segwit(可选,默认)false(中文(简体) )hasExtraData是布尔语( komodo、 zencash 和 zcash 在其交易中包含额外数据, 其他人不包含) (可选, 默认)false(中文(简体) )additionals阵列<字符串> 翻译: 添加选项列表( 可选, 默认)[](中文(简体) )
实例
const tx1 = acre.splitTransaction("01000000014ea60aeac5252c14291d428915bd7ccd1bfc4af009f4d4dc57ae597ed0420b71010000008a47304402201f36a12c240dbf9e566bc04321050b1984cd6eaf6caee8f02bb0bfec08e3354b022012ee2aeadcbbfd1e92959f57c15c1c6debb757b798451b104665aa3010569b49014104090b15bde569386734abf2a2b99f9ca6a50656627e77de663ca7325702769986cf26cc9dd7fdea0af432c8e2becc867c932e1b9dd742f2a108997c2252e2bdebffffffff0281b72e00000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88aca0860100000000001976a9144533f5fb9b4817f713c48f0bfe96b9f50c476c9b88ac00000000");
回返 交易 交易对象从原始十六进制交易中除去
序列化交易输出
将交易输出顺序为十六进制
参数
t交易
实例
const tx1 = acre.splitTransaction("01000000014ea60aeac5252c14291d428915bd7ccd1bfc4af009f4d4dc57ae597ed0420b71010000008a47304402201f36a12c240dbf9e566bc04321050b1984cd6eaf6caee8f02bb0bfec08e3354b022012ee2aeadcbbfd1e92959f57c15c1c6debb757b798451b104665aa3010569b49014104090b15bde569386734abf2a2b99f9ca6a50656627e77de663ca7325702769986cf26cc9dd7fdea0af432c8e2becc867c932e1b9dd742f2a108997c2252e2bdebffffffff0281b72e00000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88aca0860100000000001976a9144533f5fb9b4817f713c48f0bfe96b9f50c476c9b88ac00000000");
const outputScript = acre.serializeTransactionOutputs(tx1).toString('hex');
回返 缓冲
获得信任输入
信任的输入是需要签名的 UTXO 的散列 对于遗产交易,应用程序有一些APDU流 来检查UTXO的金额, 通过解析创建此 UTXO 的交易
参数
获得信任的输入BIP143
信任输入是需要签名的UTXO的散列. BIP143用于Segwit输入.
参数
回返 字符串
签名退出
用私人密钥签名 Acre 退出信件 根据比特币签名格式提供的导出路径 并返回 v, r, s.
参数
-
$0{路径 : 字符串,退出数据 : Acre 撤回数据{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢$0.path$0.withdrawalData
实例
var withdrawalData = {
to: "0xc14972DC5a4443E4f5e89E3655BE48Ee95A795aB",
value: "0x0",
data: "0xcae9ca510000000000000000000000000e781e9d538895ee99bd6e9bf28664942beff32f00000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001000000000000000000000000006083Bde64CCBF08470a1a0dAa9a0281B4951be7C4b5e4623765ec95cfa6e261406d5c446012eff9300000000000000000000000008dcc842b8ed75efe1f222ebdc22d1b06ef35efff6469f708057266816f0595200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000587f579c500000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000001a1976a914c8e9edf5e915c0482b1b236fc917011a4b943e6e88ac000000000000",
operation: "0",
safeTxGas: "0x0",
baseGas: "0x0",
gasPrice: "0x0",
gasToken: "0x0000000000000000000000000000000000000000",
refundReceiver: "0x0000000000000000000000000000000000000000",
nonce: "0xC",
};
acre.signWithdrawal({"m/44'/0'/0'/0/0", withdrawalData}).then(function(result) {
var v = result['v'] + 27 + 4;
var signature = Buffer.from(v.toString(16) + result['r'] + result['s'], 'hex').toString('base64');
console.log("Signature : " + signature);
}).catch(function(ex) {console.log(ex);});
符号ERC4361
用私钥在 Ethereum 签名( ERC-4361) 中签名 根据比特币签名格式提供的导出路径 并返回 v, r, s.
参数
实例
acre.signERC4361Message("44'/60'/0'/0'/0", Buffer.from("Example ERC-4361 message").toString("hex")).then(function(result) {
const v = result['v'] + 27 + 4;
const signature = Buffer.from(v.toString(16) + result['r'] + result['s'], 'hex').toString('base64');
console.log("Signature : " + signature);
}).catch(function(ex) {console.log(ex);});
回返 答应校对:soup 编号时,r: 字符串时,s: 字符串}>
说明: 消息限制在最多128个字符行.
回返 答应校对:soup 编号时,r: 字符串时,s: 字符串}>
占地面积
此类执行与 AcreBtcOld 相同的接口( 原为 名称为 Btc ),但与 Acre 从1.0.0 版本的硬件应用交互 它使用与比特币应用软件版本2.1.0+相同的APDU协议. 本协议在下列地点记录在案: https://github.com/blooo-io/app-acre/blob/develop/doc/acre.md 互联网档案馆的存檔,存档日期2014-12-22
由于接口必须与 AcreBtcOld 兼容,所以方法 这班人很笨手笨脚的 因为需要适应传统 将数据输入PSBT进程.
获取WalletXpub
这是一种允许用户在标准路径上获得xpub的新方法. 标准路径描述于 https://github.com/blooo-io/app-acre/blob/develop/doc/acre.md#描述
这归结为路径(比特币为N=0,测试网为N=1) : M/44'/N'/x'/** M/48'/N'/x'/y'/** M/49'/N'/x'/** M/84'/N'/x'/** M/86'/N'/x'/**
该方法之所以被添加,是因为硬件app v2+中增加了安全性. 这个 新硬件应用将允许导出任何 xpub 至并包含 标准衍生路径最深的硬化键,而旧的应用程序 将允许导出任何密钥.
这给这个班级的来电者造成了一个问题,他们只是 让Wallet PublicKey () 调用, 这意味着他们必须调用 xpub 他们自己:
假设此类的用户想要在标准上创建一个账户 xpub 路径, M/44'/0'/Z'。 用户必须获得父密钥指纹(见BIP32) 要求母键 M/44'/0'。 新的应用不允许,因为 它只允许输出最深的硬化路径。 所以选择是 允许从应用程序中请求 M/44'/0',或添加新函数 "GetWalletXpub"("Get WalletXpub").
我们选择添加一个新的功能,这可以大大简化客户端代码.
参数
-
$0{路径 : 字符串, xpubVersion : (中文(简体) ) 编号{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢$0.path$0.xpubVersion
获取Wallet 公钥
这种方法返回公钥、比特币地址和链码 为特定的导出路径.
限制 : 如果路径不是标准路径的叶节点,则地址 将是空字符串“ ”, 详情请参见 this. getWalletAddress () .
参数
path字符串opts{验证: 布尔*,格式: 地址格式{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
回返 答应公共钥匙: 字符串比特币地址: 字符串,链码 : 字符串}>
创建支付交易
构建并签署交易。 参见 Acre.cre.createPayment Transaction for 详细介绍如何使用这种方法.
此方法会将遗留参数转换为 最后签字并敲定的 psbt 和提取的完全签字 交易返回.
参数
arg创建交易日志
符号
用私有密钥签名任意的十六进制格式信件 根据比特币签名格式提供的导出路径 并返回 v, r, s.
参数
-
$0{路径 : 字符串,退出数据 : Acre 撤回数据{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢$0.path$0.withdrawalData
回返 答应校对:soup 编号时,r: 字符串时,s: 字符串}>
签名退出
用私人密钥签名 Acre 退出信件 根据比特币签名格式提供的导出路径 并返回 v, r, s.
参数
-
$0{路径 : 字符串,退出数据 : Acre 撤回数据{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢$0.path$0.withdrawalData
回返 答应校对:soup 编号时,r: 字符串时,s: 字符串}>
符号ERC4361
签名 ERC-4361 (与 Ethereum 一同签名) 格式化消息, 并使用私有密钥 根据比特币签名格式提供的导出路径 并返回 v, r, s.
参数
-
$0{路径 : 字符串,信息Hex: 字符串{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢$0.pathBIP32 用于签名的密钥的导出路径$0.messageHexERC-4361 格式化信件,以十六进制格式签名
回返 答应校对:soup 编号时,r: 字符串时,s: 字符串}>
脱钩
此函数返回基于地址格式的描述模板 . 见 https://github.com/blooo-io/app-acre/blob/develop/doc/wallet.md 互联网档案馆的存檔,存档日期2013-12-22 详细情况 比特币描述模板.
参数
-
path字符串 a BIP 32路径 -
opts{验证: 布尔*,格式: 地址格式{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? -
options带有可选这些字段的对象 : * 校验( boolean) 将要求用户确认设备上的地址-
格式("legacy""legacy""p2sh"""bech32""bech32m""cashaddr"),用于使用不同的比特币地址来取材. 编号 通常使用:* 有44'路径的遗留格式
-
有49'路径的 p2sh 格式
-
bech32 有 84' 路径的格式
-
bech32m 有 86' 路径的格式
-
比特币现金
-
实例
acre.getWalletPublicKey("44'/0'/0'/0/0").then(o => o.bitcoinAddress)
acre.getWalletPublicKey("49'/0'/0'/0/0", { format: "p2sh" }).then(o => o.bitcoinAddress)
回返 答应公共钥匙: 字符串比特币地址: 字符串,链码 : 字符串}>
创建支付交易
要签名涉及标准( P2PKH) 输入的交易, 请使用以下参数调用创建 Transferction
参数
arg创建交易日志inputs是一个[交易,输出 index,可选赎回脚本,可选序列]的数组,其中 * 交易是这个 UTXO 先前计算的交易对象- 输出 index 是用于输入此 UTXO 的交易中的输出( 从 0 计算)
- 赎回脚本是可选的赎回脚本,用于消耗隔离的目击输入
- 序列是用于此输入的序列号( 当使用 RBF 时), 或非存在
associatedKeysets是指向每个UTXO所使用的私有密钥路径的 BIP 32 路径数组changePath是一个可选的 BIP 32 路径, 指向用于计算更改地址的公钥路径outputScriptHex是交易中要签名的十六进制序列化输出lockTime是要签名的交易的可选锁定时间, 或默认( 0)sigHashType是要签名的交易的散列类型,或默认(全部)segwit是可选布尔表示是否使用 segwitadditionals用于本地 segwit 输出的附加选项列表 * “ bech32 ”- "abc" 对于 bch
- btg的"黄金"
- 被"废"了
- zcash 的“ zcash ”
- 使用 BIPxxx 的“ bipxxx ”
- 用于表示zec交易的"树苗"支持树苗(将设定在419200区块上)
expiryHeight是 Zec 超冬/ 幼苗 Txs 的可选缓冲useTrustedInputForSegwit用于 sigwit 交易的信任输入
实例
acre.createTransaction({
inputs: [ [tx1, 1] ],
associatedKeysets: ["0'/0/0"],
outputScriptHex: "01905f0100000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88ac"
}).then(res => ...);
创建交易日志
类型 : {输入: 阵列< [交易, (中文(简体) ), 编号, (中文(简体) )字符串 无效 未定义页:1编号 无效 未定义>, 相关关键元件: 阵列<字符串>, 更改页 : 字符串*,输出脚本Hex: 字符串,锁定时间 : 编号? ,西格哈什Type: 编号♪ 笨蛋: 布尔*,补充: 阵列<字符串>, 过期高度 : 缓冲*,使用信任的输入ForSegwit: 布尔,在DeviceStreaming上显示:函数(arg0:{进步: 编号,共计: 编号,索引: 编号} : 无效? , 在 DeviceSignature requestd: 函数 (: 无效? ) , 在 DeviceSignatureGranted: 函数 (: 无效? )
属性
inputs阵列< [交易, (中文(简体) ), 编号, (中文(简体) )字符串 无效 未定义页:1编号 无效 未定义〔)]〕associatedKeysets阵列<字符串> 翻译:changePath字符串? 吗?outputScriptHex字符串lockTime编号? 吗?sigHashType编号? 吗?segwit布尔? 吗?additionals阵列<字符串> 翻译:expiryHeight缓冲? 吗?useTrustedInputForSegwit布尔? 吗?onDeviceStreaming函数( arg0: { 进度: 编号,共计: 编号,索引: 编号虚空?onDeviceSignatureRequested函数 (): 无效?onDeviceSignatureGranted函数 (): 无效?
Acre 撤回数据
Acre VistrawalData 类型包含以下与退出交易相关的属性,其中每个属性为十六进制字符串.
属性
to字符串 (十六进制)value字符串 (十六进制)data字符串 (十六进制)operation字符串 (十六进制)safeTxGas字符串 (十六进制)baseGas字符串 (十六进制)gasPrice字符串 (十六进制)gasToken字符串 (十六进制)refundReceiver字符串 (十六进制)nonce字符串 (十六进制)
地址格式
地址格式是遗留下来的 | p2sh | bech32 | bech32m | cashaddr
类型 : ("legacy" | "p2sh" | "bech32" | "bech32m" | "cashaddr"(中文(简体) )
账户类型
包含账户类型之间的差异, 例如 p2wpkh, p2wpkh Wrapped, p2tr. (原始内容存档于2017-09-29).
条件
从公钥列表中生成脚本PubKey(输出脚本). 如果有的话 p2sh 赎回脚本或 p2wsh 见证 脚本需要它也会被设定在 返回的支出条件.
公用钥匙是33字节 ecdsa 压缩公用钥匙.
参数
回返 支出状况
输入
将 psbt 与账户类型特定数据填入输入.
参数
i编号 填充输入地图的索引inputTx(单位:千美元)缓冲 | 未定义(中文(简体) ) 包含已用产出的全部交易 。 这可能 被省略为自来水.spentOutput废产出 已用产出的金额和支出状况pubkeys阵列<缓冲> 翻译: 参与输入的33字节 ecdsa 压缩公钥pathElems阵列<阵列<编号>> 与阴道对应的路径,顺序相同.
回返 无效
设置输出
将 psbt 与一个输出的账户类型特定数据相匹配。 这是典型的 变动产出和其他产出 被花费了.
参数
i编号 要填充的输出地图索引cond支出状况 该产出的支出条件pubkeys阵列<缓冲> 翻译: 此输出涉及的33 字节 ecdsa 压缩公钥paths阵列<阵列<编号>> 与阴道对应的路径,顺序相同.
回返 无效
获取描述
返回该账户类型的描述模板。 目前仅 默认描述板是允许的, 但可以在 未来。 关于描述符的更多信息, 请参看类钱包政策 模板.
回返 默认描述图
单键账户
扩展基账
单个签名账户的超級. 这会确保公交车 方法参数中的数组和路径数组包含完全一个元素 并称为一种抽象的方法来进行实际的工作.
获取 Taproot 输出键
从内部密钥计算出自根输出密钥 。 此输出密钥将 在自来水输出中用作目击程序。 内部密钥有微调 根据BIP341中的建议: https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki#cite ref-22-0. 互联网档案馆的存檔,存档日期2011-12-2
参数
internalPubkey缓冲 32 字节 x 唯一的自带根内部密钥
回返 缓冲 输出密钥
用户
此类封装了所记录的APDU协议 https://github.com/blooo-io/app-acre/blob/develop/doc/acre.md 互联网档案馆的存檔,存档日期2014-12-22
参数
transport运输
客户端命令解释器
此类将发送来自硬件设备的客户端命令 适当的客户端命令执行。 这些客户端的命令 通常请求从 merkle 树或 merkelized 地图中获取数据 .
客户端Command 解释器通过添加 merkle 树和 它应该能够为硬件设备服务。 这个班 完全不懂它掌握的数据的语义 为默克勒数据服务。 它甚至不知道这是什么背景 执行, ie SignPsbt, 获取WalletAddress等.
如果命令向客户端显示结果, 如 signPsbt 所做的, 生成 数据在命令完成后可以通过调用 get Yielded () 访问, 他们将依自己进球的顺序返回.
参数
progressCallback函数 (): 无效
默克尔化Psbt
扩展 PsbtV2
此类通过对不同的多维度的多维度来计算 PSBTv2 psbt 地图。 用于交易签名过程中, 硬件应用程序可以从中请求 psbt 的特定部分 客户端代码,并确保响应数据实际上属于psbt. 原因是应用程序可用的内存有限, 所以它不能总是存储完整的 psbt 在记忆.
签署过程记录于 https://github.com/blooo-io/app-acre/blob/develop/doc/acre.md#sign psbt (英语)
参数
psbt静态V2
默克勒语Name
这个班级执行Ledger Acre应用软件使用的Merkle树, 记录在 https://github.com/blooo-io/app-acre/blob/develop/doc/merkle.md 互联网档案馆的存檔,存档日期2013-12-22
参数
默克勒地图
执行“默克尔化地图”,记录在 https://github.com/blooo-io/app-acre/blob/develop/doc/merkle.md#merkleized-maps (中文(简体) )
由两棵树组成,其中一棵是用于 一个地图和一个用于同一地图的值,因此两个墨克尔 树有相同的形状。 承诺是数字要素 键的正弦根后接 值为 merkle 根.
参数
钱包政策
Bitcon 硬件应用程序使用类似描述符的东西来描述 如何从密钥构造输出脚本。 “Wallet政策”包括: 和"密钥"列表。 关键是 序列化的 BIP32 扩展公用密钥,并添加一些衍生路径 资料。 记录如下: https://github.com/blooo-io/app-acre/blob/develop/doc/wallet.md 互联网档案馆的存檔,存档日期2013-12-22
参数
descriptorTemplate默认描述图key字符串
提取
此执行 BIP370 (PSBTv2) 的“ 交易提取器” 角色 https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki#交易-摘录器) (中文(简体) ). 不过 bIP174部分记录了该角色(PSBTv0) https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#交易-摘录器) (中文(简体) ).
参数
psbt静态V2
回返 缓冲
最后确定
这大致实现了BIP370(PSBTv2)的"输入定稿器"角色 https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki (英语)) (中文(简体) ). 不过 bIP174(PSBTv0)中记录了该角色 https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki 互联网档案馆的存檔,存档日期2014-10-04) (中文(简体) ).
验证所有输入都有一个签名, 并设置输入 FinalScript Witness 和/或输入 FinalScriptSig 取决于已用产出的类型。 干净 字段,部分签名,还原脚本 进取道.
参数
psbt静态V2 带有所有签名的 psbt 添加为部分 sigs 通过 PSBT IN PARTIAL SIG 或 PSBT IN TAP KEY SIG
回返 无效
已清除 投入
删除 psbt 中不再有阴性字段.
注意,Spec没有说任何关于去除接地的字段 比如PSBT OUT BIP32 DERIVATION PATH等,所以我们保留它们 却不知道为什么 我想我们也应该去除它们.
参数
写入 Push
写入脚本将操作推到 buf, 它看起来不同 根据数据大小。 见 https://en.bitcoin.it/wiki/Script#Constants (中文(简体) )
参数
buf缓冲器 要写入的缓冲器data缓冲 缓冲器被推.
静态V2
部分执行已签名的 Bitcoin 交易版本 2, BIP370, 如 记录 https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki (英语) 财务报告和审定财务报表 https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki 互联网档案馆的存檔,存档日期2014-10-04
Psbt是一个数据结构,可以携带与 a 相关的所有相关信息 在签名过程的所有阶段进行交易。 从建造 未签名交易取出最后的序列交易准备 广播.
这种实施仅限于分类账中需要的 任务,这意味着对多相或自带脚本等特性的支持 未执行路径支出。 具体来说,它支持p2pkh, p2wpkhWrapped InP2sh, p2wpkh 和 p2tr 密钥路径开支.
这个课是故意哑的,所以很容易增加支持 未来需要的压缩字段.
序列化交易输出
参数
-
$0交易$0.outputs
实例
const tx1 = acre.splitTransaction("01000000014ea60aeac5252c14291d428915bd7ccd1bfc4af009f4d4dc57ae597ed0420b71010000008a47304402201f36a12c240dbf9e566bc04321050b1984cd6eaf6caee8f02bb0bfec08e3354b022012ee2aeadcbbfd1e92959f57c15c1c6debb757b798451b104665aa3010569b49014104090b15bde569386734abf2a2b99f9ca6a50656627e77de663ca7325702769986cf26cc9dd7fdea0af432c8e2becc867c932e1b9dd742f2a108997c2252e2bdebffffffff0281b72e00000000001976a91472a5d75c8d2d0565b656a5232703b167d50d5a2b88aca0860100000000001976a9144533f5fb9b4817f713c48f0bfe96b9f50c476c9b88ac00000000");
const outputScript = acre.serializeTransactionOutputs(tx1).toString('hex');
回返 缓冲
签名P2SH 切换
类型 : {输入: 阵列< [交易, (中文(简体) ), 编号, (中文(简体) )字符串 无效 未定义页:1编号 无效 未定义>, 相关关键元件: 阵列<字符串>, 输出脚本Hex: 字符串,锁定时间 : 编号? ,西格哈什Type: 编号♪ 笨蛋: 布尔*,交易维斯顿: 编号{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢
属性
inputs阵列< [交易, (中文(简体) ), 编号, (中文(简体) )字符串 无效 未定义页:1编号 无效 未定义〔)]〕associatedKeysets阵列<字符串> 翻译:outputScriptHex字符串lockTime编号? 吗?sigHashType编号? 吗?segwit布尔? 吗?transactionVersion编号? 吗?