X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;ds=sidebyside;f=consensus%2Ffederation%2Ffederation.go;fp=consensus%2Ffederation%2Ffederation.go;h=0000000000000000000000000000000000000000;hb=b9175a5cd6c0fe90429c65cb5f7112e6845cb6c0;hp=f4555e1a3b388dc7beb50088cdd99777f3ed9296;hpb=f7e2219e11c2f9aa52db4d7f4281f42fc12be39f;p=bytom%2Fvapor.git diff --git a/consensus/federation/federation.go b/consensus/federation/federation.go deleted file mode 100644 index f4555e1a..00000000 --- a/consensus/federation/federation.go +++ /dev/null @@ -1,78 +0,0 @@ -package federation - -import ( - "encoding/json" - "errors" - - log "github.com/sirupsen/logrus" - - "github.com/vapor/crypto/ed25519" - "github.com/vapor/crypto/ed25519/chainkd" - "github.com/vapor/protocol/vm/vmutil" -) - -const fedCfgJson = ` -{ - "xpubs" : [ - "7f23aae65ee4307c38d342699e328f21834488e18191ebd66823d220b5a58303496c9d09731784372bade78d5e9a4a6249b2cfe2e3a85464e5a4017aa5611e47", - "585e20143db413e45fbc82f03cb61f177e9916ef1df0012daa8cbf6dbb1025ce8f98e51ae319327b63505b64fdbbf6d36ef916d79e6dd67d51b0bfe76fe544c5", - "b58170b51ca61604028ba1cb412377dfc2bc6567c0afc84c83aae1c0c297d0227ccf568561df70851f4144bbf069b525129f2434133c145e35949375b22a6c9d", - "983705ae71949c1a5d0fcf953658dd9ecc549f02c63e197b4d087ae31148097ece816bbc60d9012c316139fc550fa0f4b00beb0887f6b152f7a69bc8f392b9fa", - "d72fb92fa13bf3e0deb39de3a47c8d6eef5584719f7877c82a4c009f78fddf924d9706d48f15b2c782ec80b6bdd621a1f7ba2a0044b0e6f92245de9436885cb9", - "6798460919e8dc7095ee8b9f9d65033ef3da8c2334813149da5a1e52e9c6da07ba7d0e7379baaa0c8bdcb21890a54e6b7290bee077c645ee4b74b0c1ae9da59a" - ], - "quorum" : 4 -} -` - -type federation struct { - XPubs []chainkd.XPub `json:"xpubs"` - Quorum int `json:"quorum"` - ControlProgram []byte -} - -func parseFedConfig() *federation { - fed := &federation{} - if err := json.Unmarshal([]byte(fedCfgJson), fed); err != nil { - log.Fatalln("invalid federation config json") - } - - return fed -} - -// CheckFedConfig checks the high-level rule for federation config, whereas -// signers.Create checks the low-level rule -func CheckFedConfig() error { - fed := parseFedConfig() - if len(fed.XPubs) <= 1 { - return errors.New("federation should have more than 1 member") - } - if fed.Quorum < 1 { - return errors.New("federation quorum should be >= 1") - } - - return nil -} - -func GetFederation() *federation { - fed := parseFedConfig() - PublicKeys := chainkd.XPubKeys(fed.XPubs) - if controlProgram, err := fed.buildPegInControlProgram(PublicKeys); err == nil { - fed.ControlProgram = controlProgram - } else { - log.Fatalf("fail to build peg-in script: %v", err) - } - - return fed -} - -func (f *federation) buildPegInControlProgram(pubkeys []ed25519.PublicKey) (program []byte, err error) { - controlProg, err := vmutil.P2SPMultiSigProgram(pubkeys, f.Quorum) - if err != nil { - return nil, err - } - - builder := vmutil.NewBuilder() - builder.AddRawBytes(controlProg) - return builder.Build() -}