1747 omigoodness! the thing i thought was 'in an hour' is not actually happening this week. instead i have a trip to prepare for. for now, i'll work a little more. i generated a private key for testing! i'll send it funs! i use mainnet for testing [so that i burn funds in doing so. helps my psychological issues to waste money. the ones where i think i'm being beaten up by a group that hates me. they do less imaginary beating up if i waste my money.] 1747 i sent $0.99 in BSV to my test address ! 1749. here's the private key line for gits and shiggles: # note: this private key is not private privkey = bitcoinx.PrivateKey.from_hex('088412ca112561ff5db3db83e2756fe447d36ba3c556e158c8f016a2934f7279') 1750 now for testingish ummmmmmmmmmmmmmmmmmmmm uhhhhhhhhhhhhh i'll want to enumerate that utxo from the address. so i can prep for buliding transactions. 1751 1756 the rpc server doesn't like my scripthash =/ i have its source code! i'll see what's wrong with it! RPCError: (1, '423410ca994a0641076449 is not a valid script hash') 1757 ooookay hashX and scripthash are actually different formats. 1803 hashx's are truncated to 11 bytes. scripthashes are 32 hexadecimal bytes. 1808 woohoo! i got a utxo! a scripthash is the hexadecimal byte-reversed sha256 hash of a script output's raw bytes. there's one per address, kinda. y'know ... that means a lot of other things. anything that's a repeated script output, you could ask an electrum server to list them. .... maybe? dunno, maybe not. it's 1810. here's my utxo: [{'tx_hash': '86ca468461094f502eb21b3161366e626056f0d299d99080539cfcb4e02a8dc3', 'tx_pos': 0, 'height': 714954, 'value': 647200}] i guess i'll want my api function to convert that to a structure from a library. luckily it includes value, which is super useful for transaction building. bitcoinx doesn't have a good structure =/ i guess i'll just return the dict. 1815 i don't remember about hte 'script_sig' field in transaction inputs. i think that's where we complete he script of the preceding output, with a cryptographic signature? i wonder how ot generate it. 1816. maybe the bitcoinx tests will show how to do this. 1845 i've signed a dummy input in a repl using the electrum (not electrumx) libraries. pre_hash = sha256d(bfh(self.serialize_preimage(txin_index, bip143_shared_txdigest_fields=bip143_shared_txdigest_fields))) privkey = ecc.ECPrivkey(privkey_bytes) sig = privkey.sign_transaction(pre_hash) sig = bh2u(sig) + sighash_type looks like it serializes something, then double-sha256's the bytes, then performs an EC signature on that hash ... then passes that to bh2u and appends sighash_type (a basic byte) self.add_signature_to_txin(txin_idx=i, signing_pubkey=pubkey, sig=sig) so 3 funcs to sort out elif txin.script_type in ['p2pkh', 'p2wpkh', 'p2wpkh-p2sh']: pubkey = pubkeys[0] pkh = bh2u(hash_160(bfh(pubkey))) return bitcoin.pubkeyhash_to_p2pkh_script(pkh) gets p2pkh script def pubkeyhash_to_p2pkh_script(pubkey_hash160: str) -> str: return construct_script([ opcodes.OP_DUP, opcodes.OP_HASH160, pubkey_hash160, opcodes.OP_EQUALVERIFY, opcodes.OP_CHECKSIG ]) in electrumx, there's electrumx.lib.script.ScriptPubKey.P2PKH_script: @classmethod def P2PKH_script(cls, hash160): return (bytes((OpCodes.OP_DUP, OpCodes.OP_HASH160)) + Script.push_data(hash160) + bytes((OpCodes.OP_EQUALVERIFY, OpCodes.OP_CHECKSIG))) this appears to be the electrum-non-x scriptsig for p2pkh: elif _type == 'p2pkh': return construct_script([sig_list[0], pubkeys[0]]) i'll try to do it by hand. 1901. hmm. 1907 this makes a p2pkh script in bitcoinx: privkey.public_key.P2PKH_script().to_bytes() 1920 in bitcoinx, privkey.sign(data, bitcoinx.double_sha256) 1926 i've drafted code to sign an op_return transaction using only the bitcoinx library 1940 1926 might have been a typo for 1936 or such. i'm noticing that bitcoinx is bsv-specific. might be a better library out there. dunno. 1951 transaction was rejected by network rules ! which is much farther. 1953 i believe i had set the transaction version to 0 instead of 1. uncertain. 1954 version fixed. now: 'missing inputs'. i vaguely recall that 'missing inputs' might mean that the node i'm sending the transaction to, hasn't received the utxo i'm spending. 1958 didn't byte-reverse the txid in the input ! 1958 next network rule: mempool min fee not met. i wonder what my fee was calculated to be. is there a way to query for this min fee? i have accomplished much. sending this spamlog.