mirror of
https://github.com/Qortal/pirate-librustzcash.git
synced 2025-02-22 13:55:46 +00:00
legacy::Script::address
This is the counterpart to legacy::TransparentAddress::script.
This commit is contained in:
parent
3584485516
commit
ff5775418b
@ -38,6 +38,31 @@ impl Script {
|
|||||||
pub fn write<W: Write>(&self, mut writer: W) -> io::Result<()> {
|
pub fn write<W: Write>(&self, mut writer: W) -> io::Result<()> {
|
||||||
Vector::write(&mut writer, &self.0, |w, e| w.write_u8(*e))
|
Vector::write(&mut writer, &self.0, |w, e| w.write_u8(*e))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the address that this Script contains, if any.
|
||||||
|
pub fn address(&self) -> Option<TransparentAddress> {
|
||||||
|
if self.0.len() == 25
|
||||||
|
&& self.0[0] == OpCode::Dup as u8
|
||||||
|
&& self.0[1] == OpCode::Hash160 as u8
|
||||||
|
&& self.0[2] == 0x14
|
||||||
|
&& self.0[23] == OpCode::EqualVerify as u8
|
||||||
|
&& self.0[24] == OpCode::CheckSig as u8
|
||||||
|
{
|
||||||
|
let mut hash = [0; 20];
|
||||||
|
hash.copy_from_slice(&self.0[3..23]);
|
||||||
|
Some(TransparentAddress::PublicKey(hash))
|
||||||
|
} else if self.0.len() == 23
|
||||||
|
&& self.0[0] == OpCode::Hash160 as u8
|
||||||
|
&& self.0[1] == 0x14
|
||||||
|
&& self.0[22] == OpCode::Equal as u8
|
||||||
|
{
|
||||||
|
let mut hash = [0; 20];
|
||||||
|
hash.copy_from_slice(&self.0[2..22]);
|
||||||
|
Some(TransparentAddress::Script(hash))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Shl<OpCode> for Script {
|
impl Shl<OpCode> for Script {
|
||||||
@ -151,7 +176,8 @@ mod tests {
|
|||||||
0x76, 0xa9, 0x14, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
|
0x76, 0xa9, 0x14, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
|
||||||
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x88, 0xac,
|
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x88, 0xac,
|
||||||
]
|
]
|
||||||
)
|
);
|
||||||
|
assert_eq!(addr.script().address(), Some(addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -163,6 +189,7 @@ mod tests {
|
|||||||
0xa9, 0x14, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
0xa9, 0x14, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
||||||
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x87,
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x87,
|
||||||
]
|
]
|
||||||
)
|
);
|
||||||
|
assert_eq!(addr.script().address(), Some(addr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user