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