diff --git a/src/crypto/hash.h b/src/crypto/hash.h index a228d6d..6fc578f 100644 --- a/src/crypto/hash.h +++ b/src/crypto/hash.h @@ -24,6 +24,10 @@ namespace crypto { public: uint32_t data[40]; }; + POD_CLASS cycle48 { + public: + uint32_t data[48]; + }; POD_CLASS hash { char data[HASH_SIZE]; }; diff --git a/src/cryptonote_config.h b/src/cryptonote_config.h index 7280727..88425b9 100644 --- a/src/cryptonote_config.h +++ b/src/cryptonote_config.h @@ -16,4 +16,5 @@ enum BLOB_TYPE { BLOB_TYPE_CRYPTONOTE_XTNC = 9, // XTNC BLOB_TYPE_CRYPTONOTE_TUBE = 10, // TUBE BLOB_TYPE_CRYPTONOTE_XHV = 11, // Haven + BLOB_TYPE_CRYPTONOTE_XTA = 12, // ITALO }; diff --git a/src/cryptonote_core/cryptonote_basic.h b/src/cryptonote_core/cryptonote_basic.h index 1d266ac..284f1f3 100644 --- a/src/cryptonote_core/cryptonote_basic.h +++ b/src/cryptonote_core/cryptonote_basic.h @@ -494,13 +494,14 @@ namespace cryptonote offshore::pricing_record pricing_record; crypto::cycle cycle; crypto::cycle40 cycle40; + crypto::cycle48 cycle48; BEGIN_SERIALIZE() VARINT_FIELD(major_version) VARINT_FIELD(minor_version) if (blob_type != BLOB_TYPE_FORKNOTE2) VARINT_FIELD(timestamp) FIELD(prev_id) - if (blob_type == BLOB_TYPE_CRYPTONOTE_CUCKOO || blob_type == BLOB_TYPE_CRYPTONOTE_TUBE) FIELD(nonce8) + if (blob_type == BLOB_TYPE_CRYPTONOTE_CUCKOO || blob_type == BLOB_TYPE_CRYPTONOTE_TUBE || blob_type == BLOB_TYPE_CRYPTONOTE_XTA) FIELD(nonce8) if (blob_type != BLOB_TYPE_FORKNOTE2) { if (blob_type == BLOB_TYPE_AEON) { FIELD(nonce) @@ -513,6 +514,7 @@ namespace cryptonote } if (blob_type == BLOB_TYPE_CRYPTONOTE_XTNC || blob_type == BLOB_TYPE_CRYPTONOTE_CUCKOO) FIELD(cycle) if (blob_type == BLOB_TYPE_CRYPTONOTE_TUBE) FIELD(cycle40) + if (blob_type == BLOB_TYPE_CRYPTONOTE_XTA) FIELD(cycle48) if (blob_type == BLOB_TYPE_CRYPTONOTE_XHV) FIELD(pricing_record) END_SERIALIZE() diff --git a/src/cryptonote_core/cryptonote_format_utils.cpp b/src/cryptonote_core/cryptonote_format_utils.cpp index 88428d5..769a743 100644 --- a/src/cryptonote_core/cryptonote_format_utils.cpp +++ b/src/cryptonote_core/cryptonote_format_utils.cpp @@ -475,7 +475,7 @@ namespace cryptonote //--------------------------------------------------------------- bool get_block_hashing_blob(const block& b, blobdata& blob) { - if (b.blob_type == BLOB_TYPE_CRYPTONOTE_XTNC || b.blob_type == BLOB_TYPE_CRYPTONOTE_CUCKOO || b.blob_type == BLOB_TYPE_CRYPTONOTE_TUBE) { + if (b.blob_type == BLOB_TYPE_CRYPTONOTE_XTNC || b.blob_type == BLOB_TYPE_CRYPTONOTE_CUCKOO || b.blob_type == BLOB_TYPE_CRYPTONOTE_TUBE || b.blob_type == BLOB_TYPE_CRYPTONOTE_XTA) { blob = t_serializable_object_to_blob(b.major_version); blob.append(reinterpret_cast(&b.minor_version), sizeof(b.minor_version)); blob.append(reinterpret_cast(&b.timestamp), sizeof(b.timestamp)); @@ -490,7 +490,7 @@ namespace cryptonote if (b.blob_type == BLOB_TYPE_CRYPTONOTE3) { blob.append(reinterpret_cast(&b.uncle), sizeof(b.uncle)); } - if (b.blob_type == BLOB_TYPE_CRYPTONOTE_CUCKOO || b.blob_type == BLOB_TYPE_CRYPTONOTE_TUBE) { + if (b.blob_type == BLOB_TYPE_CRYPTONOTE_CUCKOO || b.blob_type == BLOB_TYPE_CRYPTONOTE_TUBE || b.blob_type == BLOB_TYPE_CRYPTONOTE_XTA) { blob.append(reinterpret_cast(&b.nonce8), sizeof(b.nonce8)); } return true; diff --git a/src/main.cc b/src/main.cc index 6d85fad..d8dd9ca 100644 --- a/src/main.cc +++ b/src/main.cc @@ -231,6 +231,12 @@ NAN_METHOD(construct_block_blob) { // (parentBlockTemplateBuffer, nonceBuffer, c for (int i = 0; i < 40; i++ ) b.cycle40.data[i] = cycle->Get(isolate->GetCurrentContext(), i).ToLocalChecked()->NumberValue(isolate->GetCurrentContext()).ToChecked(); } + if (blob_type == BLOB_TYPE_CRYPTONOTE_XTA) { + if (info.Length() != 4) return THROW_ERROR_EXCEPTION("You must provide 4 arguments."); + Local cycle = Local::Cast(info[3]); + for (int i = 0; i < 48; i++ ) b.cycle48.data[i] = cycle->Get(isolate->GetCurrentContext(), i).ToLocalChecked()->NumberValue(isolate->GetCurrentContext()).ToChecked(); + } + if (!block_to_blob(b, output)) return THROW_ERROR_EXCEPTION("Failed to convert block to blob"); v8::Local returnValue = Nan::CopyBuffer((char*)output.data(), output.size()).ToLocalChecked(); diff --git a/src/serialization/crypto.h b/src/serialization/crypto.h index a5d3f56..f094d06 100644 --- a/src/serialization/crypto.h +++ b/src/serialization/crypto.h @@ -55,6 +55,7 @@ BLOB_SERIALIZER(crypto::chacha8_iv); BLOB_SERIALIZER(crypto::hash); BLOB_SERIALIZER(crypto::cycle); BLOB_SERIALIZER(crypto::cycle40); +BLOB_SERIALIZER(crypto::cycle48); BLOB_SERIALIZER(crypto::hash8); BLOB_SERIALIZER(crypto::public_key); BLOB_SERIALIZER(crypto::secret_key); @@ -63,6 +64,7 @@ BLOB_SERIALIZER(crypto::key_image); BLOB_SERIALIZER(crypto::signature); VARIANT_TAG(debug_archive, crypto::cycle, "cycle"); VARIANT_TAG(debug_archive, crypto::cycle40, "cycle40"); +VARIANT_TAG(debug_archive, crypto::cycle48, "cycle48"); VARIANT_TAG(debug_archive, crypto::hash, "hash"); VARIANT_TAG(debug_archive, crypto::hash8, "hash8"); VARIANT_TAG(debug_archive, crypto::public_key, "public_key");