Skip to content

Commit

Permalink
#54 step-2(implements AccountState and unit test case)
Browse files Browse the repository at this point in the history
  • Loading branch information
LucasMLK committed Jul 3, 2021
1 parent 17a0ecd commit f149514
Show file tree
Hide file tree
Showing 5 changed files with 510 additions and 14 deletions.
108 changes: 108 additions & 0 deletions src/main/java/io/xdag/evm/client/RocksdbProxy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/*
* The MIT License (MIT)
*
* Copyright (c) 2020-2030 The XdagJ Developers
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package io.xdag.evm.client;

import java.util.List;
import java.util.Set;
import java.util.function.Function;

import org.apache.tuweni.bytes.Bytes;

import cn.hutool.core.lang.Pair;
import io.xdag.db.KVSource;
import io.xdag.db.rocksdb.RocksdbKVSource;

public class RocksdbProxy implements KVSource<Bytes, Bytes> {

private RocksdbKVSource rocksdbKV;

public RocksdbProxy(RocksdbKVSource rocksdbKV) {
this.rocksdbKV = rocksdbKV;
}

@Override
public String getName() {
return rocksdbKV.getName();
}

@Override
public void setName(String name) {
rocksdbKV.setName(name);
}

@Override
public boolean isAlive() {
return rocksdbKV.isAlive();
}

@Override
public void init() {
rocksdbKV.init();
}

@Override
public void close() {
rocksdbKV.close();
}

@Override
public void reset() {
rocksdbKV.reset();
}

@Override
public void put(Bytes key, Bytes val) {
rocksdbKV.put(key.toArray(), val.toArray());
}

@Override
public Bytes get(Bytes key) {
byte[] value = rocksdbKV.get(key.toArray());
return value == null? null:Bytes.wrap(value);
}

@Override
public void delete(Bytes key) {
rocksdbKV.delete(key.toArray());
}

@Override
public Set<byte[]> keys() throws RuntimeException {
return rocksdbKV.keys();
}

@Override
public List<Bytes> prefixKeyLookup(byte[] key) {
return null;
}

@Override
public void fetchPrefix(byte[] key, Function<Pair<Bytes, Bytes>, Boolean> func) {
}

@Override
public List<Bytes> prefixValueLookup(byte[] key) {
return null;
}
}
24 changes: 11 additions & 13 deletions src/main/java/io/xdag/state/Account.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,15 @@
*/
package io.xdag.state;

import org.apache.tuweni.bytes.Bytes;

import io.xdag.core.SimpleEncoder;
import io.xdag.core.XAmount;
import io.xdag.utils.SimpleDecoder;
import org.bouncycastle.util.encoders.Hex;

import java.util.Arrays;

public class Account {

private final byte[] address;
private final Bytes address;
private XAmount available;
private XAmount locked;
private long nonce;
Expand All @@ -41,7 +40,7 @@ public class Account {
* Creates an account instance.
*
*/
public Account(byte[] address, XAmount available, XAmount locked, long nonce) {
public Account(Bytes address, XAmount available, XAmount locked, long nonce) {
this.address = address;
this.available = available;
this.locked = locked;
Expand All @@ -52,33 +51,32 @@ public Account(byte[] address, XAmount available, XAmount locked, long nonce) {
* Serializes this account into byte array.
*
*/
public byte[] toBytes() {
public Bytes toBytes() {
SimpleEncoder enc = new SimpleEncoder();
enc.writeXAmount(available);
enc.writeXAmount(locked);
enc.writeLong(nonce);

return enc.toBytes();
return Bytes.wrap(enc.toBytes());
}

/**
* Parses an account from byte array.
*
*/
public static Account fromBytes(byte[] address, byte[] bytes) {
SimpleDecoder dec = new SimpleDecoder(bytes);
public static Account fromBytes(Bytes address, Bytes bytes) {
SimpleDecoder dec = new SimpleDecoder(bytes.toArray());
XAmount available = dec.readXAmount();
XAmount locked = dec.readXAmount();
long nonce = dec.readLong();

return new Account(address, available, locked, nonce);
return new Account(Bytes.wrap(address), available, locked, nonce);
}

/**
* Returns the address of this account.
*
*/
public byte[] getAddress() {
public Bytes getAddress() {
return address;
}

Expand Down Expand Up @@ -132,7 +130,7 @@ void setNonce(long nonce) {

@Override
public String toString() {
return "Account [address=" + Arrays.toString(Hex.encode(address)) + ", available=" + available + ", locked=" + locked
return "Account [address=" + address.toHexString() + ", available=" + available + ", locked=" + locked
+ ", nonce=" + nonce + "]";
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/io/xdag/state/AccountState.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public interface AccountState {
* Remove a key value pair from the storage if exists.
*
*/
void removeStorage(byte[] address, byte[] key);
void removeStorage(Bytes address, Bytes key);

/**
* Makes a snapshot and starts tracking further updates.
Expand Down
Loading

0 comments on commit f149514

Please sign in to comment.