mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-09 04:39:24 +00:00
Implement Featured Addresses
Closes https://github.com/serai-dex/serai/issues/37.
This commit is contained in:
@@ -1,6 +1,13 @@
|
||||
use hex_literal::hex;
|
||||
|
||||
use crate::wallet::address::{Network, AddressType, Address};
|
||||
use rand_core::{RngCore, OsRng};
|
||||
|
||||
use curve25519_dalek::{constants::ED25519_BASEPOINT_TABLE, edwards::CompressedEdwardsY};
|
||||
|
||||
use crate::{
|
||||
random_scalar,
|
||||
wallet::address::{Network, AddressType, AddressMeta, Address},
|
||||
};
|
||||
|
||||
const SPEND: [u8; 32] = hex!("f8631661f6ab4e6fda310c797330d86e23a682f20d5bc8cc27b18051191f16d7");
|
||||
const VIEW: [u8; 32] = hex!("4a1535063ad1fee2dabbf909d4fd9a873e29541b401f0944754e17c9a41820ce");
|
||||
@@ -19,14 +26,19 @@ const SUB_VIEW: [u8; 32] = hex!("9bc2b464de90d058468522098d5610c5019c45fd1711a95
|
||||
const SUBADDRESS: &'static str =
|
||||
"8C5zHM5ud8nGC4hC2ULiBLSWx9infi8JUUmWEat4fcTf8J4H38iWYVdFmPCA9UmfLTZxD43RsyKnGEdZkoGij6csDeUnbEB";
|
||||
|
||||
const FEATURED_JSON: &'static str = include_str!("featured_addresses.json");
|
||||
|
||||
#[test]
|
||||
fn standard_address() {
|
||||
let addr = Address::from_str(STANDARD, Network::Mainnet).unwrap();
|
||||
assert_eq!(addr.meta.network, Network::Mainnet);
|
||||
assert_eq!(addr.meta.kind, AddressType::Standard);
|
||||
assert_eq!(addr.meta.guaranteed, false);
|
||||
assert_eq!(addr.meta.kind.subaddress(), false);
|
||||
assert_eq!(addr.meta.kind.payment_id(), None);
|
||||
assert_eq!(addr.meta.kind.guaranteed(), false);
|
||||
assert_eq!(addr.spend.compress().to_bytes(), SPEND);
|
||||
assert_eq!(addr.view.compress().to_bytes(), VIEW);
|
||||
assert_eq!(addr.to_string(), STANDARD);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -34,9 +46,12 @@ fn integrated_address() {
|
||||
let addr = Address::from_str(INTEGRATED, Network::Mainnet).unwrap();
|
||||
assert_eq!(addr.meta.network, Network::Mainnet);
|
||||
assert_eq!(addr.meta.kind, AddressType::Integrated(PAYMENT_ID));
|
||||
assert_eq!(addr.meta.guaranteed, false);
|
||||
assert_eq!(addr.meta.kind.subaddress(), false);
|
||||
assert_eq!(addr.meta.kind.payment_id(), Some(PAYMENT_ID));
|
||||
assert_eq!(addr.meta.kind.guaranteed(), false);
|
||||
assert_eq!(addr.spend.compress().to_bytes(), SPEND);
|
||||
assert_eq!(addr.view.compress().to_bytes(), VIEW);
|
||||
assert_eq!(addr.to_string(), INTEGRATED);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -44,7 +59,113 @@ fn subaddress() {
|
||||
let addr = Address::from_str(SUBADDRESS, Network::Mainnet).unwrap();
|
||||
assert_eq!(addr.meta.network, Network::Mainnet);
|
||||
assert_eq!(addr.meta.kind, AddressType::Subaddress);
|
||||
assert_eq!(addr.meta.guaranteed, false);
|
||||
assert_eq!(addr.meta.kind.subaddress(), true);
|
||||
assert_eq!(addr.meta.kind.payment_id(), None);
|
||||
assert_eq!(addr.meta.kind.guaranteed(), false);
|
||||
assert_eq!(addr.spend.compress().to_bytes(), SUB_SPEND);
|
||||
assert_eq!(addr.view.compress().to_bytes(), SUB_VIEW);
|
||||
assert_eq!(addr.to_string(), SUBADDRESS);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn featured() {
|
||||
for (network, first) in
|
||||
[(Network::Mainnet, 'C'), (Network::Testnet, 'K'), (Network::Stagenet, 'F')]
|
||||
{
|
||||
for _ in 0 .. 100 {
|
||||
let spend = &random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE;
|
||||
let view = &random_scalar(&mut OsRng) * &ED25519_BASEPOINT_TABLE;
|
||||
|
||||
for features in 0 .. (1 << 3) {
|
||||
const SUBADDRESS_FEATURE_BIT: u8 = 1;
|
||||
const INTEGRATED_FEATURE_BIT: u8 = 1 << 1;
|
||||
const GUARANTEED_FEATURE_BIT: u8 = 1 << 2;
|
||||
|
||||
let subaddress = (features & SUBADDRESS_FEATURE_BIT) == SUBADDRESS_FEATURE_BIT;
|
||||
|
||||
let mut id = [0; 8];
|
||||
OsRng.fill_bytes(&mut id);
|
||||
let id = Some(id).filter(|_| (features & INTEGRATED_FEATURE_BIT) == INTEGRATED_FEATURE_BIT);
|
||||
|
||||
let guaranteed = (features & GUARANTEED_FEATURE_BIT) == GUARANTEED_FEATURE_BIT;
|
||||
|
||||
let kind = AddressType::Featured(subaddress, id, guaranteed);
|
||||
let meta = AddressMeta { network, kind };
|
||||
let addr = Address::new(meta, spend, view);
|
||||
|
||||
assert_eq!(addr.to_string().chars().next().unwrap(), first);
|
||||
assert_eq!(Address::from_str(&addr.to_string(), network).unwrap(), addr);
|
||||
|
||||
assert_eq!(addr.spend, spend);
|
||||
assert_eq!(addr.view, view);
|
||||
|
||||
assert_eq!(addr.subaddress(), subaddress);
|
||||
assert_eq!(addr.payment_id(), id);
|
||||
assert_eq!(addr.guaranteed(), guaranteed);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn featured_vectors() {
|
||||
#[derive(serde::Deserialize)]
|
||||
struct Vector {
|
||||
address: String,
|
||||
|
||||
network: String,
|
||||
spend: String,
|
||||
view: String,
|
||||
|
||||
subaddress: bool,
|
||||
integrated: bool,
|
||||
payment_id: Option<[u8; 8]>,
|
||||
guaranteed: bool,
|
||||
}
|
||||
|
||||
let vectors = serde_json::from_str::<Vec<Vector>>(FEATURED_JSON).unwrap();
|
||||
for vector in vectors {
|
||||
let first = vector.address.chars().next().unwrap();
|
||||
let network = match vector.network.as_str() {
|
||||
"Mainnet" => {
|
||||
assert_eq!(first, 'C');
|
||||
Network::Mainnet
|
||||
}
|
||||
"Testnet" => {
|
||||
assert_eq!(first, 'K');
|
||||
Network::Testnet
|
||||
}
|
||||
"Stagenet" => {
|
||||
assert_eq!(first, 'F');
|
||||
Network::Stagenet
|
||||
}
|
||||
_ => panic!("Unknown network"),
|
||||
};
|
||||
let spend =
|
||||
CompressedEdwardsY::from_slice(&hex::decode(vector.spend).unwrap()).decompress().unwrap();
|
||||
let view =
|
||||
CompressedEdwardsY::from_slice(&hex::decode(vector.view).unwrap()).decompress().unwrap();
|
||||
|
||||
let addr = Address::from_str(&vector.address, network).unwrap();
|
||||
assert_eq!(addr.spend, spend);
|
||||
assert_eq!(addr.view, view);
|
||||
|
||||
assert_eq!(addr.subaddress(), vector.subaddress);
|
||||
assert_eq!(vector.integrated, vector.payment_id.is_some());
|
||||
assert_eq!(addr.payment_id(), vector.payment_id);
|
||||
assert_eq!(addr.guaranteed(), vector.guaranteed);
|
||||
|
||||
assert_eq!(
|
||||
Address::new(
|
||||
AddressMeta {
|
||||
network,
|
||||
kind: AddressType::Featured(vector.subaddress, vector.payment_id, vector.guaranteed)
|
||||
},
|
||||
spend,
|
||||
view
|
||||
)
|
||||
.to_string(),
|
||||
vector.address
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
230
coins/monero/src/tests/featured_addresses.json
Normal file
230
coins/monero/src/tests/featured_addresses.json
Normal file
@@ -0,0 +1,230 @@
|
||||
[
|
||||
{
|
||||
"address": "CjWdTpuDaZ69nTGxzm9YarR82YDYFECi1WaaREZTMy5yDsjaRX5bC3cbC3JpcrBPd7YYpjoWKuBMidgGaKBK5Jye2v3pYyUDn",
|
||||
"network": "Mainnet",
|
||||
"spend": "258dfe7eef9be934839f3b8e0d40e79035fe85879c0a9eb0d7372ae2deb0004c",
|
||||
"view": "f91382373045f3cc69233254ab0406bc9e008707569ff9db4718654812d839df",
|
||||
"subaddress": false,
|
||||
"integrated": false,
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "CjWdTpuDaZ69nTGxzm9YarR82YDYFECi1WaaREZTMy5yDsjaRX5bC3cbC3JpcrBPd7YYpjoWKuBMidgGaKBK5Jye2v3wfMHCy",
|
||||
"network": "Mainnet",
|
||||
"spend": "258dfe7eef9be934839f3b8e0d40e79035fe85879c0a9eb0d7372ae2deb0004c",
|
||||
"view": "f91382373045f3cc69233254ab0406bc9e008707569ff9db4718654812d839df",
|
||||
"subaddress": true,
|
||||
"integrated": false,
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "CjWdTpuDaZ69nTGxzm9YarR82YDYFECi1WaaREZTMy5yDsjaRX5bC3cbC3JpcrBPd7YYpjoWKuBMidgGaKBK5JyeeJTo4p5ayvj36PStM5AX",
|
||||
"network": "Mainnet",
|
||||
"spend": "258dfe7eef9be934839f3b8e0d40e79035fe85879c0a9eb0d7372ae2deb0004c",
|
||||
"view": "f91382373045f3cc69233254ab0406bc9e008707569ff9db4718654812d839df",
|
||||
"subaddress": false,
|
||||
"integrated": true,
|
||||
"payment_id": [46, 48, 134, 34, 245, 148, 243, 195],
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "CjWdTpuDaZ69nTGxzm9YarR82YDYFECi1WaaREZTMy5yDsjaRX5bC3cbC3JpcrBPd7YYpjoWKuBMidgGaKBK5JyeeJWv5WqMCNE2hRs9rJfy",
|
||||
"network": "Mainnet",
|
||||
"spend": "258dfe7eef9be934839f3b8e0d40e79035fe85879c0a9eb0d7372ae2deb0004c",
|
||||
"view": "f91382373045f3cc69233254ab0406bc9e008707569ff9db4718654812d839df",
|
||||
"subaddress": true,
|
||||
"integrated": true,
|
||||
"payment_id": [153, 176, 98, 204, 151, 27, 197, 168],
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "CjWdTpuDaZ69nTGxzm9YarR82YDYFECi1WaaREZTMy5yDsjaRX5bC3cbC3JpcrBPd7YYpjoWKuBMidgGaKBK5Jye2v4DwqwH1",
|
||||
"network": "Mainnet",
|
||||
"spend": "258dfe7eef9be934839f3b8e0d40e79035fe85879c0a9eb0d7372ae2deb0004c",
|
||||
"view": "f91382373045f3cc69233254ab0406bc9e008707569ff9db4718654812d839df",
|
||||
"subaddress": false,
|
||||
"integrated": false,
|
||||
"guaranteed": true
|
||||
},
|
||||
{
|
||||
"address": "CjWdTpuDaZ69nTGxzm9YarR82YDYFECi1WaaREZTMy5yDsjaRX5bC3cbC3JpcrBPd7YYpjoWKuBMidgGaKBK5Jye2v4Pyz8bD",
|
||||
"network": "Mainnet",
|
||||
"spend": "258dfe7eef9be934839f3b8e0d40e79035fe85879c0a9eb0d7372ae2deb0004c",
|
||||
"view": "f91382373045f3cc69233254ab0406bc9e008707569ff9db4718654812d839df",
|
||||
"subaddress": true,
|
||||
"integrated": false,
|
||||
"guaranteed": true
|
||||
},
|
||||
{
|
||||
"address": "CjWdTpuDaZ69nTGxzm9YarR82YDYFECi1WaaREZTMy5yDsjaRX5bC3cbC3JpcrBPd7YYpjoWKuBMidgGaKBK5JyeeJcwt7hykou237MqZZDA",
|
||||
"network": "Mainnet",
|
||||
"spend": "258dfe7eef9be934839f3b8e0d40e79035fe85879c0a9eb0d7372ae2deb0004c",
|
||||
"view": "f91382373045f3cc69233254ab0406bc9e008707569ff9db4718654812d839df",
|
||||
"subaddress": false,
|
||||
"integrated": true,
|
||||
"payment_id": [88, 37, 149, 111, 171, 108, 120, 181],
|
||||
"guaranteed": true
|
||||
},
|
||||
{
|
||||
"address": "CjWdTpuDaZ69nTGxzm9YarR82YDYFECi1WaaREZTMy5yDsjaRX5bC3cbC3JpcrBPd7YYpjoWKuBMidgGaKBK5JyeeJfTrFAp69u2MYbf5YeN",
|
||||
"network": "Mainnet",
|
||||
"spend": "258dfe7eef9be934839f3b8e0d40e79035fe85879c0a9eb0d7372ae2deb0004c",
|
||||
"view": "f91382373045f3cc69233254ab0406bc9e008707569ff9db4718654812d839df",
|
||||
"subaddress": true,
|
||||
"integrated": true,
|
||||
"payment_id": [125, 69, 155, 152, 140, 160, 157, 186],
|
||||
"guaranteed": true
|
||||
},
|
||||
{
|
||||
"address": "Kgx5uCVsMSEVm7seL8tjyRGmmVXjWfEowKpKjgaXUGVyMViBYMh13VQ4mfqpB7zEVVcJx3E8FFgAuQ8cq6mg5x712U9w7ScYA",
|
||||
"network": "Testnet",
|
||||
"spend": "bba3a8a5bb47f7abf2e2dffeaf43385e4b308fd63a9ff6707e355f3b0a6c247a",
|
||||
"view": "881713a4fa9777168a54bbdcb75290d319fb92fdf1026a8a4b125a8e341de8ab",
|
||||
"subaddress": false,
|
||||
"integrated": false,
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "Kgx5uCVsMSEVm7seL8tjyRGmmVXjWfEowKpKjgaXUGVyMViBYMh13VQ4mfqpB7zEVVcJx3E8FFgAuQ8cq6mg5x712UA2gCrT1",
|
||||
"network": "Testnet",
|
||||
"spend": "bba3a8a5bb47f7abf2e2dffeaf43385e4b308fd63a9ff6707e355f3b0a6c247a",
|
||||
"view": "881713a4fa9777168a54bbdcb75290d319fb92fdf1026a8a4b125a8e341de8ab",
|
||||
"subaddress": true,
|
||||
"integrated": false,
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "Kgx5uCVsMSEVm7seL8tjyRGmmVXjWfEowKpKjgaXUGVyMViBYMh13VQ4mfqpB7zEVVcJx3E8FFgAuQ8cq6mg5x71Vc1DbPKwJu81cxJjqBkS",
|
||||
"network": "Testnet",
|
||||
"spend": "bba3a8a5bb47f7abf2e2dffeaf43385e4b308fd63a9ff6707e355f3b0a6c247a",
|
||||
"view": "881713a4fa9777168a54bbdcb75290d319fb92fdf1026a8a4b125a8e341de8ab",
|
||||
"subaddress": false,
|
||||
"integrated": true,
|
||||
"payment_id": [92, 225, 118, 220, 39, 3, 72, 51],
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "Kgx5uCVsMSEVm7seL8tjyRGmmVXjWfEowKpKjgaXUGVyMViBYMh13VQ4mfqpB7zEVVcJx3E8FFgAuQ8cq6mg5x71Vc2o1rPMaXN31Fe5J6dn",
|
||||
"network": "Testnet",
|
||||
"spend": "bba3a8a5bb47f7abf2e2dffeaf43385e4b308fd63a9ff6707e355f3b0a6c247a",
|
||||
"view": "881713a4fa9777168a54bbdcb75290d319fb92fdf1026a8a4b125a8e341de8ab",
|
||||
"subaddress": true,
|
||||
"integrated": true,
|
||||
"payment_id": [20, 120, 47, 89, 72, 165, 233, 115],
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "Kgx5uCVsMSEVm7seL8tjyRGmmVXjWfEowKpKjgaXUGVyMViBYMh13VQ4mfqpB7zEVVcJx3E8FFgAuQ8cq6mg5x712UAQHCRZ4",
|
||||
"network": "Testnet",
|
||||
"spend": "bba3a8a5bb47f7abf2e2dffeaf43385e4b308fd63a9ff6707e355f3b0a6c247a",
|
||||
"view": "881713a4fa9777168a54bbdcb75290d319fb92fdf1026a8a4b125a8e341de8ab",
|
||||
"subaddress": false,
|
||||
"integrated": false,
|
||||
"guaranteed": true
|
||||
},
|
||||
{
|
||||
"address": "Kgx5uCVsMSEVm7seL8tjyRGmmVXjWfEowKpKjgaXUGVyMViBYMh13VQ4mfqpB7zEVVcJx3E8FFgAuQ8cq6mg5x712UAUzqaii",
|
||||
"network": "Testnet",
|
||||
"spend": "bba3a8a5bb47f7abf2e2dffeaf43385e4b308fd63a9ff6707e355f3b0a6c247a",
|
||||
"view": "881713a4fa9777168a54bbdcb75290d319fb92fdf1026a8a4b125a8e341de8ab",
|
||||
"subaddress": true,
|
||||
"integrated": false,
|
||||
"guaranteed": true
|
||||
},
|
||||
{
|
||||
"address": "Kgx5uCVsMSEVm7seL8tjyRGmmVXjWfEowKpKjgaXUGVyMViBYMh13VQ4mfqpB7zEVVcJx3E8FFgAuQ8cq6mg5x71VcAsfQc3gJQ2gHLd5DiQ",
|
||||
"network": "Testnet",
|
||||
"spend": "bba3a8a5bb47f7abf2e2dffeaf43385e4b308fd63a9ff6707e355f3b0a6c247a",
|
||||
"view": "881713a4fa9777168a54bbdcb75290d319fb92fdf1026a8a4b125a8e341de8ab",
|
||||
"subaddress": false,
|
||||
"integrated": true,
|
||||
"payment_id": [193, 149, 123, 214, 180, 205, 195, 91],
|
||||
"guaranteed": true
|
||||
},
|
||||
{
|
||||
"address": "Kgx5uCVsMSEVm7seL8tjyRGmmVXjWfEowKpKjgaXUGVyMViBYMh13VQ4mfqpB7zEVVcJx3E8FFgAuQ8cq6mg5x71VcDBAD5jbZQ3AMHFyvQB",
|
||||
"network": "Testnet",
|
||||
"spend": "bba3a8a5bb47f7abf2e2dffeaf43385e4b308fd63a9ff6707e355f3b0a6c247a",
|
||||
"view": "881713a4fa9777168a54bbdcb75290d319fb92fdf1026a8a4b125a8e341de8ab",
|
||||
"subaddress": true,
|
||||
"integrated": true,
|
||||
"payment_id": [205, 170, 65, 0, 51, 175, 251, 184],
|
||||
"guaranteed": true
|
||||
},
|
||||
{
|
||||
"address": "FSDinqdKK54PbjF73GgW3nUpf7bF8QbyxFCUurENmUyeEfSxSLL2hxwANBLzq1A8gTSAzzEn65hKjetA8o5BvjV61VPJnBtTP",
|
||||
"network": "Stagenet",
|
||||
"spend": "4cd503040f5e43871bf37d8ca7177da655bda410859af754e24e7b44437f3151",
|
||||
"view": "af60d42b6c6e4437fd93eb32657a14967efa393630d7aee27b5973c8e1c5ad39",
|
||||
"subaddress": false,
|
||||
"integrated": false,
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "FSDinqdKK54PbjF73GgW3nUpf7bF8QbyxFCUurENmUyeEfSxSLL2hxwANBLzq1A8gTSAzzEn65hKjetA8o5BvjV61VPUrwMvP",
|
||||
"network": "Stagenet",
|
||||
"spend": "4cd503040f5e43871bf37d8ca7177da655bda410859af754e24e7b44437f3151",
|
||||
"view": "af60d42b6c6e4437fd93eb32657a14967efa393630d7aee27b5973c8e1c5ad39",
|
||||
"subaddress": true,
|
||||
"integrated": false,
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "FSDinqdKK54PbjF73GgW3nUpf7bF8QbyxFCUurENmUyeEfSxSLL2hxwANBLzq1A8gTSAzzEn65hKjetA8o5BvjV6AY5ECEhP5Nr1aCRPXdxk",
|
||||
"network": "Stagenet",
|
||||
"spend": "4cd503040f5e43871bf37d8ca7177da655bda410859af754e24e7b44437f3151",
|
||||
"view": "af60d42b6c6e4437fd93eb32657a14967efa393630d7aee27b5973c8e1c5ad39",
|
||||
"subaddress": false,
|
||||
"integrated": true,
|
||||
"payment_id": [173, 149, 78, 64, 215, 211, 66, 170],
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "FSDinqdKK54PbjF73GgW3nUpf7bF8QbyxFCUurENmUyeEfSxSLL2hxwANBLzq1A8gTSAzzEn65hKjetA8o5BvjV6AY882kTUS1D2LttnPvTR",
|
||||
"network": "Stagenet",
|
||||
"spend": "4cd503040f5e43871bf37d8ca7177da655bda410859af754e24e7b44437f3151",
|
||||
"view": "af60d42b6c6e4437fd93eb32657a14967efa393630d7aee27b5973c8e1c5ad39",
|
||||
"subaddress": true,
|
||||
"integrated": true,
|
||||
"payment_id": [254, 159, 186, 162, 1, 8, 156, 108],
|
||||
"guaranteed": false
|
||||
},
|
||||
{
|
||||
"address": "FSDinqdKK54PbjF73GgW3nUpf7bF8QbyxFCUurENmUyeEfSxSLL2hxwANBLzq1A8gTSAzzEn65hKjetA8o5BvjV61VPpBBo8F",
|
||||
"network": "Stagenet",
|
||||
"spend": "4cd503040f5e43871bf37d8ca7177da655bda410859af754e24e7b44437f3151",
|
||||
"view": "af60d42b6c6e4437fd93eb32657a14967efa393630d7aee27b5973c8e1c5ad39",
|
||||
"subaddress": false,
|
||||
"integrated": false,
|
||||
"guaranteed": true
|
||||
},
|
||||
{
|
||||
"address": "FSDinqdKK54PbjF73GgW3nUpf7bF8QbyxFCUurENmUyeEfSxSLL2hxwANBLzq1A8gTSAzzEn65hKjetA8o5BvjV61VPuUJX3b",
|
||||
"network": "Stagenet",
|
||||
"spend": "4cd503040f5e43871bf37d8ca7177da655bda410859af754e24e7b44437f3151",
|
||||
"view": "af60d42b6c6e4437fd93eb32657a14967efa393630d7aee27b5973c8e1c5ad39",
|
||||
"subaddress": true,
|
||||
"integrated": false,
|
||||
"guaranteed": true
|
||||
},
|
||||
{
|
||||
"address": "FSDinqdKK54PbjF73GgW3nUpf7bF8QbyxFCUurENmUyeEfSxSLL2hxwANBLzq1A8gTSAzzEn65hKjetA8o5BvjV6AYCZPxVAoDu21DryMoto",
|
||||
"network": "Stagenet",
|
||||
"spend": "4cd503040f5e43871bf37d8ca7177da655bda410859af754e24e7b44437f3151",
|
||||
"view": "af60d42b6c6e4437fd93eb32657a14967efa393630d7aee27b5973c8e1c5ad39",
|
||||
"subaddress": false,
|
||||
"integrated": true,
|
||||
"payment_id": [3, 115, 230, 129, 172, 108, 116, 235],
|
||||
"guaranteed": true
|
||||
},
|
||||
{
|
||||
"address": "FSDinqdKK54PbjF73GgW3nUpf7bF8QbyxFCUurENmUyeEfSxSLL2hxwANBLzq1A8gTSAzzEn65hKjetA8o5BvjV6AYFYCqKQAWL18KkpBQ8R",
|
||||
"network": "Stagenet",
|
||||
"spend": "4cd503040f5e43871bf37d8ca7177da655bda410859af754e24e7b44437f3151",
|
||||
"view": "af60d42b6c6e4437fd93eb32657a14967efa393630d7aee27b5973c8e1c5ad39",
|
||||
"subaddress": true,
|
||||
"integrated": true,
|
||||
"payment_id": [94, 122, 63, 167, 209, 225, 14, 180],
|
||||
"guaranteed": true
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user