탭루트: 확실한 베팅

요약: 이번 보고서에서 100x 그룹 지원금을 수여한 제레미 루빈 개발자는 탭루트가 특정일까지 활성화하지 않았을 경우, 코인 손실을 검증 가능하도록 약속하는데 사용될 수 있는 스마트 계약을 소개했습니다. 루빈 개발자는 이러한베팅을 실행하기 위하여 비트코인에 스마트 계약을 사용한 새로우면서도 흥미로운 방법론을 설명합니다. 하지만, 비트멕스 리서치팀의 경우, 이러한 한정된 종류의 베팅을 실행하는 것은 비트코인의 소프트포크 활성화 방법론의 명백한 명확한 문제를 해결하는데 큰 역할을 하지는 못한다고 생각합니다.

This image has an empty alt attribute; its file name is tap-947x1024.jpg
 
 

탭루트 활성화 의도 신호에 관한 스마트 계약 

요즘 세상과 담을 쌓고 사는 경우가 아니라면, 많은 분들은 탭루트는 비트코인 네트워크에 근시일내 도입될 소프트포크 업그레이드를 위해 현재 제안된 방식이라고 들어봤을 것입니다. 탭루트가 비트코인 네트워크 개선을 위한 훌륭한 방안이라고 대부분의 사람들이 동의를 합니다. 하지만, 탭루트 도입을 통한 비트코인 네트워크 업그레이드를 어떻게 조율하여 활성화할 것인지에 대하여 많은 반론이 있습니다.1

확률적 소프트포크 (Probabilistic Soft Forks)에 관한 저의 발표를 접해 보셨던 분들이라면, 제가 게임 안에서 스킨을 필요로 하는 활성화 메커니즘의 팬이라는 것을 알고 계실 것입니다. 이번 글에서 UASF(User Activated Soft Fork) 내에서 탭루트가 활성화되지 않았을 경우, 비트코인 홀더들이 코인 손실을 검증 가능하게 약속할 수 있는지를2 설명하고자 합니다. 이는 탭루트를 강화할 수 있는 체인만을 인식하기 위한 약속을 정직한 신호(Honest Signals) 보내는 이기도 합니다. 

이번 보고서는 두 가지 목적을 가지고 있습니다. 우선 저는 제가 개발 중인 비트코인 스마트 계약 프로그램 언어인 사피오를 자랑하고 싶었습니다. 사피오는 비트코인 확장을 위한 BIP-119 CheckTemplateVerify (CTV)와 함께 사용하도록 기획되었지만, 스마트 계약의 구속력에 주된 영향을 주지 않고 자가 사전서명 거래를 사용할 수 있음에 따라 CTV가 특히 작동하지 않아도 됩니다. 곧 모두 사용할 수 있는 사피오를 공개할 예정이지만, 만약 사전에 사피오를 사용해보고 싶다면 저에게 트위터 개인 메시지(@JeremyRubin)를 보내시기 바랍니다.

사용자가 생성한 값비싼 신호에 관한 아이디어는 지캐시 공동 창업자 중 한 명인 마다스 버자(Madars Virza)와의 대화에서 시작되었습니다. 특히, 버자 창업자는 더 긴 창에서 베팅을 펼치는 방법으로 탭루트 활성화 여부에 대하여 2016개의 블록 BIP8/BIP8 신호 구간으로 정렬된 것처럼 누군가가 베팅을 연이어서 자동 배치할 수 있도록 하는 스마트 계약을 만들 수 있는지 저에게 물었습니다. 만약 여러분이 정확한 활성화 구간을 확신할 수 없다면 더 긴 창에서 베팅을 펼쳐 놓음으로써, 전체 리스크를 헷지할 수 있습니다. 이를 통해 더 흥미로운 스마트 계약을 만들 수 있기도 합니다. 아래 다이어그램은 우리가 실현하고자 했다 로직의 상위 수준 개요를 보여주고 있습니다.

This image has an empty alt attribute; its file name is diag-1024x473.jpg
 
 

버자 창업자가 저에게 텍스트 메시지를 보내고 10분 후, 저는 기능적 프로토타입을 다음날 아침에 다듬어서 정리하였습니다.

설명은 여기까지 하고 코드를 한 번 살펴보도록 하죠. 

