// End of Block means packing the current block away, and setting // up the next func (fs *FactoidState) ProcessEndOfBlock(state interfaces.IState) { var hash, hash2 interfaces.IHash if fs.GetCurrentBlock() == nil { panic("Invalid state on initialization") } hash = fs.CurrentBlock.GetHash() hash2 = fs.CurrentBlock.GetLedgerKeyMR() state.GetCurrentDirectoryBlock().GetDBEntries()[2].SetKeyMR(hash) if err := state.GetDB().SaveFactoidBlockHead(fs.CurrentBlock); err != nil { panic(err) } state.SetPrevFactoidKeyMR(hash) fs.CurrentBlock = block.NewFBlock(fs.GetFactoshisPerEC(), state.GetDBHeight()+1) t := coinbase.GetCoinbase(primitives.GetTimeMilli()) err := fs.CurrentBlock.AddCoinbase(t) if err != nil { panic(err.Error()) } fs.UpdateTransaction(t) if hash != nil { fs.CurrentBlock.SetPrevKeyMR(hash.Bytes()) fs.CurrentBlock.SetPrevLedgerKeyMR(hash2.Bytes()) } }
func Test_create_block(test *testing.T) { w := new(wallet.SCWallet) // make me a wallet w.Init() w.NewSeed([]byte("slfkjasdlfjasflajsfl")) scb := block.NewFBlock(1000, 0) cb := w.CreateTransaction(uint64(time.Now().UnixNano() / 1000000)) scb.AddCoinbase(cb) for i := 0; i < 3; i++ { h0, err := w.GenerateFctAddress([]byte("test "+cv.Itoa(i)+"-0"), 1, 1) if err != nil { primitives.Prtln("Error 1") test.Fail() } h1, err := w.GenerateFctAddress([]byte("test "+cv.Itoa(i)+"-1"), 1, 1) if err != nil { primitives.Prtln("Error 2") test.Fail() } h2, err := w.GenerateFctAddress([]byte("test "+cv.Itoa(i)+"-2"), 1, 1) if err != nil { primitives.Prtln("Error 3") test.Fail() } h3, err := w.GenerateFctAddress([]byte("test "+cv.Itoa(i)+"-3"), 1, 1) if err != nil { primitives.Prtln("Error 4") test.Fail() } h4, err := w.GenerateFctAddress([]byte("test "+cv.Itoa(i)+"-4"), 1, 1) if err != nil { primitives.Prtln("Error 5") test.Fail() } h5, err := w.GenerateFctAddress([]byte("test "+cv.Itoa(i)+"-5"), 1, 1) if err != nil { primitives.Prtln("Error 6") test.Fail() } t := w.CreateTransaction(uint64(time.Now().UnixNano() / 1000000)) w.AddInput(t, h1, 1000000) w.AddInput(t, h2, 1000000) w.AddOutput(t, h3, 1000000) w.AddOutput(t, h4, 500000) w.AddECOutput(t, h5, 500000) w.AddInput(t, h0, 0) fee, err := t.CalculateFee(1000) w.UpdateInput(t, 2, h0, fee) signed, err := w.SignInputs(t) if err != nil { primitives.Prtln("Error found: ", err) test.Fail() return } if !signed { primitives.Prtln("Not valid") test.Fail() return } err = scb.AddTransaction(t) if err != nil { primitives.Prtln("Error found: ", err) test.Fail() return } } data, err := scb.MarshalBinary() if err != nil { fmt.Println(err) test.Fail() return } scb2 := new(block.FBlock) _, err = scb2.UnmarshalBinaryData(data) fmt.Println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n", scb2) if err != nil { fmt.Println(err) test.Fail() return } //primitives.Prtln("FIRST\n",scb,"SECOND\n",scb2) if scb.IsEqual(scb2) != nil { fmt.Println(err) test.Fail() return } }