def debug_make_and_req_block(self, tx_list: list, prev_block_generator: Optional['Address'] = None, prev_block_validators: Optional[List['Address']] = None, prev_block_votes: Optional[List[Tuple['Address', int]]] = None, block: 'Block' = None) -> tuple: # Prevent a base transaction from being added to the original tx_list tx_list = copy.copy(tx_list) if block is None: block_height: int = self._block_height + 1 block_hash = create_block_hash() timestamp_us = create_timestamp() block = Block(block_height, block_hash, timestamp_us, self._prev_block_hash, 0) context = IconScoreContext(IconScoreContextType.DIRECT) is_block_editable = False self.icon_service_engine._set_revision_to_context(context) if context.is_decentralized(): is_block_editable = True tx_results, state_root_hash, added_transactions, main_prep_as_dict = \ self.icon_service_engine.invoke(block=block, tx_requests=tx_list, prev_block_generator=prev_block_generator, prev_block_validators=prev_block_validators, prev_block_votes=prev_block_votes, is_block_editable=is_block_editable) return block, tx_results, state_root_hash, added_transactions, main_prep_as_dict
def _genesis_invoke(self) -> dict: tx_hash = create_tx_hash() timestamp_us = create_timestamp() request_params = { 'txHash': tx_hash, 'version': self._version, 'timestamp': timestamp_us } tx = { 'method': 'icx_sendTransaction', 'params': request_params, 'genesisData': { "accounts": [{ "name": "genesis", "address": self._genesis, "balance": 100 * self._icx_factor }, { "name": "fee_treasury", "address": self._fee_treasury, "balance": 0 }, { "name": "_admin", "address": self._admin, "balance": 1_000_000 * self._icx_factor }] }, }
def _make_invalid_deploy_tx(self, addr_from: 'Address', addr_to: 'Address', content: Any = None): deploy_params = {} deploy_data = {'contentType': 'application/zip', 'content': content, 'params': deploy_params} timestamp_us = create_timestamp() nonce = 0 request_params = { "version": self._version, "from": addr_from, "to": addr_to, "stepLimit": self._step_limit, "timestamp": timestamp_us, "nonce": nonce, "signature": self._signature, "dataType": "deploy", "data": deploy_data } method = 'icx_sendTransaction' # Insert txHash into request params request_params['txHash'] = create_tx_hash() tx = { 'method': method, 'params': request_params } return tx
def _genesis_invoke(self) -> dict: tx_hash = create_tx_hash() timestamp_us = create_timestamp() request_params = { 'txHash': tx_hash, 'version': self._version, 'timestamp': timestamp_us } tx = { 'method': 'icx_sendTransaction', 'params': request_params, 'genesisData': { "accounts": [{ "name": "genesis", "address": self._genesis, "balance": 100 * self._icx_factor }, { "name": "fee_treasury", "address": self._fee_treasury, "balance": 0 }] }, } block_hash = create_block_hash() block = Block(self._block_height, block_hash, timestamp_us, None) invoke_response: dict = self.icon_service_engine.invoke(block, [tx]) self.icon_service_engine.commit(block) self._block_height += 1 self._prev_block_hash = block_hash return invoke_response
def _create_invalid_deploy_tx(self, from_: Union['EOAAccount', 'Address', None], to_: Union['EOAAccount', 'Address'], content: Any = None): addr_from: Optional['Address'] = self._convert_address_from_address_type(from_) addr_to: 'Address' = self._convert_address_from_address_type(to_) deploy_params: dict = {} deploy_data: dict = {'contentType': 'application/zip', 'content': content, 'params': deploy_params} timestamp_us: int = create_timestamp() nonce: int = 0 request_params = { "version": self._version, "from": addr_from, "to": addr_to, "stepLimit": DEFAULT_DEPLOY_STEP_LIMIT, "timestamp": timestamp_us, "nonce": nonce, "signature": self._signature, "dataType": "deploy", "data": deploy_data } method = 'icx_sendTransaction' # Insert txHash into request params request_params['txHash'] = create_tx_hash() tx = { 'method': method, 'params': request_params } return tx
def _make_icx_send_tx(self, addr_from: Optional['Address'], addr_to: Union['Address', 'MalformedAddress'], value: int, disable_pre_validate: bool = False, support_v2: bool = False): timestamp_us = create_timestamp() nonce = 0 request_params = { "from": addr_from, "to": addr_to, "value": value, "stepLimit": self._step_limit, "timestamp": timestamp_us, "nonce": nonce, "signature": self._signature } if support_v2: request_params["fee"] = 10**16 else: request_params["version"] = self._version method = 'icx_sendTransaction' # Insert txHash into request params request_params['txHash'] = create_tx_hash() tx = {'method': method, 'params': request_params} if not disable_pre_validate: self.icon_service_engine.validate_transaction(tx) return tx
def _make_score_call_tx(self, addr_from: Optional['Address'], addr_to: 'Address', method: str, params: dict, value: int = 0): timestamp_us = create_timestamp() nonce = 0 request_params = { "version": self._version, "from": addr_from, "to": addr_to, "value": value, "stepLimit": self._step_limit, "timestamp": timestamp_us, "nonce": nonce, "signature": self._signature, "dataType": "call", "data": { "method": method, "params": params } } method = 'icx_sendTransaction' # Insert txHash into request params request_params['txHash'] = create_tx_hash() tx = {'method': method, 'params': request_params} self.icon_service_engine.validate_transaction(tx) return tx
def _make_and_req_block_for_issue_test(self, tx_list: list, block_height: int = None, prev_block_generator: Optional['Address'] = None, prev_block_validators: Optional[List['Address']] = None, prev_block_votes: Optional[List[Tuple['Address', int]]] = None, is_block_editable=False, cumulative_fee: int = 0) -> Tuple['Block', List[bytes]]: if block_height is None: block_height: int = self._block_height + 1 block_hash = create_block_hash() timestamp_us = create_timestamp() block = Block(block_height, block_hash, timestamp_us, self._prev_block_hash, cumulative_fee) tx_results, _, added_transactions, main_prep_as_dict = \ self.icon_service_engine.invoke(block=block, tx_requests=tx_list, prev_block_generator=prev_block_generator, prev_block_validators=prev_block_validators, prev_block_votes=prev_block_votes, is_block_editable=is_block_editable) self.add_tx_result(tx_results) return block, self.get_hash_list_from_tx_list(tx_list)
def _create_invalid_block(self, block_height: int = None) -> 'Block': if block_height is None: block_height: int = self._block_height block_hash = create_block_hash() timestamp_us = create_timestamp() return Block(block_height, block_hash, timestamp_us, self._prev_block_hash, 0)
def create_message_tx(self, from_: Union['EOAAccount', 'Address', None], to_: Union['EOAAccount', 'Address', 'MalformedAddress'], data: bytes = None, value: int = 0) -> dict: addr_from: Optional['Address'] = self._convert_address_from_address_type(from_) addr_to: Optional['Address', 'MalformedAddress'] = self._convert_address_from_address_type(to_) timestamp_us = create_timestamp() nonce = 0 request_params = { "version": self._version, "from": addr_from, "to": addr_to, "value": value, "stepLimit": DEFAULT_BIG_STEP_LIMIT, "timestamp": timestamp_us, "nonce": nonce, "signature": self._signature, "dataType": "message", "data": '0x' + data.hex(), } method = 'icx_sendTransaction' # Inserts txHash into request params request_params['txHash'] = create_tx_hash() tx = { 'method': method, 'params': request_params } self.icon_service_engine.validate_transaction(tx) return tx
def make_and_req_block(self, tx_list: list, block_height: int = None, prev_block_generator: Optional['Address'] = None, prev_block_validators: Optional[List['Address']] = None, prev_block_votes: Optional[List[Tuple['Address', int]]] = None, block_hash: bytes = None) \ -> Tuple['Block', List[bytes]]: if block_height is None: block_height: int = self._block_height + 1 if block_hash is None: block_hash = create_block_hash() timestamp_us = create_timestamp() block = Block(block_height, block_hash, timestamp_us, self._prev_block_hash, 0) context = IconScoreContext(IconScoreContextType.DIRECT) is_block_editable = False self.icon_service_engine._set_revision_to_context(context) if context.is_decentralized(): is_block_editable = True tx_results, state_root_hash, added_transactions, main_prep_as_dict = \ self.icon_service_engine.invoke(block=block, tx_requests=tx_list, prev_block_generator=prev_block_generator, prev_block_validators=prev_block_validators, prev_block_votes=prev_block_votes, is_block_editable=is_block_editable) self.add_tx_result(tx_results) return block, self.get_hash_list_from_tx_list(tx_list)
def _make_message_tx(self, addr_from: Union['Address', None], addr_to: 'Address', data: bytes = None, value: int = 0): timestamp_us = create_timestamp() nonce = 0 request_params = { "version": self._version, "from": addr_from, "to": addr_to, "value": value, "stepLimit": self._step_limit, "timestamp": timestamp_us, "nonce": nonce, "signature": self._signature, "dataType": "message", "data": '0x' + data.hex(), } method = 'icx_sendTransaction' # Inserts txHash into request params request_params['txHash'] = create_tx_hash() tx = { 'method': method, 'params': request_params } self.icon_service_engine.validate_transaction(tx) return tx
def create_deploy_score_tx(self, score_root: str, score_name: str, from_: Union['EOAAccount', 'Address', None], to_: Union['EOAAccount', 'Address'], deploy_params: dict = None, timestamp_us: int = None, data: bytes = None, is_sys: bool = False, pre_validation_enabled: bool = True, step_limit: int = DEFAULT_DEPLOY_STEP_LIMIT) -> dict: addr_from: Optional['Address'] = self._convert_address_from_address_type(from_) addr_to: 'Address' = self._convert_address_from_address_type(to_) if deploy_params is None: deploy_params = {} score_path = get_score_path(score_root, score_name) if is_sys: deploy_data = {'contentType': 'application/tbears', 'content': score_path, 'params': deploy_params} else: if data is None: mz = InMemoryZip() mz.zip_in_memory(score_path) data = f'0x{mz.data.hex()}' else: data = f'0x{bytes.hex(data)}' deploy_data = {'contentType': 'application/zip', 'content': data, 'params': deploy_params} if timestamp_us is None: timestamp_us = create_timestamp() nonce = 0 request_params = { "version": self._version, "from": addr_from, "to": addr_to, "stepLimit": step_limit, "timestamp": timestamp_us, "nonce": nonce, "signature": self._signature, "dataType": "deploy", "data": deploy_data } method = 'icx_sendTransaction' # Insert txHash into request params request_params['txHash'] = create_tx_hash() tx = { 'method': method, 'params': request_params } if pre_validation_enabled: self.icon_service_engine.validate_transaction(tx) return tx
def _make_deploy_tx(self, score_root: str, score_name: str, addr_from: Union['Address', None], addr_to: 'Address', deploy_params: dict = None, timestamp_us: int = None, data: bytes = None, is_sys: bool = False): if deploy_params is None: deploy_params = {} score_path = get_score_path(score_root, score_name) if is_sys: deploy_data = { 'contentType': 'application/tbears', 'content': score_path, 'params': deploy_params } else: if data is None: mz = InMemoryZip() mz.zip_in_memory(score_path) data = f'0x{mz.data.hex()}' else: data = f'0x{bytes.hex(data)}' deploy_data = { 'contentType': 'application/zip', 'content': data, 'params': deploy_params } if timestamp_us is None: timestamp_us = create_timestamp() nonce = 0 request_params = { "version": self._version, "from": addr_from, "to": addr_to, "stepLimit": self._step_limit, "timestamp": timestamp_us, "nonce": nonce, "signature": self._signature, "dataType": "deploy", "data": deploy_data } method = 'icx_sendTransaction' # Insert txHash into request params request_params['txHash'] = create_tx_hash() tx = {'method': method, 'params': request_params} self.icon_service_engine.validate_transaction(tx) return tx
def _create_base_transaction(self): context = IconScoreContext(IconScoreContextType.DIRECT) context._preps = context.engine.prep.preps.copy(mutable=True) context._term = context.engine.prep.term.copy() block_height: int = self._block_height block_hash = create_block_hash() timestamp_us = create_timestamp() block = Block(block_height, block_hash, timestamp_us, self._prev_block_hash, 0) context.block = block transaction = BaseTransactionCreator.create_base_transaction(context) return transaction
def _make_and_req_block(self, tx_list: list, block_height: int = None) -> tuple: if block_height is None: block_height: int = self._block_height block_hash = create_block_hash() timestamp_us = create_timestamp() block = Block(block_height, block_hash, timestamp_us, self._prev_block_hash) invoke_response, _ = self.icon_service_engine.invoke(block, tx_list) return block, invoke_response
def _make_issue_info(self) -> tuple: context = IconScoreContext(IconScoreContextType.DIRECT) context._preps = context.engine.prep.preps.copy(mutable=True) context._term = context.engine.prep.term.copy() block_height: int = self._block_height block_hash = create_block_hash() timestamp_us = create_timestamp() block = Block(block_height, block_hash, timestamp_us, self._prev_block_hash, 0) context.block = block issue_data = IconScoreContext.engine.issue.create_icx_issue_info(context) total_issue_amount = 0 for group_dict in issue_data.values(): if "value" in group_dict: total_issue_amount += group_dict["value"] return issue_data, total_issue_amount
def _make_base_tx(self, data: dict): timestamp_us = create_timestamp() request_params = { "version": self._version, "timestamp": timestamp_us, "dataType": "base", "data": data } method = 'icx_sendTransaction' request_params['txHash'] = create_tx_hash() tx = { 'method': method, 'params': request_params } return tx
def create_deposit_tx(self, from_: Union['EOAAccount', 'Address', None], to_: 'Address', action: str, params: dict, value: int = 0, pre_validation_enabled: bool = True, step_limit: int = DEFAULT_BIG_STEP_LIMIT) -> dict: addr_from: Optional['Address'] = self._convert_address_from_address_type(from_) addr_to: 'Address' = self._convert_address_from_address_type(to_) timestamp_us = create_timestamp() nonce = 0 request_params = { "version": self._version, "from": addr_from, "to": addr_to, "value": value, "stepLimit": step_limit, "timestamp": timestamp_us, "nonce": nonce, "signature": self._signature, "dataType": "deposit", "data": { "action": action, } } for k, v in params.items(): request_params["data"][k] = v method = 'icx_sendTransaction' # Insert txHash into request params request_params['txHash'] = create_tx_hash() tx = { 'method': method, 'params': request_params } if pre_validation_enabled: self.icon_service_engine.validate_transaction(tx) return tx
def create_score_call_tx(self, from_: Union['EOAAccount', 'Address', None], to_: 'Address', func_name: str, params: Optional[dict] = None, value: int = 0, pre_validation_enabled: bool = True, step_limit: int = DEFAULT_BIG_STEP_LIMIT) -> dict: from_: Optional['Address'] = self._convert_address_from_address_type(from_) if params is None: params: dict = {} timestamp_us = create_timestamp() nonce = 0 request_params = { "version": self._version, "from": from_, "to": to_, "value": value, "stepLimit": step_limit, "timestamp": timestamp_us, "nonce": nonce, "signature": self._signature, "dataType": "call", "data": { "method": func_name, "params": params } } method = 'icx_sendTransaction' # Insert txHash into request params request_params['txHash'] = create_tx_hash() tx = { 'method': method, 'params': request_params } if pre_validation_enabled: self.icon_service_engine.validate_transaction(tx) return tx
def _genesis_invoke(self) -> tuple: tx_hash = create_tx_hash() timestamp_us = create_timestamp() request_params = { 'txHash': tx_hash, 'version': self._version, 'timestamp': timestamp_us } tx = { 'method': 'icx_sendTransaction', 'params': request_params, 'genesisData': { "accounts": [ { "name": "genesis", "address": self._genesis, "balance": 0 }, { "name": "fee_treasury", "address": self._fee_treasury, "balance": 0 }, { "name": "_admin", "address": self._admin.address, "balance": icx_to_loop(TOTAL_SUPPLY) } ] }, } block_hash = create_block_hash() block = Block(self._block_height + 1, block_hash, timestamp_us, None, 0) invoke_response: tuple = self.icon_service_engine.invoke( block, [tx] ) self.icon_service_engine.commit(block.height, block.hash, None) self._block_height += 1 self._prev_block_hash = block_hash return invoke_response
def create_transfer_icx_tx(self, from_: Union['EOAAccount', 'Address', None], to_: Union['EOAAccount', 'Address', 'MalformedAddress'], value: int, disable_pre_validate: bool = False, support_v2: bool = False, step_limit: int = DEFAULT_STEP_LIMIT) -> dict: addr_from: Optional[ 'Address'] = self._convert_address_from_address_type(from_) addr_to: Optional[ 'Address', 'MalformedAddress'] = self._convert_address_from_address_type(to_) timestamp_us = create_timestamp() nonce = 0 request_params = { "from": addr_from, "to": addr_to, "value": value, "stepLimit": step_limit, "timestamp": timestamp_us, "nonce": nonce, "signature": self._signature } if support_v2: request_params["fee"] = 10**16 else: request_params["version"] = self._version method = 'icx_sendTransaction' # Insert txHash into request params request_params['txHash'] = create_tx_hash() tx = {'method': method, 'params': request_params} if not disable_pre_validate: self.icon_service_engine.validate_transaction(tx) return tx
def _create_dummy_block_by_height(self, height: int): block_hash = create_block_hash() prev_block_hash = create_block_hash() timestamp_us = create_timestamp() return Block(height, block_hash, timestamp_us, prev_block_hash, 0)