mirror of
https://github.com/arnaucube/slowlorisdb.git
synced 2026-02-28 05:46:48 +01:00
GetBalance
This commit is contained in:
@@ -3,10 +3,13 @@ package core
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/ecdsa"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"github.com/arnaucube/slowlorisdb/db"
|
||||
lvldberrors "github.com/syndtr/goleveldb/leveldb/errors"
|
||||
)
|
||||
|
||||
type PoA struct {
|
||||
@@ -99,18 +102,23 @@ func (bc *Blockchain) UpdateWalletsWithNewTx(tx *Tx) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println("sent-->: balance of " + hex.EncodeToString(PackPubK(tx.From)[:10]) + ": " + strconv.Itoa(int(balance)))
|
||||
}
|
||||
for _, out := range tx.Outputs {
|
||||
balanceBytes, err := bc.addressdb.Get(PackPubK(tx.To))
|
||||
if err != nil {
|
||||
if err != nil && err != lvldberrors.ErrNotFound {
|
||||
return err
|
||||
}
|
||||
if err == lvldberrors.ErrNotFound {
|
||||
balanceBytes = Uint64ToBytes(uint64(0))
|
||||
}
|
||||
balance := Uint64FromBytes(balanceBytes)
|
||||
balance = balance + out.Value
|
||||
err = bc.addressdb.Put(PackPubK(tx.To), Uint64ToBytes(balance))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Println("--> received: balance of " + hex.EncodeToString(PackPubK(tx.To)[:10]) + ": " + strconv.Itoa(int(balance)))
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -128,6 +136,16 @@ func (bc *Blockchain) GetBlock(hash Hash) (*Block, error) {
|
||||
return block, nil
|
||||
}
|
||||
|
||||
func (bc *Blockchain) GetBalance(pubK *ecdsa.PublicKey) (uint64, error) {
|
||||
balanceBytes, err := bc.addressdb.Get(PackPubK(pubK))
|
||||
if err != nil {
|
||||
return uint64(0), err
|
||||
}
|
||||
balance := Uint64FromBytes(balanceBytes)
|
||||
return balance, nil
|
||||
|
||||
}
|
||||
|
||||
func (bc *Blockchain) GetPrevBlock(hash Hash) (*Block, error) {
|
||||
currentBlock, err := bc.GetBlock(hash)
|
||||
if err != nil {
|
||||
|
||||
@@ -2,6 +2,8 @@ package node
|
||||
|
||||
import (
|
||||
"crypto/ecdsa"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"testing"
|
||||
|
||||
@@ -122,6 +124,7 @@ func TestFromGenesisToTenBlocks(t *testing.T) {
|
||||
assert.Nil(t, err)
|
||||
|
||||
// create the genesis block
|
||||
// genesisBlock sends 100 to pubK
|
||||
genesisBlock, err := node.CreateGenesis(&privK.PublicKey, uint64(100))
|
||||
assert.Nil(t, err)
|
||||
assert.NotEqual(t, genesisBlock.Signature, core.Signature{})
|
||||
@@ -169,6 +172,12 @@ func TestFromGenesisToTenBlocks(t *testing.T) {
|
||||
err = node.Bc.AddBlock(block)
|
||||
assert.Nil(t, err)
|
||||
|
||||
balance, err := node.Bc.GetBalance(&pubK0)
|
||||
assert.Nil(t, err)
|
||||
fmt.Println(hex.EncodeToString(core.PackPubK(&pubK0)[:10]))
|
||||
fmt.Println("balance in pubK0", balance)
|
||||
assert.Equal(t, balance, uint64(100))
|
||||
|
||||
// add another tx sending coins to the pubK1
|
||||
privK1, err := core.NewKey()
|
||||
assert.Nil(t, err)
|
||||
@@ -199,4 +208,10 @@ func TestFromGenesisToTenBlocks(t *testing.T) {
|
||||
assert.Nil(t, err)
|
||||
err = node.Bc.AddBlock(block)
|
||||
assert.Nil(t, err)
|
||||
|
||||
balance, err = node.Bc.GetBalance(&pubK0)
|
||||
assert.Nil(t, err)
|
||||
fmt.Println(hex.EncodeToString(core.PackPubK(&pubK0)[:10]))
|
||||
fmt.Println("balance in pubK0", balance)
|
||||
assert.Equal(t, balance, uint64(90))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user