diff --git a/hedera-mirror-rosetta/app/domain/types/constants.go b/hedera-mirror-rosetta/app/domain/types/constants.go index 1ba1454a9be..fd8d0db7af9 100644 --- a/hedera-mirror-rosetta/app/domain/types/constants.go +++ b/hedera-mirror-rosetta/app/domain/types/constants.go @@ -16,11 +16,18 @@ package types -import "github.com/coinbase/rosetta-sdk-go/types" +import ( + "github.com/coinbase/rosetta-sdk-go/types" + "github.com/hashgraph/hedera-protobufs-go/services" + "strings" +) const ( - generalErrorStatus = "GENERAL_ERROR" - MetadataKeyMemo = "memo" + generalErrorStatus = "GENERAL_ERROR" + MaxTransactionResult = int32(337) + MaxTransactionType = int32(57) + MetadataKeyMemo = "memo" + unknownTransactionType = "UNKNOWN" OperationTypeCryptoCreateAccount = "CRYPTOCREATEACCOUNT" OperationTypeCryptoTransfer = "CRYPTOTRANSFER" @@ -47,362 +54,8 @@ const ( currencyDecimals = 8 ) -var transactionResults = map[int32]string{ - -1: generalErrorStatus, - 0: "OK", - 1: "INVALID_TRANSACTION", - 2: "PAYER_ACCOUNT_NOT_FOUND", - 3: "INVALID_NODE_ACCOUNT", - 4: "TRANSACTION_EXPIRED", - 5: "INVALID_TRANSACTION_START", - 6: "INVALID_TRANSACTION_DURATION", - 7: "INVALID_SIGNATURE", - 8: "MEMO_TOO_LONG", - 9: "INSUFFICIENT_TX_FEE", - 10: "INSUFFICIENT_PAYER_BALANCE", - 11: "DUPLICATE_TRANSACTION", - 12: "BUSY", - 13: "NOT_SUPPORTED", - 14: "INVALID_FILE_ID", - 15: "INVALID_ACCOUNT_ID", - 16: "INVALID_CONTRACT_ID", - 17: "INVALID_TRANSACTION_ID", - 18: "RECEIPT_NOT_FOUND", - 19: "RECORD_NOT_FOUND", - 20: "INVALID_SOLIDITY_ID", - 21: "UNKNOWN", - 22: "SUCCESS", - 23: "FAIL_INVALID", - 24: "FAIL_FEE", - 25: "FAIL_BALANCE", - 26: "KEY_REQUIRED", - 27: "BAD_ENCODING", - 28: "INSUFFICIENT_ACCOUNT_BALANCE", - 29: "INVALID_SOLIDITY_ADDRESS", - 30: "INSUFFICIENT_GAS", - 31: "CONTRACT_SIZE_LIMIT_EXCEEDED", - 32: "LOCAL_CALL_MODIFICATION_EXCEPTION", - 33: "CONTRACT_REVERT_EXECUTED", - 34: "CONTRACT_EXECUTION_EXCEPTION", - 35: "INVALID_RECEIVING_NODE_ACCOUNT", - 36: "MISSING_QUERY_HEADER", - 37: "ACCOUNT_UPDATE_FAILED", - 38: "INVALID_KEY_ENCODING", - 39: "NULL_SOLIDITY_ADDRESS", - 40: "CONTRACT_UPDATE_FAILED", - 41: "INVALID_QUERY_HEADER", - 42: "INVALID_FEE_SUBMITTED", - 43: "INVALID_PAYER_SIGNATURE", - 44: "KEY_NOT_PROVIDED", - 45: "INVALID_EXPIRATION_TIME", - 46: "NO_WACL_KEY", - 47: "FILE_CONTENT_EMPTY", - 48: "INVALID_ACCOUNT_AMOUNTS", - 49: "EMPTY_TRANSACTION_BODY", - 50: "INVALID_TRANSACTION_BODY", - 51: "INVALID_SIGNATURE_TYPE_MISMATCHING_KEY", - 52: "INVALID_SIGNATURE_COUNT_MISMATCHING_KEY", - 53: "EMPTY_LIVE_HASH_BODY", - 54: "EMPTY_LIVE_HASH", - 55: "EMPTY_LIVE_HASH_KEYS", - 56: "INVALID_LIVE_HASH_SIZE", - 57: "EMPTY_QUERY_BODY", - 58: "EMPTY_LIVE_HASH_QUERY", - 59: "LIVE_HASH_NOT_FOUND", - 60: "ACCOUNT_ID_DOES_NOT_EXIST", - 61: "LIVE_HASH_ALREADY_EXISTS", - 62: "INVALID_FILE_WACL", - 63: "SERIALIZATION_FAILED", - 64: "TRANSACTION_OVERSIZE", - 65: "TRANSACTION_TOO_MANY_LAYERS", - 66: "CONTRACT_DELETED", - 67: "PLATFORM_NOT_ACTIVE", - 68: "KEY_PREFIX_MISMATCH", - 69: "PLATFORM_TRANSACTION_NOT_CREATED", - 70: "INVALID_RENEWAL_PERIOD", - 71: "INVALID_PAYER_ACCOUNT_ID", - 72: "ACCOUNT_DELETED", - 73: "FILE_DELETED", - 74: "ACCOUNT_REPEATED_IN_ACCOUNT_AMOUNTS", - 75: "SETTING_NEGATIVE_ACCOUNT_BALANCE", - 76: "OBTAINER_REQUIRED", - 77: "OBTAINER_SAME_CONTRACT_ID", - 78: "OBTAINER_DOES_NOT_EXIST", - 79: "MODIFYING_IMMUTABLE_CONTRACT", - 80: "FILE_SYSTEM_EXCEPTION", - 81: "AUTORENEW_DURATION_NOT_IN_RANGE", - 82: "ERROR_DECODING_BYTESTRING", - 83: "CONTRACT_FILE_EMPTY", - 84: "CONTRACT_BYTECODE_EMPTY", - 85: "INVALID_INITIAL_BALANCE", - 86: "INVALID_RECEIVE_RECORD_THRESHOLD", - 87: "INVALID_SEND_RECORD_THRESHOLD", - 88: "ACCOUNT_IS_NOT_GENESIS_ACCOUNT", - 89: "PAYER_ACCOUNT_UNAUTHORIZED", - 90: "INVALID_FREEZE_TRANSACTION_BODY", - 91: "FREEZE_TRANSACTION_BODY_NOT_FOUND", - 92: "TRANSFER_LIST_SIZE_LIMIT_EXCEEDED", - 93: "RESULT_SIZE_LIMIT_EXCEEDED", - 94: "NOT_SPECIAL_ACCOUNT", - 95: "CONTRACT_NEGATIVE_GAS", - 96: "CONTRACT_NEGATIVE_VALUE", - 97: "INVALID_FEE_FILE", - 98: "INVALID_EXCHANGE_RATE_FILE", - 99: "INSUFFICIENT_LOCAL_CALL_GAS", - 100: "ENTITY_NOT_ALLOWED_TO_DELETE", - 101: "AUTHORIZATION_FAILED", - 102: "FILE_UPLOADED_PROTO_INVALID", - 103: "FILE_UPLOADED_PROTO_NOT_SAVED_TO_DISK", - 104: "FEE_SCHEDULE_FILE_PART_UPLOADED", - 105: "EXCHANGE_RATE_CHANGE_LIMIT_EXCEEDED", - 106: "MAX_CONTRACT_STORAGE_EXCEEDED", - 107: "TRANSFER_ACCOUNT_SAME_AS_DELETE_ACCOUNT", - 108: "TOTAL_LEDGER_BALANCE_INVALID", - 110: "EXPIRATION_REDUCTION_NOT_ALLOWED", - 111: "MAX_GAS_LIMIT_EXCEEDED", - 112: "MAX_FILE_SIZE_EXCEEDED", - 113: "RECEIVER_SIG_REQUIRED", - 150: "INVALID_TOPIC_ID", - 155: "INVALID_ADMIN_KEY", - 156: "INVALID_SUBMIT_KEY", - 157: "UNAUTHORIZED", - 158: "INVALID_TOPIC_MESSAGE", - 159: "INVALID_AUTORENEW_ACCOUNT", - 160: "AUTORENEW_ACCOUNT_NOT_ALLOWED", - 162: "TOPIC_EXPIRED", - 163: "INVALID_CHUNK_NUMBER", - 164: "INVALID_CHUNK_TRANSACTION_ID", - 165: "ACCOUNT_FROZEN_FOR_TOKEN", - 166: "TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED", - 167: "INVALID_TOKEN_ID", - 168: "INVALID_TOKEN_DECIMALS", - 169: "INVALID_TOKEN_INITIAL_SUPPLY", - 170: "INVALID_TREASURY_ACCOUNT_FOR_TOKEN", - 171: "INVALID_TOKEN_SYMBOL", - 172: "TOKEN_HAS_NO_FREEZE_KEY", - 173: "TRANSFERS_NOT_ZERO_SUM_FOR_TOKEN", - 174: "MISSING_TOKEN_SYMBOL", - 175: "TOKEN_SYMBOL_TOO_LONG", - 176: "ACCOUNT_KYC_NOT_GRANTED_FOR_TOKEN", - 177: "TOKEN_HAS_NO_KYC_KEY", - 178: "INSUFFICIENT_TOKEN_BALANCE", - 179: "TOKEN_WAS_DELETED", - 180: "TOKEN_HAS_NO_SUPPLY_KEY", - 181: "TOKEN_HAS_NO_WIPE_KEY", - 182: "INVALID_TOKEN_MINT_AMOUNT", - 183: "INVALID_TOKEN_BURN_AMOUNT", - 184: "TOKEN_NOT_ASSOCIATED_TO_ACCOUNT", - 185: "CANNOT_WIPE_TOKEN_TREASURY_ACCOUNT", - 186: "INVALID_KYC_KEY", - 187: "INVALID_WIPE_KEY", - 188: "INVALID_FREEZE_KEY", - 189: "INVALID_SUPPLY_KEY", - 190: "MISSING_TOKEN_NAME", - 191: "TOKEN_NAME_TOO_LONG", - 192: "INVALID_WIPING_AMOUNT", - 193: "TOKEN_IS_IMMUTABLE", - 194: "TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT", - 195: "TRANSACTION_REQUIRES_ZERO_TOKEN_BALANCES", - 196: "ACCOUNT_IS_TREASURY", - 197: "TOKEN_ID_REPEATED_IN_TOKEN_LIST", - 198: "TOKEN_TRANSFER_LIST_SIZE_LIMIT_EXCEEDED", - 199: "EMPTY_TOKEN_TRANSFER_BODY", - 200: "EMPTY_TOKEN_TRANSFER_ACCOUNT_AMOUNTS", - 201: "INVALID_SCHEDULE_ID", - 202: "SCHEDULE_IS_IMMUTABLE", - 205: "NO_NEW_VALID_SIGNATURES", - 204: "INVALID_SCHEDULE_ACCOUNT_ID", - 203: "INVALID_SCHEDULE_PAYER_ID", - 206: "UNRESOLVABLE_REQUIRED_SIGNERS", - 207: "SCHEDULED_TRANSACTION_NOT_IN_WHITELIST", - 208: "SOME_SIGNATURES_WERE_INVALID", - 209: "TRANSACTION_ID_FIELD_NOT_ALLOWED", - 210: "IDENTICAL_SCHEDULE_ALREADY_CREATED", - 211: "INVALID_ZERO_BYTE_IN_STRING", - 212: "SCHEDULE_ALREADY_DELETED", - 213: "SCHEDULE_ALREADY_EXECUTED", - 214: "MESSAGE_SIZE_TOO_LARGE", - 215: "OPERATION_REPEATED_IN_BUCKET_GROUPS", - 216: "BUCKET_CAPACITY_OVERFLOW", - 217: "NODE_CAPACITY_NOT_SUFFICIENT_FOR_OPERATION", - 218: "BUCKET_HAS_NO_THROTTLE_GROUPS", - 219: "THROTTLE_GROUP_HAS_ZERO_OPS_PER_SEC", - 220: "SUCCESS_BUT_MISSING_EXPECTED_OPERATION", - 221: "UNPARSEABLE_THROTTLE_DEFINITIONS", - 222: "INVALID_THROTTLE_DEFINITIONS", - 223: "ACCOUNT_EXPIRED_AND_PENDING_REMOVAL", - 224: "INVALID_TOKEN_MAX_SUPPLY", - 225: "INVALID_TOKEN_NFT_SERIAL_NUMBER", - 226: "INVALID_NFT_ID", - 227: "METADATA_TOO_LONG", - 228: "BATCH_SIZE_LIMIT_EXCEEDED", - 229: "INVALID_QUERY_RANGE", - 230: "FRACTION_DIVIDES_BY_ZERO", - 231: "INSUFFICIENT_PAYER_BALANCE_FOR_CUSTOM_FEE", - 232: "CUSTOM_FEES_LIST_TOO_LONG", - 233: "INVALID_CUSTOM_FEE_COLLECTOR", - 234: "INVALID_TOKEN_ID_IN_CUSTOM_FEES", - 235: "TOKEN_NOT_ASSOCIATED_TO_FEE_COLLECTOR", - 236: "TOKEN_MAX_SUPPLY_REACHED", - 237: "SENDER_DOES_NOT_OWN_NFT_SERIAL_NO", - 238: "CUSTOM_FEE_NOT_FULLY_SPECIFIED", - 239: "CUSTOM_FEE_MUST_BE_POSITIVE", - 240: "TOKEN_HAS_NO_FEE_SCHEDULE_KEY", - 241: "CUSTOM_FEE_OUTSIDE_NUMERIC_RANGE", - 242: "ROYALTY_FRACTION_CANNOT_EXCEED_ONE", - 243: "FRACTIONAL_FEE_MAX_AMOUNT_LESS_THAN_MIN_AMOUNT", - 244: "CUSTOM_SCHEDULE_ALREADY_HAS_NO_FEES", - 245: "CUSTOM_FEE_DENOMINATION_MUST_BE_FUNGIBLE_COMMON", - 246: "CUSTOM_FRACTIONAL_FEE_ONLY_ALLOWED_FOR_FUNGIBLE_COMMON", - 247: "INVALID_CUSTOM_FEE_SCHEDULE_KEY", - 248: "INVALID_TOKEN_MINT_METADATA", - 249: "INVALID_TOKEN_BURN_METADATA", - 250: "CURRENT_TREASURY_STILL_OWNS_NFTS", - 251: "ACCOUNT_STILL_OWNS_NFTS", - 252: "TREASURY_MUST_OWN_BURNED_NFT", - 253: "ACCOUNT_DOES_NOT_OWN_WIPED_NFT", - 254: "ACCOUNT_AMOUNT_TRANSFERS_ONLY_ALLOWED_FOR_FUNGIBLE_COMMON", - 255: "MAX_NFTS_IN_PRICE_REGIME_HAVE_BEEN_MINTED", - 256: "PAYER_ACCOUNT_DELETED", - 257: "CUSTOM_FEE_CHARGING_EXCEEDED_MAX_RECURSION_DEPTH", - 258: "CUSTOM_FEE_CHARGING_EXCEEDED_MAX_ACCOUNT_AMOUNTS", - 259: "INSUFFICIENT_SENDER_ACCOUNT_BALANCE_FOR_CUSTOM_FEE", - 260: "SERIAL_NUMBER_LIMIT_REACHED", - 261: "CUSTOM_ROYALTY_FEE_ONLY_ALLOWED_FOR_NON_FUNGIBLE_UNIQUE", - 262: "NO_REMAINING_AUTOMATIC_ASSOCIATIONS", - 263: "EXISTING_AUTOMATIC_ASSOCIATIONS_EXCEED_GIVEN_LIMIT", - 264: "REQUESTED_NUM_AUTOMATIC_ASSOCIATIONS_EXCEEDS_ASSOCIATION_LIMIT", - 265: "TOKEN_IS_PAUSED", - 266: "TOKEN_HAS_NO_PAUSE_KEY", - 267: "INVALID_PAUSE_KEY", - 268: "FREEZE_UPDATE_FILE_DOES_NOT_EXIST", - 269: "FREEZE_UPDATE_FILE_HASH_DOES_NOT_MATCH", - 270: "NO_UPGRADE_HAS_BEEN_PREPARED", - 271: "NO_FREEZE_IS_SCHEDULED", - 272: "UPDATE_FILE_HASH_CHANGED_SINCE_PREPARE_UPGRADE", - 273: "FREEZE_START_TIME_MUST_BE_FUTURE", - 274: "PREPARED_UPDATE_FILE_IS_IMMUTABLE", - 275: "FREEZE_ALREADY_SCHEDULED", - 276: "FREEZE_UPGRADE_IN_PROGRESS", - 277: "UPDATE_FILE_ID_DOES_NOT_MATCH_PREPARED", - 278: "UPDATE_FILE_HASH_DOES_NOT_MATCH_PREPARED", - 279: "CONSENSUS_GAS_EXHAUSTED", - 280: "REVERTED_SUCCESS", - 281: "MAX_STORAGE_IN_PRICE_REGIME_HAS_BEEN_USED", - 282: "INVALID_ALIAS_KEY", - 283: "UNEXPECTED_TOKEN_DECIMALS", - 284: "INVALID_PROXY_ACCOUNT_ID", - 285: "INVALID_TRANSFER_ACCOUNT_ID", - 286: "INVALID_FEE_COLLECTOR_ACCOUNT_ID", - 287: "ALIAS_IS_IMMUTABLE", - 288: "SPENDER_ACCOUNT_SAME_AS_OWNER", - 289: "AMOUNT_EXCEEDS_TOKEN_MAX_SUPPLY", - 290: "NEGATIVE_ALLOWANCE_AMOUNT", - 291: "CANNOT_APPROVE_FOR_ALL_FUNGIBLE_COMMON", - 292: "SPENDER_DOES_NOT_HAVE_ALLOWANCE", - 293: "AMOUNT_EXCEEDS_ALLOWANCE", - 294: "MAX_ALLOWANCES_EXCEEDED", - 295: "EMPTY_ALLOWANCES", - 296: "SPENDER_ACCOUNT_REPEATED_IN_ALLOWANCES", - 297: "REPEATED_SERIAL_NUMS_IN_NFT_ALLOWANCES", - 298: "FUNGIBLE_TOKEN_IN_NFT_ALLOWANCES", - 299: "NFT_IN_FUNGIBLE_TOKEN_ALLOWANCES", - 300: "INVALID_ALLOWANCE_OWNER_ID", - 301: "INVALID_ALLOWANCE_SPENDER_ID", - 302: "REPEATED_ALLOWANCES_TO_DELETE", - 303: "INVALID_DELEGATING_SPENDER", - 304: "DELEGATING_SPENDER_CANNOT_GRANT_APPROVE_FOR_ALL", - 305: "DELEGATING_SPENDER_DOES_NOT_HAVE_APPROVE_FOR_ALL", - 306: "SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE", - 307: "SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME", - 308: "SCHEDULE_FUTURE_THROTTLE_EXCEEDED", - 309: "SCHEDULE_FUTURE_GAS_LIMIT_EXCEEDED", - 310: "INVALID_ETHEREUM_TRANSACTION", - 311: "WRONG_CHAIN_ID", - 312: "WRONG_NONCE", - 313: "ACCESS_LIST_UNSUPPORTED", - 314: "SCHEDULE_PENDING_EXPIRATION", - 315: "CONTRACT_IS_TOKEN_TREASURY", - 316: "CONTRACT_HAS_NON_ZERO_TOKEN_BALANCES", - 317: "CONTRACT_EXPIRED_AND_PENDING_REMOVAL", - 318: "CONTRACT_HAS_NO_AUTO_RENEW_ACCOUNT", - 319: "PERMANENT_REMOVAL_REQUIRES_SYSTEM_INITIATION", - 320: "PROXY_ACCOUNT_ID_FIELD_IS_DEPRECATED", - 321: "SELF_STAKING_IS_NOT_ALLOWED", - 322: "INVALID_STAKING_ID", - 323: "STAKING_NOT_ENABLED", - 324: "INVALID_PRNG_RANGE", - 325: "MAX_ENTITIES_IN_PRICE_REGIME_HAVE_BEEN_CREATED", - 326: "INVALID_FULL_PREFIX_SIGNATURE_FOR_PRECOMPILE", - 327: "INSUFFICIENT_BALANCES_FOR_STORAGE_RENT", - 328: "MAX_CHILD_RECORDS_EXCEEDED", - 329: "INSUFFICIENT_BALANCES_FOR_RENEWAL_FEES", - 330: "TRANSACTION_HAS_UNKNOWN_FIELDS", - 331: "ACCOUNT_IS_IMMUTABLE", - 332: "ALIAS_ALREADY_ASSIGNED", - 333: "INVALID_METADATA_KEY", - 334: "TOKEN_HAS_NO_METADATA_KEY", - 335: "MISSING_TOKEN_METADATA", - 336: "MISSING_SERIAL_NUMBERS", - 337: "TOKEN_HAS_NO_ADMIN_KEY", -} - -var TransactionTypes = map[int32]string{ - 0: "UNKNOWN", - 7: "CONTRACTCALL", - 8: "CONTRACTCREATEINSTANCE", - 9: "CONTRACTUPDATEINSTANCE", - 10: "CRYPTOADDLIVEHASH", - 11: OperationTypeCryptoCreateAccount, - 12: "CRYPTODELETE", - 13: "CRYPTODELETELIVEHASH", - 14: OperationTypeCryptoTransfer, - 15: "CRYPTOUPDATEACCOUNT", - 16: "FILEAPPEND", - 17: "FILECREATE", - 18: "FILEDELETE", - 19: "FILEUPDATE", - 20: "SYSTEMDELETE", - 21: "SYSTEMUNDELETE", - 22: "CONTRACTDELETEINSTANCE", - 23: "FREEZE", - 24: "CONSENSUSCREATETOPIC", - 25: "CONSENSUSUPDATETOPIC", - 26: "CONSENSUSDELETETOPIC", - 27: "CONSENSUSSUBMITMESSAGE", - 28: "UNCHECKEDSUBMIT", - 29: OperationTypeTokenCreate, - 31: OperationTypeTokenFreeze, - 32: OperationTypeTokenUnfreeze, - 33: OperationTypeTokenGrantKyc, - 34: OperationTypeTokenRevokeKyc, - 35: OperationTypeTokenDelete, - 36: OperationTypeTokenUpdate, - 37: OperationTypeTokenMint, - 38: OperationTypeTokenBurn, - 39: OperationTypeTokenWipe, - 40: OperationTypeTokenAssociate, - 41: OperationTypeTokenDissociate, - 42: "SCHEDULECREATE", - 43: "SCHEDULEDELETE", - 44: "SCHEDULESIGN", - 45: "TOKENFEESCHEDULEUPDATE", - 46: "TOKENPAUSE", - 47: "TOKENUNPAUSE", - 48: "CRYPTOAPPROVEALLOWANCE", - 49: "CRYPTODELETEALLOWANCE", - 50: "ETHEREUMTRANSACTION", - 51: "NODESTAKEUPDATE", - 52: "UTILPRNG", - 53: "TOKENUPDATENFTS", - 54: "NODECREATE", - 55: "NODEUPDATE", - 56: "NODEDELETE", - 57: "TOKENREJECT", - 58: "TOKENAIRDROP", - 59: "TOKENCANCELAIRDROP", - 60: "TOKENCLAIMAIRDROP", -} +var transactionResults map[int32]string +var transactionTypes map[int32]string var ( CurrencyHbar = &types.Currency{ @@ -443,3 +96,45 @@ func GetTransactionResult(code int32) string { func GetTransactionResults() map[int32]string { return transactionResults } + +func GetTransactionType(code int32) string { + transactionType, ok := transactionTypes[code] + if !ok { + // If transactionType does not exist, map it to UNKNOWN + transactionType = unknownTransactionType + } + return transactionType +} + +func GetTransactionTypes() map[int32]string { + return transactionTypes +} + +func init() { + // Initialize transaction results + transactionResults = make(map[int32]string) + transactionResults[-1] = generalErrorStatus + for code, name := range services.ResponseCodeEnum_name { + if code > MaxTransactionResult { + continue + } + + transactionResults[code] = name + } + + // Initialize transaction types + transactionTypes = make(map[int32]string) + transactionTypes[0] = unknownTransactionType + body := services.TransactionBody{} + dataFields := body.ProtoReflect().Descriptor().Oneofs().ByName("data").Fields() + for i := 0; i < dataFields.Len(); i++ { + dataField := dataFields.Get(i) + protoId := int32(dataField.Number()) + if protoId > MaxTransactionType { + continue + } + + name := strings.ToUpper(string(dataField.Name())) + transactionTypes[protoId] = strings.ReplaceAll(name, "_", "") + } +} diff --git a/hedera-mirror-rosetta/app/domain/types/constants_test.go b/hedera-mirror-rosetta/app/domain/types/constants_test.go index 6771efb6efa..7c7291596d9 100644 --- a/hedera-mirror-rosetta/app/domain/types/constants_test.go +++ b/hedera-mirror-rosetta/app/domain/types/constants_test.go @@ -17,57 +17,386 @@ package types import ( - "strings" "testing" - "github.com/hashgraph/hedera-protobufs-go/services" "github.com/stretchr/testify/assert" ) -const maxCode = int32(337) +var expectedTransactionResults = map[int32]string{ + -1: generalErrorStatus, + 0: "OK", + 1: "INVALID_TRANSACTION", + 2: "PAYER_ACCOUNT_NOT_FOUND", + 3: "INVALID_NODE_ACCOUNT", + 4: "TRANSACTION_EXPIRED", + 5: "INVALID_TRANSACTION_START", + 6: "INVALID_TRANSACTION_DURATION", + 7: "INVALID_SIGNATURE", + 8: "MEMO_TOO_LONG", + 9: "INSUFFICIENT_TX_FEE", + 10: "INSUFFICIENT_PAYER_BALANCE", + 11: "DUPLICATE_TRANSACTION", + 12: "BUSY", + 13: "NOT_SUPPORTED", + 14: "INVALID_FILE_ID", + 15: "INVALID_ACCOUNT_ID", + 16: "INVALID_CONTRACT_ID", + 17: "INVALID_TRANSACTION_ID", + 18: "RECEIPT_NOT_FOUND", + 19: "RECORD_NOT_FOUND", + 20: "INVALID_SOLIDITY_ID", + 21: "UNKNOWN", + 22: "SUCCESS", + 23: "FAIL_INVALID", + 24: "FAIL_FEE", + 25: "FAIL_BALANCE", + 26: "KEY_REQUIRED", + 27: "BAD_ENCODING", + 28: "INSUFFICIENT_ACCOUNT_BALANCE", + 29: "INVALID_SOLIDITY_ADDRESS", + 30: "INSUFFICIENT_GAS", + 31: "CONTRACT_SIZE_LIMIT_EXCEEDED", + 32: "LOCAL_CALL_MODIFICATION_EXCEPTION", + 33: "CONTRACT_REVERT_EXECUTED", + 34: "CONTRACT_EXECUTION_EXCEPTION", + 35: "INVALID_RECEIVING_NODE_ACCOUNT", + 36: "MISSING_QUERY_HEADER", + 37: "ACCOUNT_UPDATE_FAILED", + 38: "INVALID_KEY_ENCODING", + 39: "NULL_SOLIDITY_ADDRESS", + 40: "CONTRACT_UPDATE_FAILED", + 41: "INVALID_QUERY_HEADER", + 42: "INVALID_FEE_SUBMITTED", + 43: "INVALID_PAYER_SIGNATURE", + 44: "KEY_NOT_PROVIDED", + 45: "INVALID_EXPIRATION_TIME", + 46: "NO_WACL_KEY", + 47: "FILE_CONTENT_EMPTY", + 48: "INVALID_ACCOUNT_AMOUNTS", + 49: "EMPTY_TRANSACTION_BODY", + 50: "INVALID_TRANSACTION_BODY", + 51: "INVALID_SIGNATURE_TYPE_MISMATCHING_KEY", + 52: "INVALID_SIGNATURE_COUNT_MISMATCHING_KEY", + 53: "EMPTY_LIVE_HASH_BODY", + 54: "EMPTY_LIVE_HASH", + 55: "EMPTY_LIVE_HASH_KEYS", + 56: "INVALID_LIVE_HASH_SIZE", + 57: "EMPTY_QUERY_BODY", + 58: "EMPTY_LIVE_HASH_QUERY", + 59: "LIVE_HASH_NOT_FOUND", + 60: "ACCOUNT_ID_DOES_NOT_EXIST", + 61: "LIVE_HASH_ALREADY_EXISTS", + 62: "INVALID_FILE_WACL", + 63: "SERIALIZATION_FAILED", + 64: "TRANSACTION_OVERSIZE", + 65: "TRANSACTION_TOO_MANY_LAYERS", + 66: "CONTRACT_DELETED", + 67: "PLATFORM_NOT_ACTIVE", + 68: "KEY_PREFIX_MISMATCH", + 69: "PLATFORM_TRANSACTION_NOT_CREATED", + 70: "INVALID_RENEWAL_PERIOD", + 71: "INVALID_PAYER_ACCOUNT_ID", + 72: "ACCOUNT_DELETED", + 73: "FILE_DELETED", + 74: "ACCOUNT_REPEATED_IN_ACCOUNT_AMOUNTS", + 75: "SETTING_NEGATIVE_ACCOUNT_BALANCE", + 76: "OBTAINER_REQUIRED", + 77: "OBTAINER_SAME_CONTRACT_ID", + 78: "OBTAINER_DOES_NOT_EXIST", + 79: "MODIFYING_IMMUTABLE_CONTRACT", + 80: "FILE_SYSTEM_EXCEPTION", + 81: "AUTORENEW_DURATION_NOT_IN_RANGE", + 82: "ERROR_DECODING_BYTESTRING", + 83: "CONTRACT_FILE_EMPTY", + 84: "CONTRACT_BYTECODE_EMPTY", + 85: "INVALID_INITIAL_BALANCE", + 86: "INVALID_RECEIVE_RECORD_THRESHOLD", + 87: "INVALID_SEND_RECORD_THRESHOLD", + 88: "ACCOUNT_IS_NOT_GENESIS_ACCOUNT", + 89: "PAYER_ACCOUNT_UNAUTHORIZED", + 90: "INVALID_FREEZE_TRANSACTION_BODY", + 91: "FREEZE_TRANSACTION_BODY_NOT_FOUND", + 92: "TRANSFER_LIST_SIZE_LIMIT_EXCEEDED", + 93: "RESULT_SIZE_LIMIT_EXCEEDED", + 94: "NOT_SPECIAL_ACCOUNT", + 95: "CONTRACT_NEGATIVE_GAS", + 96: "CONTRACT_NEGATIVE_VALUE", + 97: "INVALID_FEE_FILE", + 98: "INVALID_EXCHANGE_RATE_FILE", + 99: "INSUFFICIENT_LOCAL_CALL_GAS", + 100: "ENTITY_NOT_ALLOWED_TO_DELETE", + 101: "AUTHORIZATION_FAILED", + 102: "FILE_UPLOADED_PROTO_INVALID", + 103: "FILE_UPLOADED_PROTO_NOT_SAVED_TO_DISK", + 104: "FEE_SCHEDULE_FILE_PART_UPLOADED", + 105: "EXCHANGE_RATE_CHANGE_LIMIT_EXCEEDED", + 106: "MAX_CONTRACT_STORAGE_EXCEEDED", + 107: "TRANSFER_ACCOUNT_SAME_AS_DELETE_ACCOUNT", + 108: "TOTAL_LEDGER_BALANCE_INVALID", + 110: "EXPIRATION_REDUCTION_NOT_ALLOWED", + 111: "MAX_GAS_LIMIT_EXCEEDED", + 112: "MAX_FILE_SIZE_EXCEEDED", + 113: "RECEIVER_SIG_REQUIRED", + 150: "INVALID_TOPIC_ID", + 155: "INVALID_ADMIN_KEY", + 156: "INVALID_SUBMIT_KEY", + 157: "UNAUTHORIZED", + 158: "INVALID_TOPIC_MESSAGE", + 159: "INVALID_AUTORENEW_ACCOUNT", + 160: "AUTORENEW_ACCOUNT_NOT_ALLOWED", + 162: "TOPIC_EXPIRED", + 163: "INVALID_CHUNK_NUMBER", + 164: "INVALID_CHUNK_TRANSACTION_ID", + 165: "ACCOUNT_FROZEN_FOR_TOKEN", + 166: "TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED", + 167: "INVALID_TOKEN_ID", + 168: "INVALID_TOKEN_DECIMALS", + 169: "INVALID_TOKEN_INITIAL_SUPPLY", + 170: "INVALID_TREASURY_ACCOUNT_FOR_TOKEN", + 171: "INVALID_TOKEN_SYMBOL", + 172: "TOKEN_HAS_NO_FREEZE_KEY", + 173: "TRANSFERS_NOT_ZERO_SUM_FOR_TOKEN", + 174: "MISSING_TOKEN_SYMBOL", + 175: "TOKEN_SYMBOL_TOO_LONG", + 176: "ACCOUNT_KYC_NOT_GRANTED_FOR_TOKEN", + 177: "TOKEN_HAS_NO_KYC_KEY", + 178: "INSUFFICIENT_TOKEN_BALANCE", + 179: "TOKEN_WAS_DELETED", + 180: "TOKEN_HAS_NO_SUPPLY_KEY", + 181: "TOKEN_HAS_NO_WIPE_KEY", + 182: "INVALID_TOKEN_MINT_AMOUNT", + 183: "INVALID_TOKEN_BURN_AMOUNT", + 184: "TOKEN_NOT_ASSOCIATED_TO_ACCOUNT", + 185: "CANNOT_WIPE_TOKEN_TREASURY_ACCOUNT", + 186: "INVALID_KYC_KEY", + 187: "INVALID_WIPE_KEY", + 188: "INVALID_FREEZE_KEY", + 189: "INVALID_SUPPLY_KEY", + 190: "MISSING_TOKEN_NAME", + 191: "TOKEN_NAME_TOO_LONG", + 192: "INVALID_WIPING_AMOUNT", + 193: "TOKEN_IS_IMMUTABLE", + 194: "TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT", + 195: "TRANSACTION_REQUIRES_ZERO_TOKEN_BALANCES", + 196: "ACCOUNT_IS_TREASURY", + 197: "TOKEN_ID_REPEATED_IN_TOKEN_LIST", + 198: "TOKEN_TRANSFER_LIST_SIZE_LIMIT_EXCEEDED", + 199: "EMPTY_TOKEN_TRANSFER_BODY", + 200: "EMPTY_TOKEN_TRANSFER_ACCOUNT_AMOUNTS", + 201: "INVALID_SCHEDULE_ID", + 202: "SCHEDULE_IS_IMMUTABLE", + 205: "NO_NEW_VALID_SIGNATURES", + 204: "INVALID_SCHEDULE_ACCOUNT_ID", + 203: "INVALID_SCHEDULE_PAYER_ID", + 206: "UNRESOLVABLE_REQUIRED_SIGNERS", + 207: "SCHEDULED_TRANSACTION_NOT_IN_WHITELIST", + 208: "SOME_SIGNATURES_WERE_INVALID", + 209: "TRANSACTION_ID_FIELD_NOT_ALLOWED", + 210: "IDENTICAL_SCHEDULE_ALREADY_CREATED", + 211: "INVALID_ZERO_BYTE_IN_STRING", + 212: "SCHEDULE_ALREADY_DELETED", + 213: "SCHEDULE_ALREADY_EXECUTED", + 214: "MESSAGE_SIZE_TOO_LARGE", + 215: "OPERATION_REPEATED_IN_BUCKET_GROUPS", + 216: "BUCKET_CAPACITY_OVERFLOW", + 217: "NODE_CAPACITY_NOT_SUFFICIENT_FOR_OPERATION", + 218: "BUCKET_HAS_NO_THROTTLE_GROUPS", + 219: "THROTTLE_GROUP_HAS_ZERO_OPS_PER_SEC", + 220: "SUCCESS_BUT_MISSING_EXPECTED_OPERATION", + 221: "UNPARSEABLE_THROTTLE_DEFINITIONS", + 222: "INVALID_THROTTLE_DEFINITIONS", + 223: "ACCOUNT_EXPIRED_AND_PENDING_REMOVAL", + 224: "INVALID_TOKEN_MAX_SUPPLY", + 225: "INVALID_TOKEN_NFT_SERIAL_NUMBER", + 226: "INVALID_NFT_ID", + 227: "METADATA_TOO_LONG", + 228: "BATCH_SIZE_LIMIT_EXCEEDED", + 229: "INVALID_QUERY_RANGE", + 230: "FRACTION_DIVIDES_BY_ZERO", + 231: "INSUFFICIENT_PAYER_BALANCE_FOR_CUSTOM_FEE", + 232: "CUSTOM_FEES_LIST_TOO_LONG", + 233: "INVALID_CUSTOM_FEE_COLLECTOR", + 234: "INVALID_TOKEN_ID_IN_CUSTOM_FEES", + 235: "TOKEN_NOT_ASSOCIATED_TO_FEE_COLLECTOR", + 236: "TOKEN_MAX_SUPPLY_REACHED", + 237: "SENDER_DOES_NOT_OWN_NFT_SERIAL_NO", + 238: "CUSTOM_FEE_NOT_FULLY_SPECIFIED", + 239: "CUSTOM_FEE_MUST_BE_POSITIVE", + 240: "TOKEN_HAS_NO_FEE_SCHEDULE_KEY", + 241: "CUSTOM_FEE_OUTSIDE_NUMERIC_RANGE", + 242: "ROYALTY_FRACTION_CANNOT_EXCEED_ONE", + 243: "FRACTIONAL_FEE_MAX_AMOUNT_LESS_THAN_MIN_AMOUNT", + 244: "CUSTOM_SCHEDULE_ALREADY_HAS_NO_FEES", + 245: "CUSTOM_FEE_DENOMINATION_MUST_BE_FUNGIBLE_COMMON", + 246: "CUSTOM_FRACTIONAL_FEE_ONLY_ALLOWED_FOR_FUNGIBLE_COMMON", + 247: "INVALID_CUSTOM_FEE_SCHEDULE_KEY", + 248: "INVALID_TOKEN_MINT_METADATA", + 249: "INVALID_TOKEN_BURN_METADATA", + 250: "CURRENT_TREASURY_STILL_OWNS_NFTS", + 251: "ACCOUNT_STILL_OWNS_NFTS", + 252: "TREASURY_MUST_OWN_BURNED_NFT", + 253: "ACCOUNT_DOES_NOT_OWN_WIPED_NFT", + 254: "ACCOUNT_AMOUNT_TRANSFERS_ONLY_ALLOWED_FOR_FUNGIBLE_COMMON", + 255: "MAX_NFTS_IN_PRICE_REGIME_HAVE_BEEN_MINTED", + 256: "PAYER_ACCOUNT_DELETED", + 257: "CUSTOM_FEE_CHARGING_EXCEEDED_MAX_RECURSION_DEPTH", + 258: "CUSTOM_FEE_CHARGING_EXCEEDED_MAX_ACCOUNT_AMOUNTS", + 259: "INSUFFICIENT_SENDER_ACCOUNT_BALANCE_FOR_CUSTOM_FEE", + 260: "SERIAL_NUMBER_LIMIT_REACHED", + 261: "CUSTOM_ROYALTY_FEE_ONLY_ALLOWED_FOR_NON_FUNGIBLE_UNIQUE", + 262: "NO_REMAINING_AUTOMATIC_ASSOCIATIONS", + 263: "EXISTING_AUTOMATIC_ASSOCIATIONS_EXCEED_GIVEN_LIMIT", + 264: "REQUESTED_NUM_AUTOMATIC_ASSOCIATIONS_EXCEEDS_ASSOCIATION_LIMIT", + 265: "TOKEN_IS_PAUSED", + 266: "TOKEN_HAS_NO_PAUSE_KEY", + 267: "INVALID_PAUSE_KEY", + 268: "FREEZE_UPDATE_FILE_DOES_NOT_EXIST", + 269: "FREEZE_UPDATE_FILE_HASH_DOES_NOT_MATCH", + 270: "NO_UPGRADE_HAS_BEEN_PREPARED", + 271: "NO_FREEZE_IS_SCHEDULED", + 272: "UPDATE_FILE_HASH_CHANGED_SINCE_PREPARE_UPGRADE", + 273: "FREEZE_START_TIME_MUST_BE_FUTURE", + 274: "PREPARED_UPDATE_FILE_IS_IMMUTABLE", + 275: "FREEZE_ALREADY_SCHEDULED", + 276: "FREEZE_UPGRADE_IN_PROGRESS", + 277: "UPDATE_FILE_ID_DOES_NOT_MATCH_PREPARED", + 278: "UPDATE_FILE_HASH_DOES_NOT_MATCH_PREPARED", + 279: "CONSENSUS_GAS_EXHAUSTED", + 280: "REVERTED_SUCCESS", + 281: "MAX_STORAGE_IN_PRICE_REGIME_HAS_BEEN_USED", + 282: "INVALID_ALIAS_KEY", + 283: "UNEXPECTED_TOKEN_DECIMALS", + 284: "INVALID_PROXY_ACCOUNT_ID", + 285: "INVALID_TRANSFER_ACCOUNT_ID", + 286: "INVALID_FEE_COLLECTOR_ACCOUNT_ID", + 287: "ALIAS_IS_IMMUTABLE", + 288: "SPENDER_ACCOUNT_SAME_AS_OWNER", + 289: "AMOUNT_EXCEEDS_TOKEN_MAX_SUPPLY", + 290: "NEGATIVE_ALLOWANCE_AMOUNT", + 291: "CANNOT_APPROVE_FOR_ALL_FUNGIBLE_COMMON", + 292: "SPENDER_DOES_NOT_HAVE_ALLOWANCE", + 293: "AMOUNT_EXCEEDS_ALLOWANCE", + 294: "MAX_ALLOWANCES_EXCEEDED", + 295: "EMPTY_ALLOWANCES", + 296: "SPENDER_ACCOUNT_REPEATED_IN_ALLOWANCES", + 297: "REPEATED_SERIAL_NUMS_IN_NFT_ALLOWANCES", + 298: "FUNGIBLE_TOKEN_IN_NFT_ALLOWANCES", + 299: "NFT_IN_FUNGIBLE_TOKEN_ALLOWANCES", + 300: "INVALID_ALLOWANCE_OWNER_ID", + 301: "INVALID_ALLOWANCE_SPENDER_ID", + 302: "REPEATED_ALLOWANCES_TO_DELETE", + 303: "INVALID_DELEGATING_SPENDER", + 304: "DELEGATING_SPENDER_CANNOT_GRANT_APPROVE_FOR_ALL", + 305: "DELEGATING_SPENDER_DOES_NOT_HAVE_APPROVE_FOR_ALL", + 306: "SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE", + 307: "SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME", + 308: "SCHEDULE_FUTURE_THROTTLE_EXCEEDED", + 309: "SCHEDULE_FUTURE_GAS_LIMIT_EXCEEDED", + 310: "INVALID_ETHEREUM_TRANSACTION", + 311: "WRONG_CHAIN_ID", + 312: "WRONG_NONCE", + 313: "ACCESS_LIST_UNSUPPORTED", + 314: "SCHEDULE_PENDING_EXPIRATION", + 315: "CONTRACT_IS_TOKEN_TREASURY", + 316: "CONTRACT_HAS_NON_ZERO_TOKEN_BALANCES", + 317: "CONTRACT_EXPIRED_AND_PENDING_REMOVAL", + 318: "CONTRACT_HAS_NO_AUTO_RENEW_ACCOUNT", + 319: "PERMANENT_REMOVAL_REQUIRES_SYSTEM_INITIATION", + 320: "PROXY_ACCOUNT_ID_FIELD_IS_DEPRECATED", + 321: "SELF_STAKING_IS_NOT_ALLOWED", + 322: "INVALID_STAKING_ID", + 323: "STAKING_NOT_ENABLED", + 324: "INVALID_PRNG_RANGE", + 325: "MAX_ENTITIES_IN_PRICE_REGIME_HAVE_BEEN_CREATED", + 326: "INVALID_FULL_PREFIX_SIGNATURE_FOR_PRECOMPILE", + 327: "INSUFFICIENT_BALANCES_FOR_STORAGE_RENT", + 328: "MAX_CHILD_RECORDS_EXCEEDED", + 329: "INSUFFICIENT_BALANCES_FOR_RENEWAL_FEES", + 330: "TRANSACTION_HAS_UNKNOWN_FIELDS", + 331: "ACCOUNT_IS_IMMUTABLE", + 332: "ALIAS_ALREADY_ASSIGNED", + 333: "INVALID_METADATA_KEY", + 334: "TOKEN_HAS_NO_METADATA_KEY", + 335: "MISSING_TOKEN_METADATA", + 336: "MISSING_SERIAL_NUMBERS", + 337: "TOKEN_HAS_NO_ADMIN_KEY", +} -func TestGetTransactionResult(t *testing.T) { - for code, expected := range services.ResponseCodeEnum_name { - if code > maxCode { - continue - } +var expectedTransactionTypes = map[int32]string{ + 0: unknownTransactionType, + 7: "CONTRACTCALL", + 8: "CONTRACTCREATEINSTANCE", + 9: "CONTRACTUPDATEINSTANCE", + 10: "CRYPTOADDLIVEHASH", + 11: OperationTypeCryptoCreateAccount, + 12: "CRYPTODELETE", + 13: "CRYPTODELETELIVEHASH", + 14: OperationTypeCryptoTransfer, + 15: "CRYPTOUPDATEACCOUNT", + 16: "FILEAPPEND", + 17: "FILECREATE", + 18: "FILEDELETE", + 19: "FILEUPDATE", + 20: "SYSTEMDELETE", + 21: "SYSTEMUNDELETE", + 22: "CONTRACTDELETEINSTANCE", + 23: "FREEZE", + 24: "CONSENSUSCREATETOPIC", + 25: "CONSENSUSUPDATETOPIC", + 26: "CONSENSUSDELETETOPIC", + 27: "CONSENSUSSUBMITMESSAGE", + 28: "UNCHECKEDSUBMIT", + 29: OperationTypeTokenCreate, + 31: OperationTypeTokenFreeze, + 32: OperationTypeTokenUnfreeze, + 33: OperationTypeTokenGrantKyc, + 34: OperationTypeTokenRevokeKyc, + 35: OperationTypeTokenDelete, + 36: OperationTypeTokenUpdate, + 37: OperationTypeTokenMint, + 38: OperationTypeTokenBurn, + 39: OperationTypeTokenWipe, + 40: OperationTypeTokenAssociate, + 41: OperationTypeTokenDissociate, + 42: "SCHEDULECREATE", + 43: "SCHEDULEDELETE", + 44: "SCHEDULESIGN", + 45: "TOKENFEESCHEDULEUPDATE", + 46: "TOKENPAUSE", + 47: "TOKENUNPAUSE", + 48: "CRYPTOAPPROVEALLOWANCE", + 49: "CRYPTODELETEALLOWANCE", + 50: "ETHEREUMTRANSACTION", + 51: "NODESTAKEUPDATE", + 52: "UTILPRNG", + 53: "TOKENUPDATENFTS", + 54: "NODECREATE", + 55: "NODEUPDATE", + 56: "NODEDELETE", + 57: "TOKENREJECT", +} +func TestGetTransactionResult(t *testing.T) { + for code, expected := range expectedTransactionResults { actual := GetTransactionResult(code) assert.Equal(t, expected, actual, "Code %d, expect %s, actual %s", code, expected, actual) } } func TestGetTransactionResultGeneralError(t *testing.T) { - for code := range services.ResponseCodeEnum_name { - if code <= maxCode { - continue - } - - actual := GetTransactionResult(code) - assert.Equal(t, generalErrorStatus, actual, "Code %d, expect general error, actual %s", code, actual) - } + code := MaxTransactionResult + 1 + actual := GetTransactionResult(code) + assert.Equal(t, generalErrorStatus, actual, "Code %d, expect general error, actual %s", code, actual) } -func TestTransactionTypesUpToDate(t *testing.T) { - sdkTransactionTypes := getSdkTransactionTypes() - for protoId, name := range sdkTransactionTypes { - assert.Equal(t, name, TransactionTypes[protoId], "Expected %s for proto id %d", name, protoId) +func TestTransactionTypes(t *testing.T) { + for protoId, expected := range expectedTransactionTypes { + actual := GetTransactionType(protoId) + assert.Equal(t, expected, actual, "Expected %s for proto id %d", expected, protoId) } } func TestUnknownTransactionType(t *testing.T) { - assert.Equal(t, "UNKNOWN", TransactionTypes[0]) -} - -func getSdkTransactionTypes() map[int32]string { - body := services.TransactionBody{} - dataFields := body.ProtoReflect().Descriptor().Oneofs().ByName("data").Fields() - transactionTypes := make(map[int32]string) - for i := 0; i < dataFields.Len(); i++ { - dataField := dataFields.Get(i) - name := strings.ToUpper(string(dataField.Name())) - transactionTypes[int32(dataField.Number())] = strings.ReplaceAll(name, "_", "") - } - - return transactionTypes + assert.Equal(t, "UNKNOWN", GetTransactionType(0)) + assert.Equal(t, "UNKNOWN", GetTransactionType(MaxTransactionType+1)) } diff --git a/hedera-mirror-rosetta/app/persistence/transaction.go b/hedera-mirror-rosetta/app/persistence/transaction.go index 9a4f3f79bc1..dae426b52bc 100644 --- a/hedera-mirror-rosetta/app/persistence/transaction.go +++ b/hedera-mirror-rosetta/app/persistence/transaction.go @@ -231,7 +231,7 @@ func (tr *transactionRepository) constructTransaction(sameHashTransactions []*tr operations := make(types.OperationSlice, 0) result := &types.Transaction{Hash: firstTransaction.getHashString(), Memo: firstTransaction.Memo} success := types.GetTransactionResult(transactionResultSuccess) - transactionType := types.TransactionTypes[int32(firstTransaction.Type)] + transactionType := types.GetTransactionType(int32(firstTransaction.Type)) for _, transaction := range sameHashTransactions { cryptoTransfers := make([]hbarTransfer, 0) diff --git a/hedera-mirror-rosetta/app/persistence/transaction_test.go b/hedera-mirror-rosetta/app/persistence/transaction_test.go index 572a6d5f5e7..ca8e4892941 100644 --- a/hedera-mirror-rosetta/app/persistence/transaction_test.go +++ b/hedera-mirror-rosetta/app/persistence/transaction_test.go @@ -19,6 +19,7 @@ package persistence import ( "encoding/hex" "testing" + "time" "github.com/hashgraph/hedera-mirror-node/hedera-mirror-rosetta/app/domain/types" "github.com/hashgraph/hedera-mirror-node/hedera-mirror-rosetta/app/errors" @@ -434,6 +435,81 @@ func (suite *transactionRepositorySuite) TestFindBetweenDbConnectionError() { assert.Nil(suite.T(), actual) } +func (suite *transactionRepositorySuite) TestFindBetweenUnknownTransactionType() { + // given + payer := firstEntityId.EncodedId + transaction := tdomain.NewTransactionBuilder(dbClient, payer, time.Now().UnixNano()). + ItemizedTransfer(domain.ItemizedTransferSlice{ + { + Amount: -20, + EntityId: firstEntityId, + }, + { + Amount: 20, + EntityId: secondEntityId, + }, + }). + Type(32767). + Persist() + // add crypto transfers + consensusTimestamp := transaction.ConsensusTimestamp + tdomain.NewCryptoTransferBuilder(dbClient).Amount(-40).EntityId(payer).Timestamp(consensusTimestamp).Persist() + tdomain.NewCryptoTransferBuilder(dbClient).Amount(15).EntityId(3).Timestamp(consensusTimestamp).Persist() + tdomain.NewCryptoTransferBuilder(dbClient).Amount(5).EntityId(feeCollectorEntityId.EncodedId).Timestamp(consensusTimestamp).Persist() + tdomain.NewCryptoTransferBuilder(dbClient).Amount(20).EntityId(secondEntityId.EncodedId).Timestamp(consensusTimestamp).Persist() + + expected := []*types.Transaction{ + { + Hash: tools.SafeAddHexPrefix(hex.EncodeToString(transaction.TransactionHash)), + Memo: []byte{}, + Operations: types.OperationSlice{ + { + AccountId: firstAccountId, + Amount: &types.HbarAmount{Value: -20}, + Type: "UNKNOWN", + Status: resultSuccess, + }, + { + AccountId: secondAccountId, + Amount: &types.HbarAmount{Value: 20}, + Index: 1, + Type: "UNKNOWN", + Status: resultSuccess, + }, + { + AccountId: types.NewAccountIdFromEntityId(domain.MustDecodeEntityId(3)), + Amount: &types.HbarAmount{Value: 15}, + Index: 2, + Type: types.OperationTypeFee, + Status: resultSuccess, + }, + { + AccountId: feeCollectorAccountId, + Amount: &types.HbarAmount{Value: 5}, + Index: 3, + Type: types.OperationTypeFee, + Status: resultSuccess, + }, + { + AccountId: firstAccountId, + Amount: &types.HbarAmount{Value: -20}, + Index: 4, + Type: types.OperationTypeFee, + Status: resultSuccess, + }, + }, + }, + } + t := NewTransactionRepository(dbClient) + + // when + actual, err := t.FindBetween(defaultContext, consensusTimestamp, consensusTimestamp) + + // then + assert.Nil(suite.T(), err) + assert.ElementsMatch(suite.T(), expected, actual) +} + func (suite *transactionRepositorySuite) TestFindByHashInBlock() { // given expected := suite.setupDb() diff --git a/hedera-mirror-rosetta/app/services/block_service_test.go b/hedera-mirror-rosetta/app/services/block_service_test.go index 667e801c899..aad77dfb96e 100644 --- a/hedera-mirror-rosetta/app/services/block_service_test.go +++ b/hedera-mirror-rosetta/app/services/block_service_test.go @@ -100,7 +100,7 @@ func expectedTransaction(accountId types.AccountId, entityId *domain.EntityId, h Operations: []*rTypes.Operation{ { OperationIdentifier: &rTypes.OperationIdentifier{Index: 0}, - Type: types.TransactionTypes[14], + Type: types.GetTransactionType(14), Status: &statusSuccess, Account: accountId.ToRosetta(), Amount: hbarAmount.ToRosetta(), @@ -124,7 +124,7 @@ func makeTransaction(entityId *domain.EntityId, hash string) *types.Transaction AccountId: account, Amount: &hbarAmount, Status: statusSuccess, - Type: types.TransactionTypes[14], + Type: types.GetTransactionType(14), }, }, } diff --git a/hedera-mirror-rosetta/app/services/network_service.go b/hedera-mirror-rosetta/app/services/network_service.go index 3ab47bd20f4..460e598c88f 100644 --- a/hedera-mirror-rosetta/app/services/network_service.go +++ b/hedera-mirror-rosetta/app/services/network_service.go @@ -108,7 +108,7 @@ func NewNetworkAPIService( network *rTypes.NetworkIdentifier, version *rTypes.Version, ) server.NetworkAPIServicer { - operationTypes := tools.GetStringValuesFromInt32StringMap(types.TransactionTypes) + operationTypes := tools.GetStringValuesFromInt32StringMap(types.GetTransactionTypes()) operationTypes = append(operationTypes, types.OperationTypeFee) return &networkAPIService{ BaseService: baseService, diff --git a/hedera-mirror-rosetta/app/services/network_service_test.go b/hedera-mirror-rosetta/app/services/network_service_test.go index cf45396e30b..8e04fb14fa6 100644 --- a/hedera-mirror-rosetta/app/services/network_service_test.go +++ b/hedera-mirror-rosetta/app/services/network_service_test.go @@ -82,7 +82,7 @@ type offlineNetworkServiceSuite struct { } func (suite *offlineNetworkServiceSuite) SetupSuite() { - suite.operationTypes = tools.GetStringValuesFromInt32StringMap(types.TransactionTypes) + suite.operationTypes = tools.GetStringValuesFromInt32StringMap(types.GetTransactionTypes()) suite.operationTypes = append(suite.operationTypes, types.OperationTypeFee) } diff --git a/hedera-mirror-rosetta/go.mod b/hedera-mirror-rosetta/go.mod index 331d11900e8..e264e94889a 100644 --- a/hedera-mirror-rosetta/go.mod +++ b/hedera-mirror-rosetta/go.mod @@ -7,7 +7,7 @@ require ( github.com/coinbase/rosetta-sdk-go v0.8.5 github.com/coinbase/rosetta-sdk-go/types v1.0.0 github.com/cucumber/godog v0.14.1 - github.com/ethereum/go-ethereum v1.14.7 + github.com/ethereum/go-ethereum v1.14.8 github.com/go-playground/validator/v10 v10.22.0 github.com/hashgraph/hedera-protobufs-go v0.2.1-0.20240704081952-395063202d11 github.com/hashgraph/hedera-sdk-go/v2 v2.43.0 @@ -74,8 +74,7 @@ require ( github.com/hashicorp/go-memdb v1.3.4 // indirect github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/holiman/uint256 v1.3.0 // indirect - github.com/imdario/mergo v0.3.12 // indirect + github.com/holiman/uint256 v1.3.1 // indirect github.com/jackc/pgio v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 // indirect @@ -135,7 +134,3 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) - -replace github.com/btcsuite/btcd/btcec/v2 => github.com/btcsuite/btcd/btcec/v2 v2.3.3 // remove when go-ethereum upgrades to be compatible with >= v2.3.4 - -replace golang.org/x/image/tiff => golang.org/x/image/tiff v0.16.0 diff --git a/hedera-mirror-rosetta/go.sum b/hedera-mirror-rosetta/go.sum index 1aede893510..bdb4fc073b1 100644 --- a/hedera-mirror-rosetta/go.sum +++ b/hedera-mirror-rosetta/go.sum @@ -392,8 +392,8 @@ cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -431,8 +431,8 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= -github.com/btcsuite/btcd/btcec/v2 v2.3.3 h1:6+iXlDKE8RMtKsvK0gshlXIuPbyWM/h84Ensb7o3sC0= -github.com/btcsuite/btcd/btcec/v2 v2.3.3/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= +github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= @@ -484,8 +484,6 @@ github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/Yj github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= -github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8= github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -499,8 +497,8 @@ github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDF github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/cucumber/gherkin/go/v26 v26.2.0 h1:EgIjePLWiPeslwIWmNQ3XHcypPsWAHoMCz/YEBKP4GI= github.com/cucumber/gherkin/go/v26 v26.2.0/go.mod h1:t2GAPnB8maCT4lkHL99BDCVNzCh1d7dBhCLt150Nr/0= github.com/cucumber/godog v0.14.1 h1:HGZhcOyyfaKclHjJ+r/q93iaTJZLKYW6Tv3HkmUE6+M= @@ -516,20 +514,12 @@ github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5il github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= -github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v26.1.4+incompatible h1:I8PHdc0MtxEADqYJZvhBrW9bo8gawKwwenxRM7/rLu8= github.com/docker/cli v26.1.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0= -github.com/docker/docker v24.0.9+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v27.1.1+incompatible h1:hO/M4MtV36kzKldqnA37IWhebRA+LnqqcqDja6kVaKY= github.com/docker/docker v27.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -547,8 +537,8 @@ github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= github.com/ethereum/c-kzg-4844 v1.0.2 h1:8tV84BCEiPeOkiVgW9mpYBeBUir2bkCNVqxPwwVeO+s= github.com/ethereum/c-kzg-4844 v1.0.2/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= -github.com/ethereum/go-ethereum v1.14.7 h1:EHpv3dE8evQmpVEQ/Ne2ahB06n2mQptdwqaMNhAT29g= -github.com/ethereum/go-ethereum v1.14.7/go.mod h1:Mq0biU2jbdmKSZoqOj29017ygFrMnB5/Rifwp980W4o= +github.com/ethereum/go-ethereum v1.14.8 h1:NgOWvXS+lauK+zFukEvi85UmmsS/OkV0N23UZ1VTIig= +github.com/ethereum/go-ethereum v1.14.8/go.mod h1:TJhyuDq0JDppAkFXgqjwpdlQApywnu/m10kFPxh8vvs= github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0 h1:KrE8I4reeVvf7C1tm8elRjj4BdscTYzz/WAbYyf/JI4= github.com/ethereum/go-verkle v0.1.1-0.20240306133620-7d920df305f0/go.mod h1:D9AJLVXSyZQXJQVk8oh1EwjISE+sJTn2duYIZC0dy3w= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -590,8 +580,8 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= -github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= @@ -739,13 +729,11 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hellofresh/health-go/v4 v4.7.0 h1:D+0gCkG9oEpUewIkIKxTmalxkM+0QoRDfJelJrG3sFU= github.com/hellofresh/health-go/v4 v4.7.0/go.mod h1:XyFAB5J9wAUq7PGN3om2g68bNyWIqKIrMytAT8IMJ4Y= -github.com/holiman/uint256 v1.3.0 h1:4wdcm/tnd0xXdu7iS3ruNvxkWwrb4aeBQv19ayYn8F4= -github.com/holiman/uint256 v1.3.0/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= +github.com/holiman/uint256 v1.3.1 h1:JfTzmih28bittyHM8z360dCjIA9dbPIBlcTI6lmctQs= +github.com/holiman/uint256 v1.3.1/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= @@ -877,8 +865,6 @@ github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqky github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 h1:rzf0wL0CHVc8CEsgyygG0Mn9CNCCPZqOPaz8RiiHYQk= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -897,12 +883,8 @@ github.com/onrik/gorm-logrus v0.5.0 h1:JKeFH+j8AIpCDtsxHgteMtQeZtJ1k+M6UlUXwfkd2 github.com/onrik/gorm-logrus v0.5.0/go.mod h1:QSx05I0N2V7M7ehsThQQmQE6K1H+drVYU2NQVNko4nw= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss= -github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8= github.com/opencontainers/runc v1.1.13 h1:98S2srgG9vw0zWcDpFMn5TRrh8kLxa/5OFUstuUhmRs= github.com/opencontainers/runc v1.1.13/go.mod h1:R016aXacfp/gwQBYw2FDGa9m+n6atbLWrYY8hNMT/sA= github.com/opentracing-contrib/go-grpc v0.0.0-20180928155321-4b5a12d3ff02/go.mod h1:JNdpVEzCpXBgIiv4ds+TzhN1hrtxq6ClLrTlT9OQRSc= @@ -912,8 +894,6 @@ github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NH github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/ory/dockertest/v3 v3.10.0 h1:4K3z2VMe8Woe++invjaTB7VRyQXQy5UY+loujO4aNE4= -github.com/ory/dockertest/v3 v3.10.0/go.mod h1:nr57ZbRWMqfsdGdFNLHz5jjNdDb7VVFnzAeW1n5N1Lg= github.com/ory/dockertest/v3 v3.11.0 h1:OiHcxKAvSDUwsEVh2BjxQQc/5EHz9n0va9awCtNGuyA= github.com/ory/dockertest/v3 v3.11.0/go.mod h1:VIPxS1gwT9NpPOrfD3rACs8Y9Z7yhzO4SB194iUDnUI= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= @@ -1000,7 +980,6 @@ github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNo github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= @@ -1049,7 +1028,6 @@ github.com/weaveworks/common v0.0.0-20230728070032-dd9e68f319d5 h1:nORobjToZAvi5 github.com/weaveworks/common v0.0.0-20230728070032-dd9e68f319d5/go.mod h1:rgbeLfJUtEr+G74cwFPR1k/4N0kDeaeSv/qhUNE4hm8= github.com/weaveworks/promrus v1.2.0 h1:jOLf6pe6/vss4qGHjXmGz4oDJQA+AOCqEL3FvvZGz7M= github.com/weaveworks/promrus v1.2.0/go.mod h1:SaE82+OJ91yqjrE1rsvBWVzNZKcHYFtMUyS1+Ogs/KA= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1303,7 +1281,6 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1404,7 +1381,6 @@ golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1734,9 +1710,8 @@ gorm.io/driver/postgres v1.5.9 h1:DkegyItji119OlcaLjqN11kHoUgZ/j13E0jkJZgD6A8= gorm.io/driver/postgres v1.5.9/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI= gorm.io/gorm v1.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg= gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.3.0 h1:MfDY1b1/0xN1CyMlQDac0ziEy9zJQd9CXBRRDHw2jJo= -gotest.tools/v3 v3.3.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/hedera-mirror-rosetta/test/domain/transaction_builder.go b/hedera-mirror-rosetta/test/domain/transaction_builder.go index f16e24a68fa..c63840d7369 100644 --- a/hedera-mirror-rosetta/test/domain/transaction_builder.go +++ b/hedera-mirror-rosetta/test/domain/transaction_builder.go @@ -38,6 +38,11 @@ func (b *TransactionBuilder) EntityId(encodedId int64) *TransactionBuilder { return b } +func (b *TransactionBuilder) ItemizedTransfer(itemizedTransfer domain.ItemizedTransferSlice) *TransactionBuilder { + b.transaction.ItemizedTransfer = itemizedTransfer + return b +} + func (b *TransactionBuilder) Result(result int16) *TransactionBuilder { b.transaction.Result = result return b