// Create and initialize a state object. Set everything to default. func CreateState(messageRouter common.MessageRouter) (s *State, err error) { // check that we have a non-nil messageSender if messageRouter == nil { err = fmt.Errorf("Cannot initialize with a nil messageRouter") return } // create a signature keypair for this state pubKey, secKey, err := crypto.CreateKeyPair() if err != nil { return } // initialize State with default values and keypair s = &State{ messageRouter: messageRouter, self: &Participant{ index: 255, address: messageRouter.Address(), publicKey: pubKey, }, secretKey: secKey, currentStep: 1, } // register State and store our assigned ID s.self.address.ID = messageRouter.RegisterHandler(s) // a call to joinSia() may be placed here... behavior not fully defined return }