11 from io
import BytesIO
32 {
"category":
"send",
"account":
"",
"amount":Decimal(
"-0.1"),
"confirmations":0})
35 {
"category":
"receive",
"account":
"",
"amount":Decimal(
"0.1"),
"confirmations":0})
41 {
"category":
"send",
"account":
"",
"amount":Decimal(
"-0.1"),
"confirmations":1})
44 {
"category":
"receive",
"account":
"",
"amount":Decimal(
"0.1"),
"confirmations":1})
49 {
"txid":txid,
"category":
"send"},
50 {
"amount":Decimal(
"-0.2")})
52 {
"txid":txid,
"category":
"receive"},
53 {
"amount":Decimal(
"0.2")})
63 {
"category":
"send",
"amount":Decimal(
"-0.11")},
66 {
"category":
"receive",
"amount":Decimal(
"0.11")},
69 {
"category":
"send",
"amount":Decimal(
"-0.22")},
72 {
"category":
"receive",
"amount":Decimal(
"0.22")},
75 {
"category":
"send",
"amount":Decimal(
"-0.33")},
78 {
"category":
"receive",
"amount":Decimal(
"0.33")},
79 {
"txid":txid,
"account" :
"from1"} )
81 {
"category":
"send",
"amount":Decimal(
"-0.44")},
82 {
"txid":txid,
"account" :
""} )
84 {
"category":
"receive",
"amount":Decimal(
"0.44")},
85 {
"txid":txid,
"account" :
"toself"} )
94 {
"category":
"receive",
"amount":Decimal(
"0.1")},
95 {
"txid":txid,
"account" :
"watchonly"} )
104 def is_opt_in(node, txid):
105 rawtx = node.getrawtransaction(txid, 1)
106 for x
in rawtx[
"vin"]:
107 if x[
"sequence"] < 0xfffffffe:
112 def get_unconfirmed_utxo_entry(node, txid_to_match):
113 utxo = node.listunspent(0, 0)
115 if i[
"txid"] == txid_to_match:
121 assert(
not is_opt_in(self.
nodes[0], txid_1))
127 utxo_to_use = get_unconfirmed_utxo_entry(self.
nodes[1], txid_1)
130 inputs = [{
"txid":utxo_to_use[
"txid"],
"vout":utxo_to_use[
"vout"]}]
137 assert(
not is_opt_in(self.
nodes[1], txid_2))
143 utxo_to_use = get_unconfirmed_utxo_entry(self.
nodes[0], txid_2)
144 inputs = [{
"txid": txid_2,
"vout":utxo_to_use[
"vout"]}]
148 tx3_modified.vin[0].nSequence = 0
153 assert(is_opt_in(self.
nodes[0], txid_3))
160 utxo_to_use = get_unconfirmed_utxo_entry(self.
nodes[1], txid_3)
161 inputs = [{
"txid": txid_3,
"vout":utxo_to_use[
"vout"]}]
167 assert(
not is_opt_in(self.
nodes[1], txid_4))
174 tx3_b.vout[0].nValue -= int(Decimal(
"0.004") * COIN)
178 assert(is_opt_in(self.
nodes[0], txid_3b))
185 for n
in self.
nodes[0:2]:
186 assert_equal(n.gettransaction(txid_1)[
"bip125-replaceable"],
"no")
187 assert_equal(n.gettransaction(txid_2)[
"bip125-replaceable"],
"no")
188 assert_equal(n.gettransaction(txid_3)[
"bip125-replaceable"],
"yes")
189 assert_equal(n.gettransaction(txid_3b)[
"bip125-replaceable"],
"yes")
190 assert_equal(n.gettransaction(txid_4)[
"bip125-replaceable"],
"unknown")
199 if __name__ ==
'__main__':
def hex_str_to_bytes(hex_str)
def assert_array_result(object_array, to_match, expected, should_not_find=False)
def run_rbf_opt_in_test(self)
def start_nodes(num_nodes, dirname, extra_args=None, rpchost=None, binary=None)
UniValue sendmany(const UniValue ¶ms, bool fHelp)
UniValue getaccountaddress(const UniValue ¶ms, bool fHelp)
UniValue sendtoaddress(const UniValue ¶ms, bool fHelp)
UniValue getnewaddress(const UniValue ¶ms, bool fHelp)
def sync_mempools(rpc_connections, wait=1)
UniValue signrawtransaction(const UniValue ¶ms, bool fHelp)
UniValue createrawtransaction(const UniValue ¶ms, bool fHelp)
UniValue createmultisig(const UniValue ¶ms, bool fHelp)
UniValue importaddress(const UniValue ¶ms, bool fHelp)
UniValue generate(const UniValue ¶ms, bool fHelp)
UniValue sendrawtransaction(const UniValue ¶ms, bool fHelp)
UniValue getrawmempool(const UniValue ¶ms, bool fHelp)
def assert_equal(thing1, thing2)
UniValue gettransaction(const UniValue ¶ms, bool fHelp)
def bytes_to_hex_str(byte_str)