/// Taproot Recurring Bet.
/// This data structure captures all the arguments required to build a contract.
#[derive(JsonSchema, Serialize, Deserialize, Clone)]
pub struct TapBet {
/// How much Bitcoin to release per period
#[schemars(with = "f64")]
#[serde(with = "bitcoin::util::amount::serde::as_btc")]
pub amount_per_time: Amount,
/// How much in fees to pay per cycle.
/// TODO: In theory, this could be zero, as miners could manually add such
/// transactions (which they topet a reward out of) to their mempools.
/// TODO: Optional, make cancellation path have a different feerate
#[schemars(with = "f64")]
#[serde(with = "bitcoin::util::amount::serde::as_btc")]
pub fees_per_time: Amount,
/// How frequently should we test to see if Taproot is active?
pub period: AnyRelTimeLock,
/// How long to wait to allow early-abort of the contract unfolding (should
/// be > period)
pub cancel_timeout: AnyRelTimeLock,
/// An externally generated Taproot script (not address) to send the funds to
pub taproot_script: Script,
/// An arbitrary bitcoin address to send the funds to on cancellation
pub cancel_to: bitcoin::Address,
}

/// This defines the interface for the TapBet Contract
impl Contract for TapBet {
/// The "next steps" that can happen for an instance of a TapBet
/// is either to:
/// - stop_expansion: return the funds safely to the creator because Taproot is active
/// - continue_expansion: take amount_per_time of the funds and send them to a taproot address.
/// > If taproot is active, the funds are safe in that key
/// > If taproot is not active, a miner may steal the funds
declare! {then, Self::stop_expansion, Self::continue_expansion}
/// you can ignore this line, it is only needed for an advanced Sapio feature
/// and will be able to be removed when a specific rust feature stabilizes.
declare! {non updatable}
}

/// The actual logic for each TapBet
impl TapBet {
/// The waiting period is over, sample if Taproot is active
guard! {period_over |s, ctx| { s.period.into() }}
then! {continue_expansion [Self::period_over] |s, ctx| {
// creates a new transaction template for the next step
// of this contract
let mut builder = ctx.template().set_label("continue_expansion".into());
// set the sequence validly
builder = builder.set_sequence(0, s.period.into())?;
// if we have sufficient funds, pay out to a taproot address now
if builder.ctx().funds() >= s.amount_per_time {
let mut range = AmountRange::new();
range.update_range(s.amount_per_time);
builder = builder.add_output(
s.amount_per_time,
&Compiled::from_script(s.taproot_script.clone(), Some(range), ctx.network)?,
None
)?;
}
// if we have funds remaining, make a recursive TapBet with the same
// parameters.
if builder.ctx().funds() >= s.fees_per_time {
let amt =
builder.ctx().funds() - s.fees_per_time;
if amt > Amount::from_sat(0) {
builder = builder.add_output(
amt,
s,
None
)?;
}
}
builder.into()
}}

/// The timeout period is over
guard! {timeout |s, ctx| { s.cancel_timeout.into() }}
then! {stop_expansion [Self::timeout] |s, ctx| {
let mut builder = ctx.template().set_label("stop_expansion".into());
builder = builder.set_sequence(0, s.cancel_timeout.into())?;
// Pay out to the original owner
if builder.ctx().funds() >= s.fees_per_time {
let amt = builder.ctx().funds() - s.fees_per_time;
if amt > Amount::from_sat(0) {
builder = builder.add_output(
amt,
&Compiled::from_address(s.cancel_to.clone(), None),
None
)?;
}
}
builder.into()
}}
}

/// This registers our contract API with the module system.
REGISTER![TapBet];

탭베트(TapBet) 계약 정의는 계약 인스턴스 만드는데 로딩되고 사용될 수 있는 웹어셈블리(WebAssembly) 모듈로 명령어를 컴파일 합니다. 편의를 생각해 사피오는 컴파일 된 계약 플러그인과의 인터페이싱를 위한 Rust 라이브러리/ CLI를 제공했습니다.

cargo run --bin cli -- contract create 0.09015
'{"amount_per_time": 0.03,
"cancel_timeout": {"RH" : 2116},
"cancel_to": "bcrt1qs758ursh4q9z627kt3pp5yysm78ddny6txaqgw",
"fees_per_time": 0.00005,
"period": {"RH": 2016},
"taproot_script": "51200279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817"}'
--file="plugin-example/pkg/sapio_wasm_plugin_example_bg.wasm"

위의 계약 내용을 보면 (0.09015)에 제출된 비트코인 수량은 베팅 당 0.00005  수수료와 0.03 크기 베팅의 3회 반복으로 충분합니다. 이 계약 단계는 2,016개의 블록마다 성숙해지고, 채굴자가 컨트랙트 확장에 실패한 뒤100개의 블록을 취소할 수 있습니다. 이것은 본 보고서 끝 부분에 출력을 컴파일합니다. (부록 1 참고) 어떤 사람이 생성된 주소 (bcrt1qgc803gks4d89362ql09ayycr2s7k6v4ze34pc4ndc0ggu4j24lgqewwf7y) 0.09015 비트코인을 단순하게 지불하고, 생성된 출력을 계약 JSON과 함께 다른 사람들을 위해 정직한 신호를 검증하기 위해 발송합니다. 이러한 계약 목적들은 PSBT 목록을 생성하기 위하여 특정 UTXO에 구속되도록 조작될 수 있으며(부록2 참고), Tux 인터페이스 (상단 그림 참고)를 사용하는 디스플레이에 대하여 렌더링 될 수 있습니다. 이 명령의 출력은 계약 조작과 처리를 지원하기 위한 사피오 특정 메타데이터와 주석을 수반하지만, 코어에서는 모든 사피오 계약은 모든 가능한 거래에 관한 단순한 목록입니다. 

