Skip to content

Instantly share code, notes, and snippets.

@Alrighttt
Created September 28, 2020 12:48
Show Gist options
  • Save Alrighttt/8655e3a040bd49dc3dd72befd33bf0fe to your computer and use it in GitHub Desktop.
Save Alrighttt/8655e3a040bd49dc3dd72befd33bf0fe to your computer and use it in GitHub Desktop.
broken rust spk encoding
from pycctx import *
from pycc import *
from pprint import pprint
def broken():
# input_tx = 0400008085202f89016f191f16cf92ad8e6754d9869764c69a56f21100f852bf67ef5ab5c9b50ddce50100000049483045022100b33df115d19a5afe2db2abb911eb88b22eeaaa159dfa17ea08ad3ba75135fb260220393f44e86b57237b14646b6e8a610d692692e3e436438df2b59a5f03ed84cfc901ffffffff0200e1f50500000000302ea22c80208666071e49c77ae44964ed3a67fab598e9de358305195412b7de686afdd817f781032210008203000401cc4442da9ff25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000050100000000000000000000000000
known_good = Tx.decode('0400008085202f89011a0f6c11f43cee1bfd79af0081541a37e3376541408e5e2a36bda671f5161b0800000000804c7ea27ba077a26ba067a565802103682b255c40d0cde8faee381a1a50bbb89980ff24539cb8518e294d3a63cefe128140c31e779136fbb09d7fa3022ffd2de52f51ed6266a82d8056bb8a4b6d968753e246297f2d6fb6752ec68ae244bfd5f2f29edda3e057b7e204b74778a5484de23ea100af038001e4af038001e5a10001ffffffff0470235d0500000000302ea22c80208666071e49c77ae44964ed3a67fab598e9de358305195412b7de686afdd817f781032210008203000401cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44769983c0400000000120100000000000000000000000000')
# from "input_tx"
# this is the condition we will recreate
# the scriptpubkey created ( succesfully ) by the daemon:
# "asm": "a22c80208666071e49c77ae44964ed3a67fab598e9de358305195412b7de686afdd817f781032210008203000401 OP_CHECKCRYPTOCONDITION",
# "hex": "2ea22c80208666071e49c77ae44964ed3a67fab598e9de358305195412b7de686afdd817f781032210008203000401cc",
# "addresses": [
# "RRpPnBXrWBopE7iNACWttxb6N8R2rZ4taj"
# ]
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RRpPnBXrWBopE7iNACWttxb6N8R2rZ4taj')
def works():
# input_tx = '0400008085202f89015e52f87a71d6513fac627161fe734271daf5dd5c92052901594f1ddb588323d10100000049483045022100ce2ce9a64c0cb3c12982675924350fc3e1af1a5e43be76d56ec75098f7e4a5b702201ad15d1c6677842865bdba9d6ea8cba3c98d24fb9198354d926b96ddc29f0c5e01ffffffff0200c2eb0b00000000302ea22c8020e029c511da55523565835887e412e5a0c9b920801b007000df45e545f25028248103120c008203000401cc24367446f25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000120100000000000000000000000000'
known_good = Tx.decode('0400008085202f8901a8fe446a0b6c70d92c05ed9f7df84be5af0bb6350f5b36fed3e22bc99ef45a53000000007b4c79a276a072a26ba067a565802103682b255c40d0cde8faee381a1a50bbb89980ff24539cb8518e294d3a63cefe1281402f4ffffb1fa735a6064aee4979edb6111683bb7dc0b8d17d22dd7e9cd0a8066b59b516e1085112691626d6f950876636cf9a3f950db8489dc637e7ccb3614705a100af038001e4a10001ffffffff047004530b00000000302ea22c8020e029c511da55523565835887e412e5a0c9b920801b007000df45e545f25028248103120c008203000401cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44772828c0b00000000130100000000000000000000000000')
# from "input_tx"
#"asm": "a22c8020e029c511da55523565835887e412e5a0c9b920801b007000df45e545f25028248103120c008203000401 OP_CHECKCRYPTOCONDITION",
#"hex": "2ea22c8020e029c511da55523565835887e412e5a0c9b920801b007000df45e545f25028248103120c008203000401cc",
#"type": "cryptocondition",
#"addresses": [
# "R9zHrofhRbub7ER77B7NrVch3A63R39GuC"
#]
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'R9zHrofhRbub7ER77B7NrVch3A63R39GuC')
"""
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
std::vector<CC*> pks;
pks.push_back(CCNewSecp256k1(pk));
pks.push_back(CCNewSecp256k1(ParseHex("034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9a")));
CC *condCC = CCNewEval(E_MARSHAL(ss << evalcode));
CC *Sig = CCNewThreshold(1, pks);
return CCNewThreshold(2, {condCC, Sig});
}
"asm": "a22c80200d63449e06a27e9dc0340c9da89ea7fe1bb06f0edec7656b4bf94a780723304d81031210008203000401 OP_CHECKCRYPTOCONDITION",
"hex": "2ea22c80200d63449e06a27e9dc0340c9da89ea7fe1bb06f0edec7656b4bf94a780723304d81031210008203000401cc",
"reqSigs": 1,
"type": "cryptocondition",
"addresses": [
"RNRHZTATPWpybQrEmFMhqhs8WxStE2Y7Zv"
]
}
"""
def normal_1of2_single_eval():
# input_tx = '0400008085202f8901bf5cbc766e6ba3769d83e03aa5ed04e211d4100fb848869694c43f79a4ea2292010000004847304402200ba837c4211d8e86e02ce65d9fa5d847dabf05868687cc939691c53e4c5e9fa602202d8e1f5324271af0185234b5bd5b332f72e0850af441a50623ae36dfbf29e85e01ffffffff0200e1f50500000000302ea22c80200d63449e06a27e9dc0340c9da89ea7fe1bb06f0edec7656b4bf94a780723304d81031210008203000401cc84e5d70af25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac000000001f0100000000000000000000000000'
known_good = Tx.decode('0400008085202f89015b99cf669cad6e14903b1669025b079a70980721baa8eba19ad689ec1786a1fc00000000a74ca5a281a1a0819ca28194a067a565802103682b255c40d0cde8faee381a1a50bbb89980ff24539cb8518e294d3a63cefe128140b1563ac713180fce4f903b83cacb5399fceedd69627f977f82bdad8cbbe1f43408fc5ffd373d572ec1db3ffc182337d86000d6c7c583e0aba706b1d58896451ca129a5278020dbe6aab7c268254b7cedbdfbb7c29619a2962b475c1ecdfdacb8515a687388418103020000af038001e4a10001ffffffff0470235d0500000000302ea22c80200d63449e06a27e9dc0340c9da89ea7fe1bb06f0edec7656b4bf94a780723304d81031210008203000401cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44767458b0b00000000200100000000000000000000000000')
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RNRHZTATPWpybQrEmFMhqhs8WxStE2Y7Zv')
"""
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
std::vector<CC*> pks;
pks.push_back(CCNewSecp256k1(pk));
pks.push_back(CCNewSecp256k1(ParseHex("034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9a")));
CC *condCC = CCNewEval(E_MARSHAL(ss << evalcode));
CC *Sig = CCNewThreshold(2, pks);
return CCNewThreshold(2, {condCC, Sig});
}
"asm": "a22c80203188c9b36f86e8aa4eebdebe78c763f6b97377fc546bd9f2e96f1894f937a30c81031410008203000401 OP_CHECKCRYPTOCONDITION",
"hex": "2ea22c80203188c9b36f86e8aa4eebdebe78c763f6b97377fc546bd9f2e96f1894f937a30c81031410008203000401cc",
"reqSigs": 1,
"type": "cryptocondition",
"addresses": [
"RMn4SKgSFL4UfDrjB9hGb26KowJ1rG7rXv"
]
"""
def normal_2of2_single_eval():
# input_tx = '0400008085202f89015b99cf669cad6e14903b1669025b079a70980721baa8eba19ad689ec1786a1fc0100000049483045022100e4667e0c3f249d8376717f066064bf51f874695636c277be03a5f810b73b1e1302205bdc9aaf75f9a1b27ed8ebae2544e6fdfb700b74d09dd5f4513e0f7dcd131d8101ffffffff0200e1f50500000000302ea22c80203188c9b36f86e8aa4eebdebe78c763f6b97377fc546bd9f2e96f1894f937a30c81031410008203000401cc74dde104f25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000200100000000000000000000000000'
known_good = Tx.decode('0400008085202f8901a3f473860b859b8bb97256153ba6eb6349b495686d0fdaef4a0fc7c6fbbd497f00000000e64ce4a281e0a081dba281d3a081cea5658021034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9a814065643972ece020c557e764c109c5bb05706a4b50c5954bcbadc8bb79e0a2b45a47ab0a338d7fc0d1ef0227732fbeba7441d886b62b5487656579a1303e21e780a565802103682b255c40d0cde8faee381a1a50bbb89980ff24539cb8518e294d3a63cefe128140cffac62658cc994751f691d8523efcc038dd2b185940662157228d04e9e3f72773b9c423401e13236b95f70fd4f7fd4638b5083d841483016279f7e7f9690f1ca100af038001e4a10001ffffffff0470235d0500000000302ea22c80203188c9b36f86e8aa4eebdebe78c763f6b97377fc546bd9f2e96f1894f937a30c81031410008203000401cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44767458b0b00000000210100000000000000000000000000')
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RMn4SKgSFL4UfDrjB9hGb26KowJ1rG7rXv')
"""
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
return CCNewEval(E_MARSHAL(ss << evalcode));
}
this test will fail unless https://github.com/KomodoPlatform/komodo/blob/dd40e2d9d5dd136ba8793dd9121a8b818dfca582/src/script/cc.cpp#L33 is commented
"""
def single_eval():
# input_tx = '0400008085202f8901a8fe446a0b6c70d92c05ed9f7df84be5af0bb6350f5b36fed3e22bc99ef45a530100000049483045022100b779c66513db654d8e1a9b186a175a351b2953077dd847ba0d285bc214e1051202203f80ac4ea681c697ac118c321e59404d0c50c2151f4e98be237da6bad2fb898901ffffffff0200e1f505000000002b29af2780205e1effe9b7bab73dce628ccd9f0cbbb16c1e6efc6c4f311e59992a467bc119fd8103100000cc142e7e40f25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000130100000000000000000000000000'
known_good = Tx.decode('0400008085202f8901e2eb20c7dae52daf6c9ba68f8c39057ab0fbc6042651853cc6a18147b91cd006000000000706af038001e401ffffffff0470235d05000000002b29af2780205e1effe9b7bab73dce628ccd9f0cbbb16c1e6efc6c4f311e59992a467bc119fd8103100000cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44767458b0b00000000150100000000000000000000000000')
# from "input_tx"
# "asm": "af2780205e1effe9b7bab73dce628ccd9f0cbbb16c1e6efc6c4f311e59992a467bc119fd8103100000 OP_CHECKCRYPTOCONDITION",
# "hex": "29af2780205e1effe9b7bab73dce628ccd9f0cbbb16c1e6efc6c4f311e59992a467bc119fd8103100000cc",
# "reqSigs": 1,
# "type": "cryptocondition",
# "addresses": [
# "RWsiF3H1zAyQZekUh1r3zJMBu1MRbwnj37"
# ]
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RWsiF3H1zAyQZekUh1r3zJMBu1MRbwnj37')
"""
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
CC *condCC = CCNewEval(E_MARSHAL(ss << evalcode));
CC *condCC2 = CCNewEval(E_MARSHAL(ss << EVAL_REWARDS));
return CCNewThreshold(1, {condCC, condCC2});
}
"asm": "a22c80209ec93a6e6ae560515f93a1db8613e2a2053a24a7a77d4cb552887cf45367fc4281031008008203000001 OP_CHECKCRYPTOCONDITION",
"hex": "2ea22c80209ec93a6e6ae560515f93a1db8613e2a2053a24a7a77d4cb552887cf45367fc4281031008008203000001cc",
"reqSigs": 1,
"type": "cryptocondition",
"addresses": [
"RDNqU6kfPdkHbDbo7BKjhtBYKvPap661nj"
]
"""
def single_1of2eval():
# input_tx = '0400008085202f890137e4f51d1f16d092101eba976eb2317c77387b0a9ce4c61f05ca8f19f4dc617701000000484730440220782e745773241b184206c7764fa1b6ac658f503ded5217a3b5824b90a0e20e5a022067dca076c78378165ae27736422b7b563aa075cf9a1e2c2b21d3b0984ff20e3101ffffffff0200e1f50500000000302ea22c80209ec93a6e6ae560515f93a1db8613e2a2053a24a7a77d4cb552887cf45367fc4281031008008203000001cca4f5c316f25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac000000001c0100000000000000000000000000'
known_good = Tx.decode('0400008085202f8901c13f77d1fd991c746a047ff30994b53adaa491c58d64f216a5d815fafa715552000000003635a232a005af038001e4a129af278020ab61ba11a38b007ff98baa3ab20e2a584e15269fd428db3c857e2a2d568b5725810310000001ffffffff0470235d0500000000302ea22c80209ec93a6e6ae560515f93a1db8613e2a2053a24a7a77d4cb552887cf45367fc4281031008008203000001cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44767458b0b000000001d0100000000000000000000000000')
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RDNqU6kfPdkHbDbo7BKjhtBYKvPap661nj')
"""
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
CC *condCC = CCNewEval(E_MARSHAL(ss << evalcode));
CC *condCC2 = CCNewEval(E_MARSHAL(ss << EVAL_REWARDS));
return CCNewThreshold(2, {condCC, condCC2});
}
"scriptPubKey": {
"asm": "a22c802047ba0a6fb321d1eeb773856d884b7bd99a0a958c0cc0bc99ea9bc5f1cba2c23c81032008008203000001 OP_CHECKCRYPTOCONDITION",
"hex": "2ea22c802047ba0a6fb321d1eeb773856d884b7bd99a0a958c0cc0bc99ea9bc5f1cba2c23c81032008008203000001cc",
"reqSigs": 1,
"type": "cryptocondition",
"addresses": [
"RVEqEtt1yvMjujRbv1cL9jSpZ5cBPxjWF5"
]
"""
def single_2of2eval():
# input_tx = '0400008085202f8901c13f77d1fd991c746a047ff30994b53adaa491c58d64f216a5d815fafa71555201000000494830450221008692b9b5607bc1aa59d98467ba634bb323154547b9c4f8cb92a578f0fb248bf802206f99be53250f6acc43280eda381e29ec6fb356f2a955b84ec3c7750b5b669a5801ffffffff0200e1f50500000000302ea22c802047ba0a6fb321d1eeb773856d884b7bd99a0a958c0cc0bc99ea9bc5f1cba2c23c81032008008203000001cc94edcd10f25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac000000001e0100000000000000000000000000'
known_good = Tx.decode('0400008085202f8901bf5cbc766e6ba3769d83e03aa5ed04e211d4100fb848869694c43f79a4ea2292000000001211a20ea00aaf038001e4af038001e5a10001ffffffff0470235d0500000000302ea22c802047ba0a6fb321d1eeb773856d884b7bd99a0a958c0cc0bc99ea9bc5f1cba2c23c81032008008203000001cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44767458b0b000000001f0100000000000000000000000000')
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
mtx = Tx(
inputs = [
TxIn(known_good.inputs[0].previous_output, ScriptSig.from_condition(cond),
input_amount=100000000)
],
outputs = [
TxOut(amount = 100000000,
script = ScriptPubKey.from_condition(cond))
]
)
mtx.set_sapling()
mtx.sign(['UpWLKEQ1229EveQGTvr9qM5He8H8LARPFo9qoZxToswR2vkDAGQx'])
print(mtx.encode())
print("MYSPK", spk)
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RVEqEtt1yvMjujRbv1cL9jSpZ5cBPxjWF5')
"""
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
std::vector<CC*> pks;
pks.push_back(CCNewSecp256k1(pk));
CC *condCC = CCNewEval(E_MARSHAL(ss << evalcode));
return CCNewThreshold(1, {condCC});
}
"asm": "a22c8020d47a0beceac51f0c8b63bbe674929e0c75e8330e12400732220507065b38752281031004008203000001 OP_CHECKCRYPTOCONDITION",
"hex": "2ea22c8020d47a0beceac51f0c8b63bbe674929e0c75e8330e12400732220507065b38752281031004008203000001cc",
"reqSigs": 1,
"type": "cryptocondition",
"addresses": [
"RMqj4DttK9TTqHF33rrpcevGJTpEEAe26m"
]
"""
def single_nested_eval():
# input_tx = '0400008085202f89014546941a88e9df7910db96930544120285c77d081c999a38f7d275e8164d47ed0100000049483045022100afc0c76d800b5c5aebb64777fafcd9ada1bc13cca079fa5199b7481063fefa5c02205a4e4192d19e6e0725bb5aca6a66efd51d908899c53e8f3d7fed2f7a7379e46f01ffffffff0200e1f50500000000302ea22c8020d47a0beceac51f0c8b63bbe674929e0c75e8330e12400732220507065b38752281031004008203000001cce4159c2ef25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000170100000000000000000000000000'
known_good = Tx.decode('0400008085202f89013700af63fc040697a9dfd87a2e3a5b5813f9402c6d820a2c9f7aad2a6eb91433000000000d0ca209a005af038001e4a10001ffffffff0470235d0500000000302ea22c8020d47a0beceac51f0c8b63bbe674929e0c75e8330e12400732220507065b38752281031004008203000001cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44767458b0b00000000180100000000000000000000000000')
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RMqj4DttK9TTqHF33rrpcevGJTpEEAe26m')
"""
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
CC *condCC = CCNewThreshold(1, {CCNewEval(E_MARSHAL(ss << evalcode))});
return CCNewThreshold(1, {condCC});
}
"scriptPubKey": {
"asm": "a22c80201b5935ecf26c37d3f9086195d96295c353ed317e27fee218dcbdf4e86ab7b13e81031008008203000001 OP_CHECKCRYPTOCONDITION",
"hex": "2ea22c80201b5935ecf26c37d3f9086195d96295c353ed317e27fee218dcbdf4e86ab7b13e81031008008203000001cc",
"reqSigs": 1,
"type": "cryptocondition",
"addresses": [
"RQLM2R37ZMVdfj6PCCnUMBd8gPrgyBgQMG"
]
"""
def double_nested_eval():
# input_tx = '0400008085202f8901f69b9a9a627d54bf427313698645c76c5a0105d670a011ef138581d45ab16ece0100000049483045022100b1358cab0314b9e1138d5ef237b011365592e3716acb365bbe7b1cadfea2e7a402207279d860468beb68385e34b4d501a37c9d5e634d706df9e461d839fc7f4258ea01ffffffff0200e1f50500000000302ea22c80201b5935ecf26c37d3f9086195d96295c353ed317e27fee218dcbdf4e86ab7b13e81031008008203000001ccc405b022f25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac000000001a0100000000000000000000000000'
known_good = Tx.decode('0400008085202f89018a9ee181fecefa6b2f1c5b90f6778e25f05ffe291c50f6ccf817f9424ecb9927000000001312a20fa00ba209a005af038001e4a100a10001ffffffff0470235d0500000000302ea22c80201b5935ecf26c37d3f9086195d96295c353ed317e27fee218dcbdf4e86ab7b13e81031008008203000001cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44767458b0b000000001b0100000000000000000000000000')
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RQLM2R37ZMVdfj6PCCnUMBd8gPrgyBgQMG')
"""
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
return CCNewSecp256k1(pk);
}
"asm": "a527802067a2c7c70601df5bb07d508d82e366c5c956ca646e311ab0e6b10fa24dbdf29e8103020000 OP_CHECKCRYPTOCONDITION",
"hex": "29a527802067a2c7c70601df5bb07d508d82e366c5c956ca646e311ab0e6b10fa24dbdf29e8103020000cc",
"reqSigs": 1,
"type": "cryptocondition",
"addresses": [
"RLxZxJ9wKgsHBvfAXrdpkBSrY7G1rvoe3B"
]
}
},
"""
def single_secp256k():
# input_tx = '0400008085202f8901e2eb20c7dae52daf6c9ba68f8c39057ab0fbc6042651853cc6a18147b91cd006010000004847304402205003b6be7e150c8248b89bef34d17957d73b83952c247446e6d054c4621a833402204d67371e86e7e1fcf5a51c61fa292caf670b725df413e54b0690d81eb0bcb25e01ffffffff0200e1f505000000002b29a527802067a2c7c70601df5bb07d508d82e366c5c956ca646e311ab0e6b10fa24dbdf29e8103020000cc0426883af25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000150100000000000000000000000000'
known_good = Tx.decode('0400008085202f890109cc5c52af3b6e66e50ce0793a1b9ba6061fd9887352f6cc5ee8bb249f56f393000000006a4c68a565802103682b255c40d0cde8faee381a1a50bbb89980ff24539cb8518e294d3a63cefe1281402ba5b5eb266cf9ed534a706ab3881a2f56ff0caaf8db38d55d5f3277222ad18a41d5716c841a10fae3576c54fe6b7c99980b22f11a2b6987904f15fb1496b6b701ffffffff0470235d05000000002b29a527802067a2c7c70601df5bb07d508d82e366c5c956ca646e311ab0e6b10fa24dbdf29e8103020000cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44767458b0b00000000160100000000000000000000000000')
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RLxZxJ9wKgsHBvfAXrdpkBSrY7G1rvoe3B')
"""
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
std::vector<CC*> pks;
pks.push_back(CCNewSecp256k1(pk));
pks.push_back(CCNewSecp256k1(ParseHex("034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9a")));
CC *Sig = CCNewThreshold(1, pks);
return Sig;
}
"asm": "a22b8020f37bb0984eb1f7b68fb0cfe45598ea8333ad1029888560f0129058693d874a55810302080082020204 OP_CHECKCRYPTOCONDITION",
"hex": "2da22b8020f37bb0984eb1f7b68fb0cfe45598ea8333ad1029888560f0129058693d874a55810302080082020204cc",
"reqSigs": 1,
"type": "cryptocondition",
"addresses": [
"RBbja3yAQpdMr7NADLdVEUCnuMrfPtkHPQ"
]
"""
def single_1of2secp256k():
# input_tx = '004847304402205e0ac034a7e047e63fb90d028547f5e5d6740ab870ad93868c1db4fa7d80b17102207f324e3de1511cec1fa5742c51550bd57df3e54eac289add85e79e182634e5bb01ffffffff0200e1f505000000002f2da22b8020f37bb0984eb1f7b68fb0cfe45598ea8333ad1029888560f0129058693d874a55810302080082020204ccb4fdb91cf25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac000000001b0100000000000000000000000000",'
known_good = Tx.decode('0400008085202f890137e4f51d1f16d092101eba976eb2317c77387b0a9ce4c61f05ca8f19f4dc6177000000009a4c98a28194a067a565802103682b255c40d0cde8faee381a1a50bbb89980ff24539cb8518e294d3a63cefe1281402c1e0e8f5cf22cf62aba9ce7881221390012183ec30e531c8a691d3bcc97c9604a8d56a60889c4c3eacbb7ba271bb10ec405a45712231a64e910d0a49fa5f4e5a129a5278020dbe6aab7c268254b7cedbdfbb7c29619a2962b475c1ecdfdacb8515a68738841810302000001ffffffff0470235d05000000002f2da22b8020f37bb0984eb1f7b68fb0cfe45598ea8333ad1029888560f0129058693d874a55810302080082020204cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44767458b0b000000001c0100000000000000000000000000')
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RBbja3yAQpdMr7NADLdVEUCnuMrfPtkHPQ')
"""
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
std::vector<CC*> pks;
pks.push_back(CCNewSecp256k1(pk));
CC *Sig = CCNewThreshold(1, pks);
return Sig;
}
"asm": "a22b8020ac349e1a9cc6a98c52cf7015effd7b6faf41df8003e08ea79ff4d334bb53a9b5810302040082020204 OP_CHECKCRYPTOCONDITION",
"hex": "2da22b8020ac349e1a9cc6a98c52cf7015effd7b6faf41df8003e08ea79ff4d334bb53a9b5810302040082020204cc",
"reqSigs": 1,
"type": "cryptocondition",
"addresses": [
"RKSjgKgwZFo7REuJmMpFUvfxQThreHFHAD"
]
}
"""
def single_nested_secp256k():
# input_tx = '0400008085202f890109cc5c52af3b6e66e50ce0793a1b9ba6061fd9887352f6cc5ee8bb249f56f39301000000494830450221008f6bd97a55f914c2e048f6c09504b8fba249387fa202538d53bdc9df49b8d10f0220561c3ab96801bb4a4fe6a9c09254f5ad08d8e53e6ccccb97a65cb1a2af749aca01ffffffff0200e1f505000000002f2da22b8020ac349e1a9cc6a98c52cf7015effd7b6faf41df8003e08ea79ff4d334bb53a9b5810302040082020204ccf41d9234f25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000160100000000000000000000000000'
known_good = Tx.decode('0400008085202f89014546941a88e9df7910db96930544120285c77d081c999a38f7d275e8164d47ed00000000704c6ea26ba067a565802103682b255c40d0cde8faee381a1a50bbb89980ff24539cb8518e294d3a63cefe1281407a2a1cf71d8acdd01d72da27946547d3dee31527d369c9b91259fa286971cb994c91ef630a73f992791d9d6e8c4e2e3b8494e53a3909654b5e67156a679634f6a10001ffffffff0470235d05000000002f2da22b8020ac349e1a9cc6a98c52cf7015effd7b6faf41df8003e08ea79ff4d334bb53a9b5810302040082020204cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44767458b0b00000000170100000000000000000000000000')
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RKSjgKgwZFo7REuJmMpFUvfxQThreHFHAD')
"""
CC *MakeCCcond1(uint8_t evalcode,CPubKey pk)
{
std::vector<CC*> pks;
pks.push_back(CCNewSecp256k1(pk));
CC *Sig = CCNewThreshold(1, pks);
return CCNewThreshold(1, {Sig});
}
"scriptPubKey": {
"asm": "a22b8020ef561e1d29b838c43b881a399fa1be452045b9e32052e7c788676abe67163df6810302080082020204 OP_CHECKCRYPTOCONDITION",
"hex": "2da22b8020ef561e1d29b838c43b881a399fa1be452045b9e32052e7c788676abe67163df6810302080082020204cc",
"reqSigs": 1,
"type": "cryptocondition",
"addresses": [
"RMguCt9S1NfwhRJ3J3BAkgEGneXgTadWgp"
]
"""
def double_nested_secp256k():
# input_tx = '0400008085202f89013700af63fc040697a9dfd87a2e3a5b5813f9402c6d820a2c9f7aad2a6eb91433010000004948304502210091089c6fbdc4349fd07ac92c2e4988cbf453ed82d0bcdc0a3515bbc581817759022071b6764bebcd785aafe961bff1e5f79c92d3308cc33120f462e217ec878e0a0101ffffffff0200e1f505000000002f2da22b8020ef561e1d29b838c43b881a399fa1be452045b9e32052e7c788676abe67163df6810302080082020204ccd40da628f25a00002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000180100000000000000000000000000'
known_good = Tx.decode('0400008085202f8901f69b9a9a627d54bf427313698645c76c5a0105d670a011ef138581d45ab16ece00000000764c74a271a06da26ba067a565802103682b255c40d0cde8faee381a1a50bbb89980ff24539cb8518e294d3a63cefe12814065e49774e177b64a66d0becfa55c104151c66121fa1007768e3178d2b7b6e35d0aa4e81d49c3f0b04d9d5caeca99ff4bff9291509d62d647148e65c1e0a65e4aa100a10001ffffffff0470235d05000000002f2da22b8020ef561e1d29b838c43b881a399fa1be452045b9e32052e7c788676abe67163df6810302080082020204cc80969800000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac00000000000000002321034486f1474f2590e9f3d0e87d40897cb52a23e68d31a91f82338172a5b760bb9aac0000000000000000086a06e44767458b0b00000000190100000000000000000000000000')
cond = known_good.inputs[0].script.parse_condition()
pprint(cond.to_py())
spk = cond.encode_condition().hex()
spk = hex(int(len(spk)/2))[2:] + spk + 'cc'
return(addr_from_script(spk) == 'RMguCt9S1NfwhRJ3J3BAkgEGneXgTadWgp')
#print('broken', str(broken()) + '\n')
#rint('works', str(works()) + '\n')
#print('normal_1of2_single_eval', str(normal_1of2_single_eval()) + '\n')
#print('normal_2of2_single_eval', str(normal_2of2_single_eval()) + '\n')
#print('single_eval', str(single_eval()) + '\n')
#print('single_1of2eval', str(single_1of2eval()) + '\n')
print('single_2of2eval', str(single_2of2eval()) + '\n')
#print('single_nested_eval', str(single_nested_eval()) + '\n')
#print('double_nested_eval', str(double_nested_eval()) + '\n')
#print('single_secp256k', str(single_secp256k()) + '\n')
#print('single_1of2secp256k', str(single_1of2secp256k()) + '\n')
#print('single_nested_secp256k', str(single_nested_secp256k()) + '\n')
#print('double_nested_secp256k', str(double_nested_secp256k()) + '\n')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment