From d66055bcfffbc6fe196346ba7c4d892111ef3235 Mon Sep 17 00:00:00 2001
From: Wolfgang Welz <welzwo@gmail.com>
Date: Fri, 2 Aug 2019 15:11:46 +0200
Subject: [PATCH] Make the validator example a proper example

---
 plugins/validator/plugin.go         | 27 ---------------
 plugins/validator/validator_test.go | 54 +++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+), 27 deletions(-)
 create mode 100644 plugins/validator/validator_test.go

diff --git a/plugins/validator/plugin.go b/plugins/validator/plugin.go
index 10e80653..f5785b98 100644
--- a/plugins/validator/plugin.go
+++ b/plugins/validator/plugin.go
@@ -6,8 +6,6 @@ import (
 	"github.com/iotaledger/goshimmer/packages/model/value_transaction"
 	"github.com/iotaledger/goshimmer/packages/node"
 	"github.com/iotaledger/goshimmer/plugins/bundleprocessor"
-	"github.com/iotaledger/iota.go/address"
-	. "github.com/iotaledger/iota.go/consts"
 	"github.com/iotaledger/iota.go/kerl"
 	"github.com/iotaledger/iota.go/signing"
 	. "github.com/iotaledger/iota.go/trinary"
@@ -15,31 +13,6 @@ import (
 
 var PLUGIN = node.NewPlugin("Validator", node.Enabled, configure, run)
 
-// Creates bundle signature fragments and the corresponding address to validate against.
-// Each signature fragment after the first must go into its own meta transaction with value = 0.
-func demoSign(seed Trytes, index uint64, sec SecurityLevel, bundleHash Hash) (Hash, []Trytes) {
-	addr, _ := address.GenerateAddress(seed, index, sec)
-
-	// compute seed based on address index
-	subseed, _ := signing.Subseed(seed, index)
-	// generate the private key
-	prvKey, _ := signing.Key(subseed, sec)
-
-	normalizedBundleHash := signing.NormalizedBundleHash(bundleHash)
-
-	signatureFragments := make([]Trytes, sec)
-	for i := 0; i < int(sec); i++ {
-		// each security level signs one third of the (normalized) bundle hash
-		signedFragTrits, _ := signing.SignatureFragment(
-			normalizedBundleHash[i*HashTrytesSize/3:(i+1)*HashTrytesSize/3],
-			prvKey[i*KeyFragmentLength:(i+1)*KeyFragmentLength],
-		)
-		signatureFragments[i] = MustTritsToTrytes(signedFragTrits)
-	}
-
-	return addr, signatureFragments
-}
-
 func validateSignatures(bundleHash Hash, txs []*value_transaction.ValueTransaction) (bool, error) {
 	for i, tx := range txs {
 		// ignore all non-input transactions
diff --git a/plugins/validator/validator_test.go b/plugins/validator/validator_test.go
new file mode 100644
index 00000000..fd4f70b4
--- /dev/null
+++ b/plugins/validator/validator_test.go
@@ -0,0 +1,54 @@
+package validator
+
+import (
+	"fmt"
+
+	"github.com/iotaledger/iota.go/address"
+	. "github.com/iotaledger/iota.go/consts"
+	"github.com/iotaledger/iota.go/signing"
+	. "github.com/iotaledger/iota.go/trinary"
+)
+
+const (
+	exampleHash  = "999999999999999999999999999999999999999999999999999999999999999999999999999999999"
+	exampleSeed  = exampleHash
+	exmapleIndex = 0
+	exampleSec   = SecurityLevelLow
+)
+
+// Creates bundle signature fragments for the given address index and bundle hash.
+// Each signature fragment after the first must go into its own meta transaction with value = 0.
+func signature(seed Trytes, index uint64, sec SecurityLevel, bundleHash Hash) []Trytes {
+	// compute seed based on address index
+	subseed, _ := signing.Subseed(seed, index)
+	// generate the private key
+	prvKey, _ := signing.Key(subseed, sec)
+
+	normalizedBundleHash := signing.NormalizedBundleHash(bundleHash)
+
+	signatureFragments := make([]Trytes, sec)
+	for i := 0; i < int(sec); i++ {
+		// each security level signs one third of the (normalized) bundle hash
+		signedFragTrits, _ := signing.SignatureFragment(
+			normalizedBundleHash[i*HashTrytesSize/3:(i+1)*HashTrytesSize/3],
+			prvKey[i*KeyFragmentLength:(i+1)*KeyFragmentLength],
+		)
+		signatureFragments[i] = MustTritsToTrytes(signedFragTrits)
+	}
+
+	return signatureFragments
+}
+
+func ExamplePLUGIN() {
+	// corresponding address to validate against.
+	addr, _ := address.GenerateAddress(exampleSeed, exmapleIndex, exampleSec)
+	fmt.Println(addr)
+
+	// compute the signature fragments which would be added to the (meta) transactions
+	signatureFragments := signature(exampleSeed, exmapleIndex, exampleSec, exampleHash)
+	fmt.Println(signatureFragments[0])
+
+	// Output:
+	// BSIXFJENGVJSOWPVHVALMPOPO9PUKHXDQI9VDELCBJXN9TCNQPTFEDMPQCVBOJSZUHEOABYYYAT9IAHHY
+	// GHHKPBXOOBOEHGGEEKYPH9MANWEKSQTQJFJ9KUTMJQAVITYRZMNLUESQARNHAWUJAPPZSQ9A9RUKABCE9KZPJDUEHVZEOSCQMTCC9AWBGWZLZEXMJ9YOQUVIBGMXSINCOLUATYDDUBAALHCBIONNRQIVIPUFPOIFHYRBFBGXXNVYXFZUSTTA9LYGGITTAJCVDE9GCFRGIOTXLQ9ZJDLONDLZ9OPS9TNYVKLTCGFBH9QPJWLIGADWMTJVCLAUCOZFDSRRCAMVWYFXRPGPMIOPIW9GBWANVSMPONQOTNLLYYHXAMZMMNRHMRXHEIXPVNORNGZZ9ZAU9RAWASOZNIBKDWYZWKCMLEUE9UVDHZ9XXGPXZABB9FGTNDTDFTYCKLKRRC9GZFKHKDGAWPBWEUPPWISYBBNZCIBERPXTMZPZHPKKUQUPBIJBIKZAGFHDDNAGCRQMWOMLUMAYKRBMHPMDWZK9JRBDWCJCBJQYMDUBNKOIRSJSVTCNKROZ9KLFBZLOXQOASLCFETCNZRPZULOABOFCUO9WKNQILLLTQ9GWVDBASBGSKUHFHRXOKQIBRCLUYZBZMTXTIG9BJNYHTJQQOECXOWLIDOYKMFJWKRCYW99VZILSPU9I9ZSTTBZVGISUHPCWLGKCFNLIHJNCL9OWQDNAKJAGRKTGCTDRHXVAYXOHNFVJYBMZLMXV9VINNIAWONYDYOKHHMOFFEOOVBMVMYABWRWLZTWJECKKAGPCIMUDZZIEJCFBXFIYKDRMWZIOEUZNLOXZJRDHVVKOTJWMLTIXVIRJSXUBLFGOCCLEIZVCDYD9FEMCRUOERPRDFGUJSALRSOBN9J9XDTUAJZFLHUGQI9MCXZCYWTTIHNQUPUYPDRJLRZG9HAXHYQDSSCQNPTBYKNQUWZDE9QUESZJASRXHNW9OKAVUKLLMVGOJJRZCPRXSRYUECLNQEFIHI9S9NNEN9KACVIKCZYDEKCDNUASUJWMTVLSPBOBQMQEMZJXJVQAMUGBTMNWEWVJSXNZKIAADSQCCLISYSUZICSIVXZUG9MTICGWXKXKJDW9TOUBS9BTOUFUKWEBVIIJTGD9IBLRHBCPICWSZQNJQERTBOZGLJFCXKGQTAHIWKOSGHRMMWXABQYHVHOPG9XDIXMIRBXHOSYBCHSFWORNLUD9JAB9ICBIPXYVLIXYNRHJVEDMIRSAGXKZKSFZADJ9GA9DGJZAJTXZGIKRXVBCCBGJPJWJJZXZRQNWLEUZEFTWOXUBTAGDPPKKPKRYPGXVSRWLRNEDAXHZYT9DRN9L9ZWXPTTOSKMGTPQQXHACAKESRQXVXXNOLIATRKDGGJNIDWWYKQSLTC9ERTPMNXQHZNVNSBGIRRQHMOCOGDWPQAU9WPRSGZMPXZWQADUFUAWVGESLIWZNV9WNANDMZAOLXIHAOSFBADWVVAHMJVFNX9BGMMYGMJCUOYCSKJWIUMYHQFQXCFQXQNB9VTBLAYGKUZLFH9UVWIQJVLMLOZDLLIPJZSNXBPWAKKZWKCVSWUSBSQLBIAX9SQGMNPCJWTQDQEASSWWCSTVJRFDBPBLNYU9CNFUYINVMQPJZGKKUH9QBMUVWFSLPXWKBBWKNLMHGCEMJWCTNXZYWCFXYU9XLTWDSROJDTCRARMBNYDDD99HCFMXMUCO9NJSRA9G9HGWRTWNDBDQLBTCNYIVRMWRWPDJDDYCDODGEBNFTNINPNMZYMJJHVZSNEIJOAPGHAIVCZHQIULTRIZ9ML9LCWTQVGLBKKBGJYZTOZZIYUBCBKHKYUHCFGZKDERTWYHNYWSWLGPUGRB9WNQTHOMBFPKUQZREUQCNXL9MFSZCNBN9PTAVCERMWTTFDZL9BJQMC9OUBWGDTURAEYTYRDNFUBATOWFSVNXJC9JUPARMU9MINY9RWRHIXBPNIUADFAEP9F9FWNJNRPNGLWHRYYCV9ZIWBOUZPFZTWDLOCNOYZQLWFJHZ99ZBLUDSIQBJOJXMQJBUCYYMROBCJJJNCETVUYRXKHAWGUBIWOKQXOIOYBQKNDXZCKXQZLWEMXYLJPODRMOQUYOAATZZQ9JZDR9KPIHRQKIEAQNO9OVXNHDFCUUIZRQDWYGKUAYIGHGIIJIOIERLVNDUEBZUAQGDZMWNGXQPYSNWUEGF9BQDFJEQRPEGFGJTQFWO9PWECFGNDH9LW
+}
-- 
GitLab