나중에는 CheckTemplateVerify 가 계약이 신뢰감 있게 실행되도록 보증할 것입니다. , 자금이 움직일 수 있는 유일한 방법은 다른 방법 없이 “then!”으로 레이블링 된 경로를 통한 것이죠. 지금으로선 CheckTemplateVerify를 아직 사용할 수 없기 때문에, CTV가 더 취약한 보안 모델임에도 불구하고 서명 오라클 서버를 대신 사용하여CTV 기능성을 흉내내야 할 수 있습니다. 해당 특정 계약 내에서 개인 서명 서버를 사용하는 것은 계약의 행동을 크게 줄이지는 않을 것입니다. 왜냐하면 이성적인 채굴자는 제안된 것보다 더 많은 보상이 있는 거래만을 선택할 것이기 때문입니다. 그렇기 때문에 편법을 행할 수 있는 기회가 한정되어 있습니다.

사용자가 편법을 행하기 위해서는 현재 거래에서 채굴자가 이미 활용할 수 있는 돈보다 더 많은 돈을 제공해야 할 수밖에 없을 것입니다. 사용자가 신호의 정직성을 깨고, 채굴자에게 0.04 BTC와 같은 뇌물을 제공해서 계약을 일찍 하고 남은 구간 내 신호에 사용되는 값을 회수할 수 있는 가능성은 있습니다. 이러한 한계를 해결할 수 있는 몇 가지 방법은 다음과 같습니다:

  1. 해당 계약의 단일 구간에만 자금을 제공하는 (순환 없음) 
  2. (잠재적으로 여러분 본인의 키와 함께) 3 공증인 연합을 사용하여서 공증인이 여러분이 편법을 행할 있도록 강제할 있게 하는
  3. OP_CTV 활성화하면서, 어떤 서명 서버에 대한 요구를 배제하는

대거의 사용자 자금이 특정 시간까지 활성화한 탭루트에 의존하는 계획을 충분한 증빙으로 직접 확인하면서, 네트워크는 먹통이 될 수 있고, 어쩌면 경제적으로 포크될 수도 있지만, 그 시간까지는 규칙을 강요할 수는 없게될 것입니다.  

, 그럼 여러분은 특정일까지 여러분이 탭루트를 원해서 정직한 신호를 만들고자 서두르고 싶은가요? 여러분을 말릴 수는 없습니다! 하지만, 저의 조언을 드리자면, 이것은 새로운 개념이고, 채굴자에게 그들이탭루트를 평생 들어본 적이 없는 척하면서 여러분의 돈을 훔쳐갈 수 있는 이유를 주는 게임 이론입니다. 이것이 문제가 될 수 있겠죠. 종합적인 치킨 게임이지요. 나아가 이러한 기반 상에서 활성화하는 것은 이러한 계약 내 비치된 블록량을 모니터링하고 측정하기 위하여 광범위한 생태계 지지를 필요로 할 것입니다. 저의 의견은 현재 단계에서 최고의 베팅은 현존하는 패밀리 활성 중 하나에 관한 컨센서스를 형성하는 것이면서, 여러분들이 스마트 계약과 컨센서스의 최첨단 부분에 대하여 계속해서 고치고 생각하도록 독려하는 것입니다.

사피오를 사용해서 여러분만의 스마트 계약을 만들고 싶은가요? 저희 채널을 계속해서 주시하고 기다려주세요! 곧 사피오를 공개할 예정입니다.

참고사항

1 – 잠재적인 업그레이드 메커니즘에 대하여 심도 깊은 검토는 본 보고서의 범위 밖이지만, 현재 제안사항의 요약본을 보고 싶다면 아론 반 비어덤의 Bitcoin Magazine 아티클을 참고하기 바랍니다.

2 – 코인을 얻는 것은 조금 까다롭습니다. 돈을 만드는 것보다 쓰는 것이 더 쉽지요! 만약 탭루트가 활성화하지 않았을 때, 누군가가 채굴자에게 손해를 보라고 여러분에게 정말로 돈을 지불할까요? 프리미엄을 실행할 수 있는 한 방법은 프리미엄을 만들어서, 계약을 생성한 거래가 프리미엄의 2차 출력을 보유하고, 해당 거래가 SigHash AnyoneCanPay로 프리미엄에 대한 자금을 추가하기 위해 자금 부족을 겪도록 하는 것입니다.  

