From 8b7c48c24723575e3965890a301b6e9bb751761b Mon Sep 17 00:00:00 2001
From: Hans Moog <hm@mkjc.net>
Date: Mon, 1 Jul 2019 15:41:27 +0200
Subject: [PATCH] Feat: leaving office (sync repo)

---
 packages/model/value_transaction/constants.go      | 11 +++++++++++
 .../model/value_transaction/value_transaction.go   | 10 ++++++----
 packages/model/valuebundle/hasher.go               | 14 ++++++++++++++
 packages/model/valuebundle/metabundle.go           |  7 +------
 4 files changed, 32 insertions(+), 10 deletions(-)
 create mode 100644 packages/model/valuebundle/hasher.go

diff --git a/packages/model/value_transaction/constants.go b/packages/model/value_transaction/constants.go
index 3025e1c7..b20a6d4f 100644
--- a/packages/model/value_transaction/constants.go
+++ b/packages/model/value_transaction/constants.go
@@ -1,5 +1,11 @@
 package value_transaction
 
+import (
+	"strings"
+
+	"github.com/iotaledger/goshimmer/packages/ternary"
+)
+
 const (
 	ADDRESS_OFFSET                    = 0
 	VALUE_OFFSET                      = ADDRESS_END
@@ -12,6 +18,7 @@ const (
 	TIMESTAMP_SIZE                  = 27
 	NONCE_SIZE                      = 81
 	SIGNATURE_MESSAGE_FRAGMENT_SIZE = 6561
+	BUNDLE_ESSENCE_SIZE             = ADDRESS_SIZE + VALUE_SIZE + SIGNATURE_MESSAGE_FRAGMENT_SIZE
 
 	ADDRESS_END                    = ADDRESS_OFFSET + ADDRESS_SIZE
 	VALUE_END                      = VALUE_OFFSET + VALUE_SIZE
@@ -21,3 +28,7 @@ const (
 
 	TOTAL_SIZE = SIGNATURE_MESSAGE_FRAGMENT_END
 )
+
+var (
+	EMPTY_SIGNATURE = ternary.Trytes(strings.Repeat("9", SIGNATURE_MESSAGE_FRAGMENT_SIZE/ternary.NUMBER_OF_TRITS_IN_A_TRYTE))
+)
diff --git a/packages/model/value_transaction/value_transaction.go b/packages/model/value_transaction/value_transaction.go
index b014d3ce..20054207 100644
--- a/packages/model/value_transaction/value_transaction.go
+++ b/packages/model/value_transaction/value_transaction.go
@@ -192,15 +192,17 @@ func (this *ValueTransaction) SetTimestamp(timestamp uint) bool {
 	return false
 }
 
-func (this *ValueTransaction) GetBundleEssence() (result ternary.Trytes) {
+func (this *ValueTransaction) GetBundleEssence() (result ternary.Trits) {
 	this.addressMutex.RLock()
 	this.valueMutex.RLock()
 	this.signatureMessageFragmentMutex.RLock()
 
+	result = make(ternary.Trits, BUNDLE_ESSENCE_SIZE)
+
+	copy(result[0:], this.trits[ADDRESS_OFFSET:VALUE_END])
+
 	if this.GetValue() < 0 {
-		result = this.trits[ADDRESS_OFFSET:VALUE_END].ToTrytes() + this.trits[SIGNATURE_MESSAGE_FRAGMENT_OFFSET:SIGNATURE_MESSAGE_FRAGMENT_END].ToTrytes()
-	} else {
-		result = this.trits[ADDRESS_OFFSET:VALUE_END].ToTrytes()
+		copy(result[:VALUE_END], this.trits[SIGNATURE_MESSAGE_FRAGMENT_OFFSET:SIGNATURE_MESSAGE_FRAGMENT_END])
 	}
 
 	this.signatureMessageFragmentMutex.RUnlock()
diff --git a/packages/model/valuebundle/hasher.go b/packages/model/valuebundle/hasher.go
new file mode 100644
index 00000000..bc2f0d99
--- /dev/null
+++ b/packages/model/valuebundle/hasher.go
@@ -0,0 +1,14 @@
+package valuebundle
+
+import (
+	"github.com/iotaledger/goshimmer/packages/curl"
+)
+
+const (
+	CURLP81_HASH_LENGTH = 243
+	CURLP81_ROUNDS      = 81
+)
+
+var (
+	Hasher = curl.NewBatchHasher(CURLP81_HASH_LENGTH, CURLP81_ROUNDS)
+)
diff --git a/packages/model/valuebundle/metabundle.go b/packages/model/valuebundle/metabundle.go
index a5714d89..47ebb409 100644
--- a/packages/model/valuebundle/metabundle.go
+++ b/packages/model/valuebundle/metabundle.go
@@ -27,10 +27,5 @@ func (bundle *MetaBundle) GetHash() ternary.Trytes {
 }
 
 func CalculateBundleHash(transactions []*value_transaction.ValueTransaction) ternary.Trytes {
-	transactions[0].GetAddress()
-	transactions[0].GetSignatureMessageFragment()
-	transactions[0].GetTimestamp()
-	transactions[0].GetValue()
-	//transactions[0].GetData()[value_transaction.SIGNATURE_MESSAGE_FRAGMENT_OFFSET]
-	return ternary.Trytes("A")
+	return (<-Hasher.Hash(transactions[0].GetBundleEssence())).ToTrytes()
 }
-- 
GitLab