mirror of
https://github.com/Qortal/piratewallet-light-cli.git
synced 2025-07-30 20:01:26 +00:00
Added locktime argument
This commit is contained in:
@@ -48,33 +48,33 @@ reqwest = { version = "0.10.8", features = ["blocking", "json"] }
|
|||||||
|
|
||||||
[dependencies.bellman]
|
[dependencies.bellman]
|
||||||
git = "https://github.com/CalDescent1/librustzcash.git"
|
git = "https://github.com/CalDescent1/librustzcash.git"
|
||||||
rev = "1a8686863b10a608ececdede3deb82d2fb4218fa"
|
rev = "9eeaf4f0269bf3936b2d57a67d7c6ba85bb8e6e9"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["groth16", "multicore"]
|
features = ["groth16", "multicore"]
|
||||||
|
|
||||||
[dependencies.pairing]
|
[dependencies.pairing]
|
||||||
git = "https://github.com/CalDescent1/librustzcash.git"
|
git = "https://github.com/CalDescent1/librustzcash.git"
|
||||||
rev = "1a8686863b10a608ececdede3deb82d2fb4218fa"
|
rev = "9eeaf4f0269bf3936b2d57a67d7c6ba85bb8e6e9"
|
||||||
|
|
||||||
[dependencies.zcash_client_backend]
|
[dependencies.zcash_client_backend]
|
||||||
git = "https://github.com/CalDescent1/librustzcash.git"
|
git = "https://github.com/CalDescent1/librustzcash.git"
|
||||||
rev = "1a8686863b10a608ececdede3deb82d2fb4218fa"
|
rev = "9eeaf4f0269bf3936b2d57a67d7c6ba85bb8e6e9"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.zcash_primitives]
|
[dependencies.zcash_primitives]
|
||||||
git = "https://github.com/CalDescent1/librustzcash.git"
|
git = "https://github.com/CalDescent1/librustzcash.git"
|
||||||
rev = "1a8686863b10a608ececdede3deb82d2fb4218fa"
|
rev = "9eeaf4f0269bf3936b2d57a67d7c6ba85bb8e6e9"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["transparent-inputs"]
|
features = ["transparent-inputs"]
|
||||||
|
|
||||||
[dependencies.zcash_proofs]
|
[dependencies.zcash_proofs]
|
||||||
git = "https://github.com/CalDescent1/librustzcash.git"
|
git = "https://github.com/CalDescent1/librustzcash.git"
|
||||||
rev = "1a8686863b10a608ececdede3deb82d2fb4218fa"
|
rev = "9eeaf4f0269bf3936b2d57a67d7c6ba85bb8e6e9"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.ff]
|
[dependencies.ff]
|
||||||
git = "https://github.com/CalDescent1/librustzcash.git"
|
git = "https://github.com/CalDescent1/librustzcash.git"
|
||||||
rev = "1a8686863b10a608ececdede3deb82d2fb4218fa"
|
rev = "9eeaf4f0269bf3936b2d57a67d7c6ba85bb8e6e9"
|
||||||
features = ["ff_derive"]
|
features = ["ff_derive"]
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
|
@@ -674,11 +674,11 @@ impl Command for RedeemP2shCommand {
|
|||||||
let mut h = vec![];
|
let mut h = vec![];
|
||||||
h.push("Redeem ARRR from an HTLC");
|
h.push("Redeem ARRR from an HTLC");
|
||||||
h.push("Usage:");
|
h.push("Usage:");
|
||||||
h.push("send '{'input': <address>, 'output': [{'address': <address>, 'amount': <amount in zatoshis>, 'memo': <optional memo>, 'script': <redeem script>, 'txid': <funding txid>, 'secret': <secret>, 'privkey': <private key>}, ...]}");
|
h.push("send '{'input': <address>, 'output': [{'address': <address>, 'amount': <amount in zatoshis>, 'memo': <optional memo>, 'script': <redeem script>, 'txid': <funding txid>, 'locktime': <lock time>, 'secret': <secret>, 'privkey': <private key>}, ...]}");
|
||||||
h.push("");
|
h.push("");
|
||||||
h.push("NOTE: The fee required to send this transaction (currently ZEC 0.0001) is additionally detected from your balance.");
|
h.push("NOTE: The fee required to send this transaction (currently ZEC 0.0001) is additionally detected from your balance.");
|
||||||
h.push("Example:");
|
h.push("Example:");
|
||||||
h.push("send '{\"input\":\"ztestsapling1x65nq4dgp0qfywgxcwk9n0fvm4fysmapgr2q00p85ju252h6l7mmxu2jg9cqqhtvzd69jwhgv8d\", \"output\": [{ \"address\": \"ztestsapling1x65nq4dgp0qfywgxcwk9n0fvm4fysmapgr2q00p85ju252h6l7mmxu2jg9cqqhtvzd69jwhgv8d\", \"amount\": 200000, \"memo\": \"Hello from the command line\", \"script\": \"acbdef\", \"secret\": \"acbdef\", \"privkey\": \"acbdef\"}]}'");
|
h.push("send '{\"input\":\"ztestsapling1x65nq4dgp0qfywgxcwk9n0fvm4fysmapgr2q00p85ju252h6l7mmxu2jg9cqqhtvzd69jwhgv8d\", \"output\": [{ \"address\": \"ztestsapling1x65nq4dgp0qfywgxcwk9n0fvm4fysmapgr2q00p85ju252h6l7mmxu2jg9cqqhtvzd69jwhgv8d\", \"amount\": 200000, \"memo\": \"Hello from the command line\", \"script\": \"acbdef\", \"txid\": \"acbdef\", \"locktime\": 1652873471, \"secret\": \"acbdef\", \"privkey\": \"acbdef\"}]}'");
|
||||||
h.push("");
|
h.push("");
|
||||||
h.join("\n")
|
h.join("\n")
|
||||||
}
|
}
|
||||||
@@ -764,6 +764,16 @@ impl Command for RedeemP2shCommand {
|
|||||||
let txid_bytes = &txid_vec[..];
|
let txid_bytes = &txid_vec[..];
|
||||||
|
|
||||||
|
|
||||||
|
//Check for a lock time and convert to u32
|
||||||
|
let lock_time: u32 = if json_args.has_key("locktime") {
|
||||||
|
match json_args["locktime"].as_u32() {
|
||||||
|
Some(f) => f.clone(),
|
||||||
|
None => return format!("Error: {}\n{}", "locktime must be a number", self.help())
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return format!("Error: {}\n{}", "Need locktime", self.help());
|
||||||
|
};
|
||||||
|
|
||||||
//Check for secret and convert to a string
|
//Check for secret and convert to a string
|
||||||
let secret58 = if json_args.has_key("secret") {
|
let secret58 = if json_args.has_key("secret") {
|
||||||
json_args["secret"].as_str().unwrap().to_string().clone()
|
json_args["secret"].as_str().unwrap().to_string().clone()
|
||||||
@@ -815,7 +825,7 @@ impl Command for RedeemP2shCommand {
|
|||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
// Convert to the right format. String -> &str.
|
// Convert to the right format. String -> &str.
|
||||||
let tos = send_args.iter().map(|(a, v, m)| (a.as_str(), *v, m.clone()) ).collect::<Vec<_>>();
|
let tos = send_args.iter().map(|(a, v, m)| (a.as_str(), *v, m.clone()) ).collect::<Vec<_>>();
|
||||||
match lightclient.do_redeem_p2sh(from, tos, &fee, script_bytes, txid_bytes, secret_bytes, privkey_bytes) {
|
match lightclient.do_redeem_p2sh(from, tos, &fee, script_bytes, txid_bytes, lock_time, secret_bytes, privkey_bytes) {
|
||||||
Ok(txid) => { object!{ "txid" => txid } },
|
Ok(txid) => { object!{ "txid" => txid } },
|
||||||
Err(e) => { object!{ "error" => e } }
|
Err(e) => { object!{ "error" => e } }
|
||||||
}.pretty(2)
|
}.pretty(2)
|
||||||
|
@@ -1747,7 +1747,7 @@ impl LightClient {
|
|||||||
result.map(|(txid, _)| txid)
|
result.map(|(txid, _)| txid)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn do_redeem_p2sh(&self, from: &str, addrs: Vec<(&str, u64, Option<String>)>, fee: &u64, script: &[u8], txid: &[u8], secret: &[u8], privkey: &[u8]) -> Result<String, String> {
|
pub fn do_redeem_p2sh(&self, from: &str, addrs: Vec<(&str, u64, Option<String>)>, fee: &u64, script: &[u8], txid: &[u8], lock_time: u32, secret: &[u8], privkey: &[u8]) -> Result<String, String> {
|
||||||
if !self.wallet.read().unwrap().is_unlocked_for_spending() {
|
if !self.wallet.read().unwrap().is_unlocked_for_spending() {
|
||||||
error!("Wallet is locked");
|
error!("Wallet is locked");
|
||||||
return Err("Wallet is locked".to_string());
|
return Err("Wallet is locked".to_string());
|
||||||
@@ -1761,7 +1761,7 @@ impl LightClient {
|
|||||||
self.wallet.write().unwrap().redeem_p2sh(
|
self.wallet.write().unwrap().redeem_p2sh(
|
||||||
u32::from_str_radix(&self.config.consensus_branch_id, 16).unwrap(),
|
u32::from_str_radix(&self.config.consensus_branch_id, 16).unwrap(),
|
||||||
&self.sapling_spend, &self.sapling_output,
|
&self.sapling_spend, &self.sapling_output,
|
||||||
from, addrs, script, txid, secret, privkey, fee,
|
from, addrs, script, txid, lock_time, secret, privkey, fee,
|
||||||
|txbytes| broadcast_raw_tx(&self.get_server_uri(), txbytes)
|
|txbytes| broadcast_raw_tx(&self.get_server_uri(), txbytes)
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
@@ -2783,6 +2783,7 @@ impl LightWallet {
|
|||||||
tos: Vec<(&str, u64, Option<String>)>,
|
tos: Vec<(&str, u64, Option<String>)>,
|
||||||
redeem_script_pubkey: &[u8],
|
redeem_script_pubkey: &[u8],
|
||||||
outpoint_txid: &[u8],
|
outpoint_txid: &[u8],
|
||||||
|
lock_time: u32,
|
||||||
secret: &[u8],
|
secret: &[u8],
|
||||||
privkey: &[u8],
|
privkey: &[u8],
|
||||||
fee: &u64,
|
fee: &u64,
|
||||||
@@ -2903,7 +2904,7 @@ impl LightWallet {
|
|||||||
|
|
||||||
let sk = SecretKey::from_slice(privkey).unwrap();
|
let sk = SecretKey::from_slice(privkey).unwrap();
|
||||||
|
|
||||||
if let Err(e) = builder.add_transparent_input_with_secret(sk, outpoint.clone(), coin.clone(), secret.to_vec(), redeem_script_pubkey.to_vec()
|
if let Err(e) = builder.add_transparent_input_with_secret(sk, outpoint.clone(), coin.clone(), secret.to_vec(), redeem_script_pubkey.to_vec(), lock_time
|
||||||
) {
|
) {
|
||||||
let e = format!("Error adding transparent input: {:?}", e);
|
let e = format!("Error adding transparent input: {:?}", e);
|
||||||
error!("{}", e);
|
error!("{}", e);
|
||||||
|
Reference in New Issue
Block a user