class TranInfoLogParser(BaseParser): table = "trans_ret_log" colIndex = [ ColumnIndex(name="trans_id", fromAppend=True), ColumnIndex(name="log_index", fromAppend=True), ColumnIndex(name="address", oc=OriginColumn(name="address")), ColumnIndex(name="data", oc=OriginColumn(name="data")), ] def Parse(self, writer, data, appendData): ret = super().Parse(writer, data, appendData) if not ret: return False for i, topic in enumerate(data.topics): writer.write( "trans_ret_log_topics", [ appendData["trans_id"], appendData["log_index"], i, bytes2HexStr(topic), ], ) return True
class CallValueInfoParser(BaseParser): table = "trans_ret_inter_trans_call_value" colIndex = [ ColumnIndex(name="trans_id", fromAppend=True), ColumnIndex(name="inter_index", fromAppend=True), ColumnIndex(name="call_index", fromAppend=True), ColumnIndex( name="call_value", oc=OriginColumn(name="callValue", colType="int64"), ), ColumnIndex( name="token_id", oc=OriginColumn(name="tokenId", colType="string"), ), ]
class TranInfoInterTransParser(BaseParser): table = "trans_ret_inter_trans" colIndex = [ ColumnIndex(name="trans_id", fromAppend=True), ColumnIndex(name="inter_index", fromAppend=True), ColumnIndex(name="hash", oc=OriginColumn(name="hash")), ColumnIndex( name="caller_address", oc=OriginColumn(name="caller_address", castFunc=addressFromBytes), ), ColumnIndex( name="transferTo_address", oc=OriginColumn(name="transferTo_address", castFunc=addressFromBytes), ), ColumnIndex(name="note", oc=OriginColumn(name="note")), ColumnIndex(name="rejected", oc=OriginColumn(name="rejected", colType="bool")), ] callValueParser = CallValueInfoParser() def Parse(self, writer, data, appendData): ret = super().Parse(writer, data, appendData) if not ret: return False for i, callValue in enumerate(data.callValueInfo): appendData.update({"call_index": i}) ret = self.callValueParser.Parse(writer, callValue, appendData) if not ret: return False return True
class FrozenSupplyParser(BaseParser): table = "asset_issue_v2_frozen_supply" colIndex = [ ColumnIndex( name="asset_id", fromAppend=True, ), ColumnIndex( name="asset_name", fromAppend=True, ), ColumnIndex( name="frozen_amount", oc=OriginColumn(name="frozen_amount", colType="int64"), ), ColumnIndex( name="frozen_days", oc=OriginColumn(name="frozen_days", colType="int64"), ), ]
class OrderDetailParser(BaseParser): table = "trans_ret_order_detail" colIndex = [ ColumnIndex(name="trans_id", fromAppend=True), ColumnIndex(name="order_index", fromAppend=True), ColumnIndex(name="call_index", fromAppend=True), ColumnIndex( name="makerOrderId", oc=OriginColumn(name="makerOrderId"), ), ColumnIndex( name="takerOrderId", oc=OriginColumn(name="takerOrderId"), ), ColumnIndex( name="fillSellQuantity", oc=OriginColumn(name="fillSellQuantity", colType="bigint"), ), ColumnIndex( name="fillSellQuantity", oc=OriginColumn(name="fillSellQuantity", colType="bigint"), ), ]
class AssetIssueV2Parser(BaseParser): def __init__(self): self.frozenSupplyParser = FrozenSupplyParser() colIndex = [ ColumnIndex( name="id", oc=OriginColumn( name="id", colType="string" ), # TODO: check id not null and unique after decode ), # ColumnIndex( # name="owner_address", # oc=OriginColumn(name="owner_address", castFunc=addressFromBytes), # ), ColumnIndex( name="name", oc=OriginColumn(name="name", castFunc=autoDecode), ), # ColumnIndex( # name="abbr", # oc=OriginColumn(name="abbr", castFunc=autoDecode), # ), # ColumnIndex( # name="total_supply", # oc=OriginColumn(name="total_supply", colType="int64"), # ), # ColumnIndex( # name="trx_num", # oc=OriginColumn(name="trx_num", colType="int32"), # ), # ColumnIndex( # name="precision", # oc=OriginColumn(name="precision", colType="int32"), # ), # ColumnIndex( # name="num", # oc=OriginColumn(name="num", colType="int32"), # ), # ColumnIndex( # name="start_time", # oc=OriginColumn(name="start_time", colType="int64"), # ), # ColumnIndex( # name="end_time", # oc=OriginColumn(name="end_time", colType="int64"), # ), # ColumnIndex( # name="order_", # oc=OriginColumn(name="order", colType="int64"), # ), # ColumnIndex( # name="vote_score", # oc=OriginColumn(name="account_address", colType="int32"), # ), # ColumnIndex( # name="description", # oc=OriginColumn(name="description", castFunc=autoDecode), # ), # ColumnIndex( # name="url", # oc=OriginColumn(name="url", castFunc=autoDecode), # ), # ColumnIndex( # name="free_asset_net_limit", # oc=OriginColumn(name="free_asset_net_limit", colType="int64"), # ), # ColumnIndex( # name="public_free_asset_net_limit", # oc=OriginColumn(name="public_free_asset_net_limit", colType="int64"), # ), # ColumnIndex( # name="public_free_asset_net_usage", # oc=OriginColumn(name="public_free_asset_net_usage", colType="int64"), # ), # ColumnIndex( # name="public_latest_free_net_time", # oc=OriginColumn(name="public_latest_free_net_time", colType="int64"), # ), ] table = "asset_issue_v2" def Parse(self, writer, data, appendData): ret = super().Parse(writer, data, appendData) return ret if not ret: return False frozenAppend = { "asset_id": data.id, "asset_name": autoDecode(data.name), } for f in data.frozen_supply: ret = self.frozenSupplyParser.Parse(writer, f, frozenAppend) if not ret: return False return True
class TransParser(BaseParser): colIndex = [ ColumnIndex(name="id", fromAppend=True), ColumnIndex(name="block_hash", fromAppend=True), ColumnIndex(name="block_num", fromAppend=True), # ret ColumnIndex(name="fee", oc=_retWrapper(OriginColumn(name="fee", colType="int64"))), ColumnIndex(name="ret", oc=_retWrapper(OriginColumn(name="ret", colType="int"))), ColumnIndex( name="contract_type", oc=_rawDataWrapper( OriginColumn( name="contract", oc=OriginColumn(name="type", colType="int"), listHead=True, )), ), ColumnIndex( name="contract_ret", oc=_retWrapper(OriginColumn(name="contractRet", colType="int")), ), ColumnIndex( name="asset_issue_id", oc=_retWrapper(OriginColumn(name="assetIssueID", colType="string")), ), ColumnIndex( name="withdraw_amount", oc=_retWrapper( OriginColumn(name="withdraw_amount", colType="int64")), ), ColumnIndex( name="unfreeze_amount", oc=_retWrapper( OriginColumn(name="unfreeze_amount", colType="int64")), ), ColumnIndex( name="exchange_received_amount", oc=_retWrapper( OriginColumn(name="exchange_received_amount", colType="int64")), ), ColumnIndex( name="exchange_inject_another_amount", oc=_retWrapper( OriginColumn(name="exchange_inject_another_amount", colType="int64")), ), ColumnIndex( name="exchange_withdraw_another_amount", oc=_retWrapper( OriginColumn(name="exchange_withdraw_another_amount", colType="int64")), ), ColumnIndex( name="exchange_id", oc=_retWrapper(OriginColumn(name="exchange_id", colType="int64")), ), ColumnIndex( name="shielded_transaction_fee", oc=_retWrapper( OriginColumn(name="shielded_transaction_fee", colType="int64")), ), ColumnIndex( name="order_id", oc=_retWrapper(OriginColumn(name="order_id", castFunc=autoDecode)), ), ColumnIndex( name="ref_block_bytes", oc=_rawDataWrapper(OriginColumn(name="ref_block_bytes")), ), ColumnIndex( name="ref_block_num", oc=_rawDataWrapper( OriginColumn(name="ref_block_num", colType="int64")), ), ColumnIndex( name="ref_block_hash", oc=_rawDataWrapper( OriginColumn(name="ref_block_hash", colType="bytes")), ), ColumnIndex( name="expiration", oc=_rawDataWrapper(OriginColumn(name="expiration", colType="int64")), ), ColumnIndex( name="trans_time", oc=_rawDataWrapper(OriginColumn(name="timestamp", colType="int64")), ), ColumnIndex( name="fee_limit", oc=_rawDataWrapper(OriginColumn(name="fee_limit", colType="int64")), ), ColumnIndex( name="scripts", # oc=_rawDataWrapper(OriginColumn(name="scripts", castFunc=autoDecode)), oc=_rawDataWrapper(OriginColumn(name="scripts")), ), ColumnIndex( name="data", # oc=_rawDataWrapper(OriginColumn(name="data", castFunc=autoDecode)), oc=_rawDataWrapper(OriginColumn(name="data")), ), ColumnIndex( name="signature", oc=OriginColumn( name="signature", listHead=True, oc=OriginColumn(name="signature", colType="bytes"), ), ), ] table = "trans" def Parse(self, writer, data, appendData): return super().Parse(writer, data, appendData)
class TransactionInfoParser(BaseParser): table = "trans_ret" colIndex = [ ColumnIndex(name="id", oc=OriginColumn(name="id")), ColumnIndex(name="fee", oc=OriginColumn(name="fee", colType="int64")), ColumnIndex(name="block_number", oc=OriginColumn(name="blockNumber", colType="int64")), ColumnIndex( name="block_timestamp", oc=OriginColumn(name="blockTimeStamp", colType="int64"), ), ColumnIndex( name="contract_address", oc=OriginColumn(name="contract_address", castFunc=addressFromBytes), ), ColumnIndex( name="receipt_energy_usage", oc=_receiptWrapper( OriginColumn(name="energy_usage", colType="int64")), ), ColumnIndex( name="receipt_energy_fee", oc=_receiptWrapper(OriginColumn(name="energy_fee", colType="int64")), ), ColumnIndex( name="receipt_origin_energy_usage", oc=_receiptWrapper( OriginColumn(name="origin_energy_usage", colType="int64")), ), ColumnIndex( name="receipt_energy_usage_total", oc=_receiptWrapper( OriginColumn(name="energy_usage_total", colType="int64")), ), ColumnIndex( name="receipt_net_usage", oc=_receiptWrapper(OriginColumn(name="net_usage", colType="int64")), ), ColumnIndex( name="receipt_net_fee", oc=_receiptWrapper(OriginColumn(name="net_fee", colType="int64")), ), ColumnIndex( name="receipt_result", oc=_receiptWrapper(OriginColumn(name="result", colType="int")), ), ColumnIndex(name="result", oc=OriginColumn(name="result", colType="int")), ColumnIndex( name="resMessage", oc=OriginColumn(name="resMessage"), ), ColumnIndex( name="asset_issue_id", oc=OriginColumn(name="assetIssueID", colType="string"), ), ColumnIndex( name="withdraw_amount", oc=OriginColumn(name="withdraw_amount", colType="int64"), ), ColumnIndex( name="unfreeze_amount", oc=OriginColumn(name="unfreeze_amount", colType="int64"), ), ColumnIndex( name="exchange_received_amount", oc=OriginColumn(name="exchange_received_amount", colType="int64"), ), ColumnIndex( name="exchange_inject_another_amount", oc=OriginColumn(name="exchange_inject_another_amount", colType="int64"), ), ColumnIndex( name="exchange_withdraw_another_amount", oc=OriginColumn(name="exchange_withdraw_another_amount", colType="int64"), ), ColumnIndex(name="exchange_id", oc=OriginColumn(name="exchange_id", colType="int64")), ColumnIndex( name="shielded_transaction_fee", oc=OriginColumn(name="shielded_transaction_fee", colType="int64"), ), ColumnIndex( name="order_id", oc=OriginColumn(name="orderId", castFunc=autoDecode), ), ColumnIndex(name="packing_fee", oc=OriginColumn(name="packingFee", colType="int64")), ] logParser = TranInfoLogParser() interTransParser = TranInfoInterTransParser() orderDetailParser = OrderDetailParser() def Parse(self, writer, data, appendData): ret = super().Parse(writer, data, appendData) if not ret: return False transId = self.colIndex[0].oc.getattr(data) if hasattr(data, "contractResult"): for i, contractResult in enumerate(data.contractResult): writer.write( "trans_ret_contract_result", [transId, i, bytes2HexStr(contractResult)], ) if hasattr(data, "log"): for i, log in enumerate(data.log): ret = self.logParser.Parse(writer, log, { "trans_id": transId, "log_index": i }) if not ret: return False if hasattr(data, "internal_transactions"): for i, inter_trans in enumerate(data.internal_transactions): ret = self.interTransParser.Parse(writer, inter_trans, { "trans_id": transId, "inter_index": i }) if not ret: return False if hasattr(data, "orderDetails"): for i, order in enumerate(data.orderDetails): ret = self.orderDetailParser.Parse(writer, order, { "trans_id": transId, "order_index": i }) if not ret: return False return True