def _get_channel_state_from_blockchain(self, channel_id):
     abi = get_contract_def("MultiPartyEscrow")
     channel_abi = abi_get_element_by_name(abi, "channels")
     channel = self.call_contract_command("MultiPartyEscrow", "channels",
                                          [channel_id])
     channel = abi_decode_struct_to_dict(channel_abi, channel)
     channel["channelId"] = channel_id
     return channel
Beispiel #2
0
def read_default_contract_address(w3, contract_name):
    chain_id = w3.version.network  # this will raise exception if endpoint is invalid
    contract_def = get_contract_def(contract_name)
    networks = contract_def["networks"]
    contract_address = networks.get(chain_id, {}).get("address", None)
    if not contract_address:
        raise Exception()
    contract_address = w3.toChecksumAddress(contract_address)
    return contract_address
Beispiel #3
0
def add_contract_function_options(parser, contract_name):
    add_contract_identity_arguments(parser)

    contract_def = get_contract_def(contract_name)
    parser.set_defaults(contract_def=contract_def)
    parser.set_defaults(contract_name=contract_name)

    fns = []
    for fn in filter(lambda e: e["type"] == "function", contract_def["abi"]):
        fns.append({
            "name":
            fn["name"],
            "named_inputs":
            [(i["name"], i["type"]) for i in fn["inputs"] if i["name"] != ""],
            "positional_inputs":
            [i["type"] for i in fn["inputs"] if i["name"] == ""]
        })

    if len(fns) > 0:
        subparsers = parser.add_subparsers(
            title="{} functions".format(contract_name), metavar="FUNCTION")
        subparsers.required = True

        for fn in fns:
            fn_p = subparsers.add_parser(fn["name"],
                                         help="{} function".format(fn["name"]))
            fn_p.set_defaults(fn="call")
            fn_p.set_defaults(contract_function=fn["name"])
            for i in fn["positional_inputs"]:
                fn_p.add_argument(i,
                                  action=AppendPositionalAction,
                                  type=type_converter(i),
                                  metavar=i.upper())
            for i in fn["named_inputs"]:
                fn_p.add_argument("contract_named_input_{}".format(i[0]),
                                  type=type_converter(i[1]),
                                  metavar="{}_{}".format(
                                      i[0].lstrip("_"), i[1].upper()))
            fn_p.add_argument("--transact",
                              action="store_const",
                              const="transact",
                              dest="fn",
                              help="Invoke contract function as transaction")
            add_transaction_arguments(fn_p)
 def _get_all_filtered_channels(self, topics_without_signature):
     """ get all filtered chanels from blockchain logs """
     mpe_address = self.get_mpe_address()
     event_signature = self.ident.w3.sha3(
         text=
         "ChannelOpen(uint256,uint256,address,address,address,bytes32,uint256,uint256)"
     ).hex()
     topics = [event_signature] + topics_without_signature
     logs = self.ident.w3.eth.getLogs({
         "fromBlock": self.args.from_block,
         "address": mpe_address,
         "topics": topics
     })
     abi = get_contract_def("MultiPartyEscrow")
     event_abi = abi_get_element_by_name(abi, "ChannelOpen")
     channels_ids = [
         get_event_data(event_abi, l)["args"]["channelId"] for l in logs
     ]
     return channels_ids
Beispiel #5
0
 def get_ContractCommand(self,
                         contract_name,
                         contract_address,
                         contract_fn,
                         contract_params,
                         is_silent=True):
     contract_def = get_contract_def(contract_name)
     if (is_silent):
         out_f = None
         err_f = None
     else:
         out_f = self.out_f
         err_f = self.err_f
     return ContractCommand(
         config=self.config,
         args=self.get_contract_argser(
             contract_address=contract_address,
             contract_function=contract_fn,
             contract_def=contract_def,
             contract_name=contract_name)(*contract_params),
         out_f=out_f,
         err_f=err_f,
         w3=self.w3,
         ident=self.ident)