Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
f17930eb
Commit
f17930eb
authored
Dec 30, 2013
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Split up db and trie and added interface
parent
a9266864
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
123 additions
and
86 deletions
+123
-86
database.go
database.go
+9
-47
database_test.go
database_test.go
+1
-37
server.go
server.go
+2
-2
trie.go
trie.go
+50
-0
trie.test.go
trie.test.go
+61
-0
No files found.
database.go
View file @
f17930eb
...
...
@@ -7,12 +7,12 @@ import (
"fmt"
)
type
Database
struct
{
type
LDB
Database
struct
{
db
*
leveldb
.
DB
trie
*
Trie
}
func
New
Database
()
(
*
Database
,
error
)
{
func
New
LDBDatabase
()
(
*
LDB
Database
,
error
)
{
// This will eventually have to be something like a resource folder.
// it works on my system for now. Probably won't work on Windows
usr
,
_
:=
user
.
Current
()
...
...
@@ -24,7 +24,7 @@ func NewDatabase() (*Database, error) {
return
nil
,
err
}
database
:=
&
Database
{
db
:
db
}
database
:=
&
LDB
Database
{
db
:
db
}
// Bootstrap database. Sets a few defaults; such as the last block
database
.
Bootstrap
()
...
...
@@ -32,63 +32,25 @@ func NewDatabase() (*Database, error) {
return
database
,
nil
}
func
(
db
*
Database
)
Bootstrap
()
error
{
func
(
db
*
LDB
Database
)
Bootstrap
()
error
{
db
.
trie
=
NewTrie
(
db
)
return
nil
}
func
(
db
*
Database
)
Put
(
key
[]
byte
,
value
[]
byte
)
{
func
(
db
*
LDB
Database
)
Put
(
key
[]
byte
,
value
[]
byte
)
{
err
:=
db
.
db
.
Put
(
key
,
value
,
nil
)
if
err
!=
nil
{
fmt
.
Println
(
"Error put"
,
err
)
}
}
func
(
db
*
Database
)
Close
()
{
// Close the leveldb database
db
.
db
.
Close
()
}
type
Trie
struct
{
root
string
db
*
Database
}
func
NewTrie
(
db
*
Database
)
*
Trie
{
return
&
Trie
{
db
:
db
,
root
:
""
}
}
func
(
t
*
Trie
)
Update
(
key
string
,
value
string
)
{
k
:=
CompactHexDecode
(
key
)
t
.
root
=
t
.
UpdateState
(
t
.
root
,
k
,
value
)
}
func
(
t
*
Trie
)
Get
(
key
[]
byte
)
([]
byte
,
error
)
{
func
(
db
*
LDBDatabase
)
Get
(
key
[]
byte
)
([]
byte
,
error
)
{
return
nil
,
nil
}
// Inserts a new sate or delete a state based on the value
func
(
t
*
Trie
)
UpdateState
(
node
,
key
,
value
string
)
string
{
if
value
!=
""
{
return
t
.
InsertState
(
node
,
key
,
value
)
}
else
{
// delete it
}
return
""
}
func
(
t
*
Trie
)
InsertState
(
node
,
key
,
value
string
)
string
{
return
""
func
(
db
*
LDBDatabase
)
Close
()
{
// Close the leveldb database
db
.
db
.
Close
()
}
func
(
t
*
Trie
)
Put
(
node
[]
byte
)
[]
byte
{
enc
:=
Encode
(
node
)
sha
:=
Sha256Bin
(
enc
)
t
.
db
.
Put
([]
byte
(
sha
),
enc
)
return
sha
}
database_test.go
View file @
f17930eb
package
main
import
(
"testing"
_
"testing"
_
"fmt"
)
func
TestTriePut
(
t
*
testing
.
T
)
{
db
,
err
:=
NewDatabase
()
defer
db
.
Close
()
if
err
!=
nil
{
t
.
Error
(
"Error starting db"
)
}
key
:=
db
.
trie
.
Put
([]
byte
(
"testing node"
))
data
,
err
:=
db
.
db
.
Get
(
key
,
nil
)
if
err
!=
nil
{
t
.
Error
(
"Nothing at node"
)
}
s
,
_
:=
Decode
(
data
,
0
)
if
str
,
ok
:=
s
.
([]
byte
);
ok
{
if
string
(
str
)
!=
"testing node"
{
t
.
Error
(
"Wrong value node"
,
str
)
}
}
else
{
t
.
Error
(
"Invalid return type"
)
}
}
func
TestTrieUpdate
(
t
*
testing
.
T
)
{
db
,
err
:=
NewDatabase
()
defer
db
.
Close
()
if
err
!=
nil
{
t
.
Error
(
"Error starting db"
)
}
db
.
trie
.
Update
(
"test"
,
"test"
)
}
server.go
View file @
f17930eb
...
...
@@ -9,13 +9,13 @@ type Server struct {
// Channel for shutting down the server
shutdownChan
chan
bool
// DB interface
db
*
Database
db
*
LDB
Database
// Peers (NYI)
peers
*
list
.
List
}
func
NewServer
()
(
*
Server
,
error
)
{
db
,
err
:=
NewDatabase
()
db
,
err
:=
New
LDB
Database
()
if
err
!=
nil
{
return
nil
,
err
}
...
...
trie.go
0 → 100644
View file @
f17930eb
package
main
// Database interface
type
Database
interface
{
Put
(
key
[]
byte
,
value
[]
byte
)
Get
(
key
[]
byte
)
([]
byte
,
error
)
}
type
Trie
struct
{
root
string
db
Database
}
func
NewTrie
(
db
Database
)
*
Trie
{
return
&
Trie
{
db
:
db
,
root
:
""
}
}
func
(
t
*
Trie
)
Update
(
key
string
,
value
string
)
{
k
:=
CompactHexDecode
(
key
)
t
.
root
=
t
.
UpdateState
(
t
.
root
,
k
,
value
)
}
func
(
t
*
Trie
)
Get
(
key
[]
byte
)
([]
byte
,
error
)
{
return
nil
,
nil
}
// Inserts a new sate or delete a state based on the value
func
(
t
*
Trie
)
UpdateState
(
node
string
,
key
[]
int
,
value
string
)
string
{
if
value
!=
""
{
return
t
.
InsertState
(
node
,
""
/*key*/
,
value
)
}
else
{
// delete it
}
return
""
}
func
(
t
*
Trie
)
InsertState
(
node
,
key
,
value
string
)
string
{
return
""
}
func
(
t
*
Trie
)
Put
(
node
[]
byte
)
[]
byte
{
enc
:=
Encode
(
node
)
sha
:=
Sha256Bin
(
enc
)
t
.
db
.
Put
([]
byte
(
sha
),
enc
)
return
sha
}
trie.test.go
0 → 100644
View file @
f17930eb
package
main
import
(
"testing"
)
type
MemDatabase
struct
{
db
map
[
string
][]
byte
trie
*
Trie
}
func
NewMemDatabase
()
(
*
MemDatabase
,
error
)
{
db
:=
&
MemDatabase
{
db
:
make
(
map
[
string
][]
byte
)}
db
.
trie
=
NewTrie
(
db
)
return
db
,
nil
}
func
(
db
*
MemDatabase
)
Put
(
key
[]
byte
,
value
[]
byte
)
{
db
.
db
[
string
(
key
)]
=
value
}
func
(
db
*
MemDatabase
)
Get
(
key
[]
byte
)
([]
byte
,
error
)
{
return
db
.
db
[
string
(
key
)],
nil
}
func
TestTriePut
(
t
*
testing
.
T
)
{
db
,
err
:=
NewMemDatabase
()
if
err
!=
nil
{
t
.
Error
(
"Error starting db"
)
}
key
:=
db
.
trie
.
Put
([]
byte
(
"testing node"
))
data
,
err
:=
db
.
Get
(
key
)
if
err
!=
nil
{
t
.
Error
(
"Nothing at node"
)
}
s
,
_
:=
Decode
(
data
,
0
)
if
str
,
ok
:=
s
.
([]
byte
);
ok
{
if
string
(
str
)
!=
"testing node"
{
t
.
Error
(
"Wrong value node"
,
str
)
}
}
else
{
t
.
Error
(
"Invalid return type"
)
}
}
func
TestTrieUpdate
(
t
*
testing
.
T
)
{
db
,
err
:=
NewMemDatabase
()
if
err
!=
nil
{
t
.
Error
(
"Error starting db"
)
}
db
.
trie
.
Update
(
"test"
,
"test"
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment