コード例 #1
1
ファイル: factoidstate_test.go プロジェクト: jjdevbiz/factomd
func TestUpdateECTransaction(t *testing.T) {
	state.SetFactoshisPerEC(1)
	add1, err := primitives.HexToHash("0000000000000000000000000000000000000000000000000000000000000001")
	if err != nil {
		t.Error(err)
		return
	}
	add1bs := primitives.StringToByteSlice32("0000000000000000000000000000000000000000000000000000000000000001")

	if state.GetECBalance(add1.Fixed()) != 0 {
		t.Errorf("Invalid address balance - %v", state.GetECBalance(add1.Fixed()))
		return
	}

	var tx interfaces.IECBlockEntry
	tx = new(entryCreditBlock.ServerIndexNumber)

	err = state.UpdateECTransaction(tx)
	if err != nil {
		t.Error(err)
		return
	}
	if state.GetECBalance(add1.Fixed()) != 0 {
		t.Errorf("Invalid address balance - %v", state.GetECBalance(add1.Fixed()))
	}

	tx = new(entryCreditBlock.MinuteNumber)

	err = state.UpdateECTransaction(tx)
	if err != nil {
		t.Error(err)
		return
	}
	if state.GetECBalance(add1.Fixed()) != 0 {
		t.Errorf("Invalid address balance - %v", state.GetECBalance(add1.Fixed()))
		return
	}

	//Proper processing
	cc := new(entryCreditBlock.CommitChain)
	cc.ECPubKey = add1bs
	cc.Credits = 100
	tx = cc

	err = state.UpdateECTransaction(tx)
	if err != nil {
		t.Error(err)
		return
	}
	if state.GetECBalance(add1.Fixed()) != -100 {
		t.Errorf("Invalid address balance - %v", state.GetECBalance(add1.Fixed()))
		return
	}

	ib := new(entryCreditBlock.IncreaseBalance)
	ib.ECPubKey = add1bs
	ib.NumEC = 100
	tx = ib

	err = state.UpdateECTransaction(tx)
	if err != nil {
		t.Error(err)
		return
	}
	if state.GetECBalance(add1.Fixed()) != 0 {
		t.Errorf("Invalid address balance - %v", state.GetECBalance(add1.Fixed()))
		return
	}

	ce := new(entryCreditBlock.CommitEntry)
	ce.ECPubKey = add1bs
	ce.Credits = 100
	tx = ce

	err = state.UpdateECTransaction(tx)
	if err != nil {
		t.Error(err)
		return
	}
	if state.GetECBalance(add1.Fixed()) != -100 {
		t.Errorf("Invalid address balance - %v", state.GetECBalance(add1.Fixed()))
		return
	}

}
コード例 #2
0
ファイル: ecBlock.go プロジェクト: FactomProject/factomd
func createECEntriesfromBlocks(fBlock interfaces.IFBlock, eBlocks []*entryBlock.EBlock, height int) []interfaces.IECBlockEntry {
	ecEntries := []interfaces.IECBlockEntry{}
	ecEntries = append(ecEntries, entryCreditBlock.NewServerIndexNumber2(uint8(height%10+1)))
	ecEntries = append(ecEntries, entryCreditBlock.NewMinuteNumber(0))
	ecEntries = append(ecEntries, entryCreditBlock.NewMinuteNumber(1))
	ecEntries = append(ecEntries, entryCreditBlock.NewMinuteNumber(2))
	ecEntries = append(ecEntries, entryCreditBlock.NewMinuteNumber(3))
	ecEntries = append(ecEntries, entryCreditBlock.NewMinuteNumber(4))
	ecEntries = append(ecEntries, entryCreditBlock.NewMinuteNumber(5))
	ecEntries = append(ecEntries, entryCreditBlock.NewMinuteNumber(6))
	ecEntries = append(ecEntries, entryCreditBlock.NewMinuteNumber(7))
	ecEntries = append(ecEntries, entryCreditBlock.NewMinuteNumber(8))
	ecEntries = append(ecEntries, entryCreditBlock.NewMinuteNumber(9))

	trans := fBlock.GetTransactions()
	for _, t := range trans {
		ecOut := t.GetECOutputs()
		for i, ec := range ecOut {
			increase := new(entryCreditBlock.IncreaseBalance)
			increase.ECPubKey = primitives.Byte32ToByteSlice32(ec.GetAddress().Fixed())
			increase.TXID = t.GetHash()
			increase.Index = uint64(i)
			increase.NumEC = ec.GetAmount() / fBlock.GetExchRate()
			ecEntries = append(ecEntries, increase)
		}
	}
	for _, eBlock := range eBlocks {
		if height == 0 {
			ecEntries = append(ecEntries, NewCommitChain(eBlock))
		} else {
			ecEntries = append(ecEntries, NewCommitEntry(eBlock))
		}
	}

	return ecEntries
}