3 – 탭루트 스크립트 매개변수는 마술처럼 보일 수도 있습니다. 하지만, 이것은 그저V1 Segwit 생성하기 위한OP_1 PUSH32 <32 bytes pubkey>스크립일 뿐입니다.  자세한 내용은 https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki  참고하기 바랍니다.

부록

부록 1: JSON 계약

{
"template_hash_to_template_map": {
"a6dbda05299a7225d6422e8a0d163b9e5c734143eb1a507a5772e65edb4898dd": {
"precomputed_template_hash": "a6dbda05299a7225d6422e8a0d163b9e5c734143eb1a507a5772e65edb4898dd",
"precomputed_template_hash_idx": 0,
"max_amount_sats": 9010000,
"metadata_map_s2s": {
"label": "stop_expansion"
},
"transaction_literal": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "0000000000000000000000000000000000000000000000000000000000000000:4294967295",
"script_sig": "",
"sequence": 2116,
"witness": []
}
],
"output": [
{
"value": 9010000,
"script_pubkey": "001487a87e0e17a80a2d2bd65c421a1090df8ed6cc9a"
}
]
},
"outputs_info": [
{
"sending_amount_sats": 9010000,
"receiving_contract": {
"address": "bcrt1qs758ursh4q9z627kt3pp5yysm78ddny6txaqgw",
"amount_range": {
"max_btc": 21000000
}
}
}
]
},
"2a5a2eecaf8090ffc6668ae60f70722d8d4791f9c282c6da0ecc5e8838c38175": {
"precomputed_template_hash": "2a5a2eecaf8090ffc6668ae60f70722d8d4791f9c282c6da0ecc5e8838c38175",
"precomputed_template_hash_idx": 0,
"max_amount_sats": 9010000,
"metadata_map_s2s": {
"label": "continue_expansion"
},
"transaction_literal": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "0000000000000000000000000000000000000000000000000000000000000000:4294967295",
"script_sig": "",
"sequence": 2016,
"witness": []
}
],
"output": [
{
"value": 3000000,
"script_pubkey": "51200279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817"
},
{
"value": 6010000,
"script_pubkey": "00206709d4f25ab69955961cc8538e5d58343ae3aa3709a3fd9c7c0fa33f4af63887"
}
]
},
"outputs_info": [
{
"sending_amount_sats": 3000000,
"receiving_contract": {
"address": "bcrt1pqfumuen7l8wthtz45p3ftn58pvrs9xlumvkuu2xet8egzkcklqtscyvky6",
"amount_range": {
"max_btc": 0.03
}
}
},
{
"sending_amount_sats": 6010000,
"receiving_contract": {
"template_hash_to_template_map": {
"d61ac7b03b54f0ad0ab9e9e69ad966e4faa325375577cb259e7891a7b493dc82": {
"precomputed_template_hash": "d61ac7b03b54f0ad0ab9e9e69ad966e4faa325375577cb259e7891a7b493dc82",
"precomputed_template_hash_idx": 0,
"max_amount_sats": 6005000,
"metadata_map_s2s": {
"label": "stop_expansion"
},
"transaction_literal": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "0000000000000000000000000000000000000000000000000000000000000000:4294967295",
"script_sig": "",
"sequence": 2116,
"witness": []
}
],
"output": [
{
"value": 6005000,
"script_pubkey": "001487a87e0e17a80a2d2bd65c421a1090df8ed6cc9a"
}
]
},
"outputs_info": [
{
"sending_amount_sats": 6005000,
"receiving_contract": {
"address": "bcrt1qs758ursh4q9z627kt3pp5yysm78ddny6txaqgw",
"amount_range": {
"max_btc": 21000000
}
}
}
]
},
"ebcea40f3558db070bf30445c208b329e2386080662dd5d6fe29da8f0c301ffb": {
"precomputed_template_hash": "ebcea40f3558db070bf30445c208b329e2386080662dd5d6fe29da8f0c301ffb",
"precomputed_template_hash_idx": 0,
"max_amount_sats": 6005000,
"metadata_map_s2s": {
"label": "continue_expansion"
},
"transaction_literal": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "0000000000000000000000000000000000000000000000000000000000000000:4294967295",
"script_sig": "",
"sequence": 2016,
"witness": []
}
],
"output": [
{
"value": 3000000,
"script_pubkey": "51200279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817"
},
{
"value": 3005000,
"script_pubkey": "0020d023b8ffc5162902a1902e12d0282957fb4726a0f83efc2cb7efc4a6d4247483"
}
]
},
"outputs_info": [
{
"sending_amount_sats": 3000000,
"receiving_contract": {
"address": "bcrt1pqfumuen7l8wthtz45p3ftn58pvrs9xlumvkuu2xet8egzkcklqtscyvky6",
"amount_range": {
"max_btc": 0.03
}
}
},
{
"sending_amount_sats": 3005000,
"receiving_contract": {
"template_hash_to_template_map": {
"64ca1a03d428ce2bb3413080cfa303dcdc841ba30900c2d72cd3615593bf294b": {
"precomputed_template_hash": "64ca1a03d428ce2bb3413080cfa303dcdc841ba30900c2d72cd3615593bf294b",
"precomputed_template_hash_idx": 0,
"max_amount_sats": 3000000,
"metadata_map_s2s": {
"label": "continue_expansion"
},
"transaction_literal": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "0000000000000000000000000000000000000000000000000000000000000000:4294967295",
"script_sig": "",
"sequence": 2016,
"witness": []
}
],
"output": [
{
"value": 3000000,
"script_pubkey": "51200279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817"
}
]
},
"outputs_info": [
{
"sending_amount_sats": 3000000,
"receiving_contract": {
"address": "bcrt1pqfumuen7l8wthtz45p3ftn58pvrs9xlumvkuu2xet8egzkcklqtscyvky6",
"amount_range": {
"max_btc": 0.03
}
}
}
]
},
"037164a6bc5e23333ccd750972927c4de669face404841ce476b867eb08a5d1e": {
"precomputed_template_hash": "037164a6bc5e23333ccd750972927c4de669face404841ce476b867eb08a5d1e",
"precomputed_template_hash_idx": 0,
"max_amount_sats": 3000000,
"metadata_map_s2s": {
"label": "stop_expansion"
},
"transaction_literal": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "0000000000000000000000000000000000000000000000000000000000000000:4294967295",
"script_sig": "",
"sequence": 2116,
"witness": []
}
],
"output": [
{
"value": 3000000,
"script_pubkey": "001487a87e0e17a80a2d2bd65c421a1090df8ed6cc9a"
}
]
},
"outputs_info": [
{
"sending_amount_sats": 3000000,
"receiving_contract": {
"address": "bcrt1qs758ursh4q9z627kt3pp5yysm78ddny6txaqgw",
"amount_range": {
"max_btc": 21000000
}
}
}
]
}
},
"known_policy": "thresh(1,and(older(2116),pk(02d9259ccb8d82d21b80155926dc8dd840f22a862792eba28c935b5221bda7f696)),and(older(2016),pk(037a7ffbdac37874b
4128c484318f3a9c0f0f2088628181d2ed83add9e4ab291c1)))",
"address": "bcrt1q6q3m3l79zc5s9gvs9cfdq2pf2la5wf4qlql0ct9halz2d4pywjpsa25fsl",
"known_descriptor": "wsh(thresh(1,nj:and_v(v:pk(02d9259ccb8d82d21b80155926dc8dd840f22a862792eba28c935b5221bda7f696),older(2116)),snj:and_v(v:pk(037a7f
fbdac37874b4128c484318f3a9c0f0f2088628181d2ed83add9e4ab291c1),older(2016))))#fcpsm54r",
"amount_range": {
"max_btc": 0.03
}
}
}
]
}
},
"known_policy": "thresh(1,and(older(2116),pk(03bac00d55195f4822f0d6660b43e2a0c20bb162542fe7656400024c499edb21a1)),and(older(2016),pk(03ea94374570b77c401224ffe33
5b4dd4a640e5cd7d52c3d2f9e5fe3a5b02e481e)))",
"address": "bcrt1qvuyafuj6k6v4t9suepfcuh2cxsaw823hpx3lm8rup73n7jhk8zrsmkaflr",
"known_descriptor": "wsh(thresh(1,nj:and_v(v:pk(03bac00d55195f4822f0d6660b43e2a0c20bb162542fe7656400024c499edb21a1),older(2116)),snj:and_v(v:pk(03ea94374570b77c
401224ffe335b4dd4a640e5cd7d52c3d2f9e5fe3a5b02e481e),older(2016))))#wc87daeg",
"amount_range": {
"max_btc": 0.06005
}
}
}
]
}
},
"known_policy": "thresh(1,and(older(2116),pk(02d3c32217f7bc3d43f1b8cfd7425379a3bf07074f1a3b4d243546e80e69b0c172)),and(older(2016),pk(02214f6ce3917541ca51705ea29e592dd4e39
cfffcf8f46d43e26011e331e6f5bd)))",
"address": "bcrt1qgc803gks4d89362ql09ayycr2s7k6v4ze34pc4ndc0ggu4j24lgqewwf7y",
"known_descriptor": "wsh(thresh(1,nj:and_v(v:pk(02d3c32217f7bc3d43f1b8cfd7425379a3bf07074f1a3b4d243546e80e69b0c172),older(2116)),snj:and_v(v:pk(02214f6ce3917541ca51705ea2
9e592dd4e39cfffcf8f46d43e26011e331e6f5bd),older(2016))))#nu55ucem",
"amount_range": {
"max_btc": 0.0901
}
}

