forked from nervosnetwork/ckb-sdk-rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsend_ckb_multisig_example.rs
More file actions
71 lines (60 loc) · 2.93 KB
/
send_ckb_multisig_example.rs
File metadata and controls
71 lines (60 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
use ckb_sdk::{
constants::MultisigScript,
transaction::{
builder::{CkbTransactionBuilder, SimpleTransactionBuilder},
handler::HandlerContexts,
input::InputIterator,
signer::{SignContexts, TransactionSigner},
TransactionBuilderConfiguration,
},
unlock::MultisigConfig,
Address, CkbRpcClient, NetworkInfo,
};
use ckb_types::{core::Capacity, h160, h256};
use std::{error::Error as StdErr, str::FromStr};
fn main() -> Result<(), Box<dyn StdErr>> {
let network_info = NetworkInfo::testnet();
let configuration = TransactionBuilderConfiguration::new_with_network(network_info.clone())?;
let multisig_config = MultisigConfig::new_with(
MultisigScript::V2,
vec![
h160!("0x7336b0ba900684cb3cb00f0d46d4f64c0994a562"),
h160!("0x5724c1e3925a5206944d753a6f3edaedf977d77f"),
],
0,
2,
)?;
let sender = multisig_config.to_address(network_info.network_type, MultisigScript::V2, None);
println!("sender: {}", sender);
let receiver = Address::from_str("ckt1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsq2qf8keemy2p5uu0g0gn8cd4ju23s5269qk8rg4r")?;
let iterator = InputIterator::new_with_address(&[sender], &network_info);
let mut builder = SimpleTransactionBuilder::new(configuration, iterator);
builder.add_output(&receiver, Capacity::shannons(6100000000u64));
let mut tx_with_groups =
builder.build(&HandlerContexts::new_multisig(multisig_config.clone()))?;
println!("tx_with_groups:{:?}", &tx_with_groups);
let json_tx = ckb_jsonrpc_types::TransactionView::from(tx_with_groups.get_tx_view().clone());
println!("tx: {}", serde_json::to_string_pretty(&json_tx).unwrap());
let private_key1 = h256!("0x4fd809631a6aa6e3bb378dd65eae5d71df895a82c91a615a1e8264741515c79c");
let signer1 = TransactionSigner::new(&network_info);
signer1.sign_transaction(
&mut tx_with_groups,
&SignContexts::new_multisig_h256(&private_key1, multisig_config.clone())?,
)?;
let json_tx = ckb_jsonrpc_types::TransactionView::from(tx_with_groups.get_tx_view().clone());
println!("tx: {}", serde_json::to_string_pretty(&json_tx).unwrap());
let signer2 = TransactionSigner::new(&network_info);
let private_key2 = h256!("0x7438f7b35c355e3d2fb9305167a31a72d22ddeafb80a21cc99ff6329d92e8087");
signer2.sign_transaction(
&mut tx_with_groups,
&SignContexts::new_multisig_h256(&private_key2, multisig_config)?,
)?;
let json_tx = ckb_jsonrpc_types::TransactionView::from(tx_with_groups.get_tx_view().clone());
println!("tx: {}", serde_json::to_string_pretty(&json_tx).unwrap());
let tx_hash = CkbRpcClient::new(network_info.url.as_str())
.send_transaction(json_tx.inner, None)
.expect("send transaction");
// example tx: 6ae2abe04bb372f95518e1557d143b2690c38ad2ee801692c8c7c70981555b66
println!(">>> tx {} sent! <<<", tx_hash);
Ok(())
}