부록 2: PSBT 계약과 메타데이터

[
[
{
"global": {
"unsigned_tx": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "4fac5f4526a712ad202029cb713469f15c65925be29ac52f89cb637d03b3b678:0",
"script_sig": "",
"sequence": 2016,
"witness": []
}
],
"output": [
{
"value": 3000000,
"script_pubkey": "51200279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817"
},
{
"value": 6010000,
"script_pubkey": "00206709d4f25ab69955961cc8538e5d58343ae3aa3709a3fd9c7c0fa33f4af63887"
}
]
},
"version": 0,
"xpub": {},
"proprietary": [],
"unknown": []
},
"inputs": [
{
"non_witness_utxo": null,
"witness_utxo": {
"value": 9010000,
"script_pubkey": "0020460ef8a2d0ab4e58e940fbcbd21303543d6d32a2cc6a1c566dc3d08e564aafd0"
},
"partial_sigs": {
"02214f6ce3917541ca51705ea29e592dd4e39cfffcf8f46d43e26011e331e6f5bd": "1ce7a3360f44340211df12a3fa98ef29b577cd2f4b228c0e2ff3
bc90f7659395711913e17c7ce033a60a3c7f957f64cc399f6d574767ca5206c3b8e6755ef7d001"
},
"sighash_type": "SIGHASH_ALL",
"redeem_script": null,
"witness_script": "8292632102d3c32217f7bc3d43f1b8cfd7425379a3bf07074f1a3b4d243546e80e69b0c172ad024408b268927c8292632102214f6c
e3917541ca51705ea29e592dd4e39cfffcf8f46d43e26011e331e6f5bdad02e007b26892935187",
"bip32_derivation": [],
"final_script_sig": null,
"final_script_witness": null,
"ripemd160_preimages": {},
"sha256_preimages": {},
"hash160_preimages": {},
"hash256_preimages": {},
"proprietary": [],
"unknown": []
}
],
"outputs": [
{
"redeem_script": null,
"witness_script": null,
"bip32_derivation": [],
"proprietary": [],
"unknown": []
},
{
"redeem_script": null,
"witness_script": null,
"bip32_derivation": [],
"proprietary": [],
"unknown": []
}
]
},
{
"global": {
"unsigned_tx": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "4fac5f4526a712ad202029cb713469f15c65925be29ac52f89cb637d03b3b678:0",
"script_sig": "",
"sequence": 2116,
"witness": []
}
],
"output": [
{
"value": 9010000,
"script_pubkey": "001487a87e0e17a80a2d2bd65c421a1090df8ed6cc9a"
}
]
},
"version": 0,
"xpub": {},
"proprietary": [],
"unknown": []
},
"inputs": [
{
"non_witness_utxo": null,
"witness_utxo": {
"value": 9010000,
"script_pubkey": "0020460ef8a2d0ab4e58e940fbcbd21303543d6d32a2cc6a1c566dc3d08e564aafd0"
},
"partial_sigs": {
"02d3c32217f7bc3d43f1b8cfd7425379a3bf07074f1a3b4d243546e80e69b0c172": "e95b534aecc4325ade5c3241d06c4606de2244a990d01879b4d8
9370e31a3b9b2fe7f242505eb76915931de3a23b6f06d59a7f437c98cf083b84296859a5755b01"
},
"sighash_type": "SIGHASH_ALL",
"redeem_script": null,
"witness_script": "8292632102d3c32217f7bc3d43f1b8cfd7425379a3bf07074f1a3b4d243546e80e69b0c172ad024408b268927c8292632102214f6c
e3917541ca51705ea29e592dd4e39cfffcf8f46d43e26011e331e6f5bdad02e007b26892935187",
"bip32_derivation": [],
"final_script_sig": null,
"final_script_witness": null,
"ripemd160_preimages": {},
"sha256_preimages": {},
"hash160_preimages": {},
"hash256_preimages": {},
"proprietary": [],
"unknown": []
}
],
"outputs": [
{
"redeem_script": null,
"witness_script": null,
"bip32_derivation": [],
"proprietary": [],
"unknown": []
}
]
},
{
"global": {
"unsigned_tx": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "d9b7e135a0265e77b7cab8c9254cbe2638bca168c00120dde56e41fb74e36d5a:1",
"script_sig": "",
"sequence": 2116,
"witness": []
}
],
"output": [
{
"value": 6005000,
"script_pubkey": "001487a87e0e17a80a2d2bd65c421a1090df8ed6cc9a"
}
]
},
"version": 0,
"xpub": {},
"proprietary": [],
"unknown": []
},
"inputs": [
{
"non_witness_utxo": null,
"witness_utxo": {
"value": 6010000,
"script_pubkey": "00206709d4f25ab69955961cc8538e5d58343ae3aa3709a3fd9c7c0fa33f4af63887"
},
"partial_sigs": {
"03bac00d55195f4822f0d6660b43e2a0c20bb162542fe7656400024c499edb21a1": "0f24413cf9e4a0d53ff24496969d357b5c0a95f25b61f98d9fda
de8a2c8c612a5dcc211242ff81fd3836c7adaa8a9c1988a5f48719d87b2fe1c34afb666c198601"
},
"sighash_type": "SIGHASH_ALL",
"redeem_script": null,
"witness_script": "8292632103bac00d55195f4822f0d6660b43e2a0c20bb162542fe7656400024c499edb21a1ad024408b268927c8292632103ea9437
4570b77c401224ffe335b4dd4a640e5cd7d52c3d2f9e5fe3a5b02e481ead02e007b26892935187",
"bip32_derivation": [],
"final_script_sig": null,
"final_script_witness": null,
"ripemd160_preimages": {},
"sha256_preimages": {},
"hash160_preimages": {},
"hash256_preimages": {},
"proprietary": [],
"unknown": []
}
],
"outputs": [
{
"redeem_script": null,
"witness_script": null,
"bip32_derivation": [],
"proprietary": [],
"unknown": []
}
]
},
{
"global": {
"unsigned_tx": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "d9b7e135a0265e77b7cab8c9254cbe2638bca168c00120dde56e41fb74e36d5a:1",
"script_sig": "",
"sequence": 2016,
"witness": []
}
],
"output": [
{
"value": 3000000,
"script_pubkey": "51200279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817"
},
{
"value": 3005000,
"script_pubkey": "0020d023b8ffc5162902a1902e12d0282957fb4726a0f83efc2cb7efc4a6d4247483"
}
]
},
"version": 0,
"xpub": {},
"proprietary": [],
"unknown": []
},
"inputs": [
{
"non_witness_utxo": null,
"witness_utxo": {
"value": 6010000,
"script_pubkey": "00206709d4f25ab69955961cc8538e5d58343ae3aa3709a3fd9c7c0fa33f4af63887"
},
"partial_sigs": {
"03ea94374570b77c401224ffe335b4dd4a640e5cd7d52c3d2f9e5fe3a5b02e481e": "7fef952d3488420612e2ff5bb422606112357085b7dcb745534e
59c31db9795076f54f9173448a0ffd7f93f98139ce0f155583427356b77f5da8be69393a67f301"
},
"sighash_type": "SIGHASH_ALL",
"redeem_script": null,
"witness_script": "8292632103bac00d55195f4822f0d6660b43e2a0c20bb162542fe7656400024c499edb21a1ad024408b268927c8292632103ea9437
4570b77c401224ffe335b4dd4a640e5cd7d52c3d2f9e5fe3a5b02e481ead02e007b26892935187",
"bip32_derivation": [],
"final_script_sig": null,
"final_script_witness": null,
"ripemd160_preimages": {},
"sha256_preimages": {},
"hash160_preimages": {},
"hash256_preimages": {},
"proprietary": [],
"unknown": []
}
],
"outputs": [
{
"redeem_script": null,
"witness_script": null,
"bip32_derivation": [],
"proprietary": [],
"unknown": []
},
{
"redeem_script": null,
"witness_script": null,
"bip32_derivation": [],
"proprietary": [],
"unknown": []
}
]
},
{
"global": {
"unsigned_tx": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "e3b104521048350140ffb52914cc780fe45a44c733e2524a25ec1a79c235639b:1",
"script_sig": "",
"sequence": 2116,
"witness": []
}
],
"output": [
{
"value": 3000000,
"script_pubkey": "001487a87e0e17a80a2d2bd65c421a1090df8ed6cc9a"
}
]
},
"version": 0,
"xpub": {},
"proprietary": [],
"unknown": []
},
"inputs": [
{
"non_witness_utxo": null,
"witness_utxo": {
"value": 3005000,
"script_pubkey": "0020d023b8ffc5162902a1902e12d0282957fb4726a0f83efc2cb7efc4a6d4247483"
},
"partial_sigs": {
"02d9259ccb8d82d21b80155926dc8dd840f22a862792eba28c935b5221bda7f696": "58848a5e8abb37ac1c395ec5934e984bd25496488a0ca718ce28
2ce742686a247156f7c42a84b07db71f1d265ef9ee3dcab34491ee62cac6d6d064cb3abf87a201"
},
"sighash_type": "SIGHASH_ALL",
"redeem_script": null,
"witness_script": "8292632102d9259ccb8d82d21b80155926dc8dd840f22a862792eba28c935b5221bda7f696ad024408b268927c82926321037a7ffb
dac37874b4128c484318f3a9c0f0f2088628181d2ed83add9e4ab291c1ad02e007b26892935187",
"bip32_derivation": [],
"final_script_sig": null,
"final_script_witness": null,
"ripemd160_preimages": {},
"sha256_preimages": {},
"hash160_preimages": {},
"hash256_preimages": {},
"proprietary": [],
"unknown": []
}
],
"outputs": [
{
"redeem_script": null,
"witness_script": null,
"bip32_derivation": [],
"proprietary": [],
"unknown": []
}
]
},
{
"global": {
"unsigned_tx": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "e3b104521048350140ffb52914cc780fe45a44c733e2524a25ec1a79c235639b:1",
"script_sig": "",
"sequence": 2016,
"witness": []
}
],
"output": [
{
"value": 3000000,
"script_pubkey": "51200279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817"
}
]
},
"version": 0,
"xpub": {},
"proprietary": [],
"unknown": []
},
"inputs": [
{
"non_witness_utxo": null,
"witness_utxo": {
"value": 3005000,
"script_pubkey": "0020d023b8ffc5162902a1902e12d0282957fb4726a0f83efc2cb7efc4a6d4247483"
},
"partial_sigs": {
"037a7ffbdac37874b4128c484318f3a9c0f0f2088628181d2ed83add9e4ab291c1": "ad0cb6da9994d8b1ae6aea2e158c728887d5f3c9a57bfbc0346d
85ffdf30769e370fb72b1067fc7cb62e7350a5624b2a07e376baa8ec0e769b0187d08663ec9c01"
},
"sighash_type": "SIGHASH_ALL",
"redeem_script": null,
"witness_script": "8292632102d9259ccb8d82d21b80155926dc8dd840f22a862792eba28c935b5221bda7f696ad024408b268927c82926321037a7ffb
dac37874b4128c484318f3a9c0f0f2088628181d2ed83add9e4ab291c1ad02e007b26892935187",
"bip32_derivation": [],
"final_script_sig": null,
"final_script_witness": null,
"ripemd160_preimages": {},
"sha256_preimages": {},
"hash160_preimages": {},
"hash256_preimages": {},
"proprietary": [],
"unknown": []
}
],
"outputs": [
{
"redeem_script": null,
"witness_script": null,
"bip32_derivation": [],
"proprietary": [],
"unknown": []
}
]
},
{
"global": {
"unsigned_tx": {
"version": 2,
"lock_time": 0,
"input": [
{
"previous_output": "0a9038bbb488729f23c0c1d7c6cfa98ea8464f204fcd9f8d5d90ab91a995d2ba:0",
"script_sig": "",
"sequence": 4294967294,
"witness": []
}
],
"output": [
{
"value": 9010000,
"script_pubkey": "0020460ef8a2d0ab4e58e940fbcbd21303543d6d32a2cc6a1c566dc3d08e564aafd0"
},
{
"value": 190986940,
"script_pubkey": "0014b423d53997e1607cf64e31a5a107360fa69db3bd"
}
]
},
"version": 0,
"xpub": {},
"proprietary": [],
"unknown": []
},
"inputs": [
{
"non_witness_utxo": null,
"witness_utxo": null,
"partial_sigs": {},
"sighash_type": null,
"redeem_script": null,
"witness_script": null,
"bip32_derivation": [],
"final_script_sig": null,
"final_script_witness": null,
"ripemd160_preimages": {},
"sha256_preimages": {},
"hash160_preimages": {},
"hash256_preimages": {},
"proprietary": [],
"unknown": []
}
],
"outputs": [
{
"redeem_script": null,
"witness_script": null,
"bip32_derivation": [],
"proprietary": [],
"unknown": []
},
{
"redeem_script": null,
"witness_script": null,
"bip32_derivation": [],
"proprietary": [],
"unknown": []
}
]
}
],
[
{
"color": "green",
"metadata": {
"label": "continue_expansion"
},
"utxo_metadata": [
{},
{}
]
},
{
"color": "green",
"metadata": {
"label": "stop_expansion"
},
"utxo_metadata": [
{}
]
},
{
"color": "green",
"metadata": {
"label": "stop_expansion"
},
"utxo_metadata": [
{}
]
},
{
"color": "green",
"metadata": {
"label": "continue_expansion"
},
"utxo_metadata": [
{},
{}
]
},
{
"color": "green",
"metadata": {
"label": "stop_expansion"
},
"utxo_metadata": [
{}
]
},
{
"color": "green",
"metadata": {
"label": "continue_expansion"
},
"utxo_metadata": [
{}
]
},
{
"color": "black",
"metadata": {
"label": "funding"
},
"utxo_metadata": {}
}
]
]