aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/mist/assets/examples/coin.html96
-rw-r--r--core/block_processor.go16
-rw-r--r--core/filter.go2
-rw-r--r--core/manager.go22
-rw-r--r--event/filter/eth_filter.go (renamed from event/filter/old_filter.go)3
-rw-r--r--rpc/http/server.go2
-rw-r--r--trie/iterator.go3
-rw-r--r--trie/trie_test.go39
-rw-r--r--whisper/message.go2
-rw-r--r--whisper/whisper.go2
-rw-r--r--xeth/whisper.go4
11 files changed, 139 insertions, 52 deletions
diff --git a/cmd/mist/assets/examples/coin.html b/cmd/mist/assets/examples/coin.html
index 1e8a1cad9..71b359834 100644
--- a/cmd/mist/assets/examples/coin.html
+++ b/cmd/mist/assets/examples/coin.html
@@ -7,7 +7,7 @@
</head>
<body>
-<h1>JevCoin</h1>
+<h1>JevCoin <code id="address"></code></h1>
<div>
<strong>Balance</strong>
<span id="balance"></strong>
@@ -20,7 +20,11 @@
<button onclick="transact()">Send</button>
</div>
+<hr>
+
<table width="100%" id="table">
+ <tr><td style="width:40%;">Address</td><td>Balance</td></tr>
+ <tbody id="table_body"></tbody>
</table>
</body>
@@ -29,9 +33,8 @@
var web3 = require('web3');
var eth = web3.eth;
- web3.setProvider(new
- web3.providers.HttpSyncProvider('http://localhost:8545'));
- var desc = [{
+ web3.setProvider(new web3.providers.HttpSyncProvider('http://localhost:8545'));
+ var desc = [{
"name": "balance(address)",
"type": "function",
"inputs": [{
@@ -55,57 +58,90 @@
}],
"outputs": []
}, {
- "name":"Changed",
+ "name":"changed",
"type":"event",
"inputs": [
{"name":"to","type":"address","indexed":true},
- {"name":"amount","type":"uint256","indexed":false},
+ {"name":"from","type":"address","indexed":true},
],
}];
- var address = web3.db.get("jevcoin", "address");
- if( address.length == 0 ) {
- var code = "0x60056011565b60b88060356000396000f35b64e8d4a51000600033600160a060020a0316600052602052604060002081905550560060e060020a6000350480637bb98a68146028578063d0679d34146034578063e3d670d714604657005b602e60b3565b60006000f35b60406004356024356059565b60006000f35b604f6004356091565b8060005260206000f35b8060005281600160a060020a03167fb52dda022b6c1a1f40905a85f257f689aa5d69d850e49cf939d688fbe5af594660206000a25050565b6000600082600160a060020a03166000526020526040600020549050919050565b5b60008156";
- address = web3.eth.transact({
- data: code,
- gasPrice: "1000000000000000",
- gas: "10000",
- });
- web3.db.put("jevcoin", "address", address);
- }
+ var address = localStorage.getItem("address");
+ // deploy if not exist
+ if (address == null) {
+ var code = "0x60056013565b610132806100356000396000f35b620f4240600033600160a060020a0316600052602052604060002081905550560060e060020a6000350480637bb98a681461002b578063d0679d3414610039578063e3d670d71461004d57005b61003361012d565b60006000f35b610047600435602435610062565b60006000f35b61005860043561010b565b8060005260206000f35b80600033600160a060020a0316600052602052604060002054106100855761008a565b610107565b80600033600160a060020a0316600052602052604060002090815403908190555080600083600160a060020a0316600052602052604060002090815401908190555081600160a060020a031633600160a060020a03167f1863989b4bb7c5c3941722099764574df7a459f9f9c6b6cdca35ddc9731792b860006000a35b5050565b6000600082600160a060020a03166000526020526040600020549050919050565b5b60008156";
+ address = web3.eth.transact({
+ data: code,
+ gasPrice: "1000000000000000",
+ gas: "10000",
+ });
+ localStorage.setItem("address", address);
+ }
+ document.querySelector("#address").innerHTML = address.toUpperCase();
var contract = web3.eth.contract(address, desc);
- contract.Changed({to: "0xaa"}).changed(function(e) {
- console.log("e: " + JSON.stringify(e));
+ contract.changed({from: eth.accounts[0]}).changed(function() {
+ refresh();
});
- contract.send( "0xaa", 10000 );
- function reflesh() {
- document.querySelector("#balance").innerHTML = contract.balance(eth.coinbase);
+ eth.watch('chain').changed(function() {
+ refresh();
+ });
+
+ function refresh() {
+ document.querySelector("#balance").innerHTML = contract.balance(eth.coinbase);
- var table = document.querySelector("#table");
+ var table = document.querySelector("#table_body");
table.innerHTML = ""; // clear
var storage = eth.storageAt(address);
+ table.innerHTML = "";
for( var item in storage ) {
- table.innerHTML += "<tr><td>"+item+"</td><td>"+web3.toDecimal(storage[item])+"</td></tr>";
+ table.innerHTML += "<tr><td>"+item.toUpperCase()+"</td><td>"+web3.toDecimal(storage[item])+"</td></tr>";
}
}
function transact() {
var to = document.querySelector("#address").value;
- if( to.length == 0 ) {
- to = "0x4205b06c2cfa0e30359edcab94543266cb6fa1d3";
- } else {
- to = "0x"+to;
- }
+
+ if( to.length == 0 ) {
+ to = "0x4205b06c2cfa0e30359edcab94543266cb6fa1d3";
+ } else {
+ to = "0x"+to;
+ }
var value = parseInt( document.querySelector("#amount").value );
- contract.transact({gas: "10000", gasprice: eth.gasPrice}).send( to, value );
+ contract.send( to, value );
}
- reflesh();
+ refresh();
</script>
</html>
+<!--
+contract JevCoin {
+ function JevCoin()
+ {
+ balances[msg.sender] = 1000000;
+ }
+
+ event changed(address indexed from, address indexed to);
+ function send(address to, uint value)
+ {
+ if( balances[msg.sender] < value ) return;
+
+ balances[msg.sender] -= value;
+ balances[to] += value;
+
+ changed(msg.sender, to);
+ }
+
+ function balance(address who) constant returns(uint t)
+ {
+ t = balances[who];
+ }
+
+ mapping(address => uint256) balances;
+ }
+-!>
diff --git a/core/block_processor.go b/core/block_processor.go
index 6db3c25f5..0eb3f8920 100644
--- a/core/block_processor.go
+++ b/core/block_processor.go
@@ -8,11 +8,9 @@ import (
"time"
"github.com/ethereum/go-ethereum/core/types"
- "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/logger"
- "github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/pow"
"github.com/ethereum/go-ethereum/pow/ezp"
"github.com/ethereum/go-ethereum/state"
@@ -25,20 +23,6 @@ type PendingBlockEvent struct {
var statelogger = logger.NewLogger("BLOCK")
-type EthManager interface {
- BlockProcessor() *BlockProcessor
- ChainManager() *ChainManager
- TxPool() *TxPool
- PeerCount() int
- IsMining() bool
- IsListening() bool
- Peers() []*p2p.Peer
- KeyManager() *crypto.KeyManager
- ClientIdentity() p2p.ClientIdentity
- Db() ethutil.Database
- EventMux() *event.TypeMux
-}
-
type BlockProcessor struct {
db ethutil.Database
// Mutex for locking the block processor. Blocks can only be handled one at a time
diff --git a/core/filter.go b/core/filter.go
index 24d1f5a4a..b93fcc8a5 100644
--- a/core/filter.go
+++ b/core/filter.go
@@ -145,7 +145,7 @@ func (self *Filter) FilterLogs(logs state.Logs) state.Logs {
// Filter the logs for interesting stuff
Logs:
for _, log := range logs {
- if len(self.address) > 0 && !bytes.Equal(self.address, log.Address()) {
+ if !bytes.Equal(self.address, log.Address()) {
continue
}
diff --git a/core/manager.go b/core/manager.go
new file mode 100644
index 000000000..4671573b1
--- /dev/null
+++ b/core/manager.go
@@ -0,0 +1,22 @@
+package core
+
+import (
+ "github.com/ethereum/go-ethereum/crypto"
+ "github.com/ethereum/go-ethereum/ethutil"
+ "github.com/ethereum/go-ethereum/event"
+ "github.com/ethereum/go-ethereum/p2p"
+)
+
+type EthManager interface {
+ BlockProcessor() *BlockProcessor
+ ChainManager() *ChainManager
+ TxPool() *TxPool
+ PeerCount() int
+ IsMining() bool
+ IsListening() bool
+ Peers() []*p2p.Peer
+ KeyManager() *crypto.KeyManager
+ ClientIdentity() p2p.ClientIdentity
+ Db() ethutil.Database
+ EventMux() *event.TypeMux
+}
diff --git a/event/filter/old_filter.go b/event/filter/eth_filter.go
index ab0127ffb..295fcfbbf 100644
--- a/event/filter/old_filter.go
+++ b/event/filter/eth_filter.go
@@ -1,6 +1,7 @@
-// XXX This is the old filter system specifically for messages. This is till in used and could use some refactoring
package filter
+// TODO make use of the generic filtering system
+
import (
"sync"
diff --git a/rpc/http/server.go b/rpc/http/server.go
index 7dcd6b867..a34400a77 100644
--- a/rpc/http/server.go
+++ b/rpc/http/server.go
@@ -106,7 +106,7 @@ func (s *RpcHttpServer) apiHandler(api *rpc.EthereumApi) http.Handler {
return
}
- rpchttplogger.Debugf("Generated response: %T %s", response, response)
+ rpchttplogger.DebugDetailf("Generated response: %T %s", response, response)
JSON.Send(w, &rpc.RpcSuccessResponse{JsonRpc: jsonrpcver, ID: reqParsed.ID, Result: response})
}
diff --git a/trie/iterator.go b/trie/iterator.go
index f0dae28bb..3b3ddd751 100644
--- a/trie/iterator.go
+++ b/trie/iterator.go
@@ -23,7 +23,6 @@ func (self *Iterator) Next() bool {
self.Key = []byte(DecodeCompact(k))
return len(k) > 0
-
}
func (self *Iterator) next(node Node, key []byte) []byte {
@@ -67,7 +66,7 @@ func (self *Iterator) next(node Node, key []byte) []byte {
if BeginsWith(key, k) {
ret = self.next(cnode, skey)
} else if bytes.Compare(k, key[:len(k)]) > 0 {
- ret = self.key(node)
+ return self.key(node)
}
if ret != nil {
diff --git a/trie/trie_test.go b/trie/trie_test.go
index ffb78d4f2..4b185f355 100644
--- a/trie/trie_test.go
+++ b/trie/trie_test.go
@@ -257,3 +257,42 @@ func BenchmarkUpdate(b *testing.B) {
}
trie.Hash()
}
+
+type kv struct {
+ k, v []byte
+ t bool
+}
+
+func TestLargeData(t *testing.T) {
+ trie := NewEmpty()
+ vals := make(map[string]*kv)
+
+ for i := byte(1); i < 255; i++ {
+ value := &kv{ethutil.LeftPadBytes([]byte{i}, 32), []byte{i}, false}
+ value2 := &kv{ethutil.LeftPadBytes([]byte{10, i}, 32), []byte{i}, false}
+ trie.Update(value.k, value.v)
+ trie.Update(value2.k, value2.v)
+ vals[string(value.k)] = value
+ vals[string(value2.k)] = value2
+ fmt.Println(value, "\n", value2)
+ }
+
+ it := trie.Iterator()
+ for it.Next() {
+ vals[string(it.Key)].t = true
+ }
+
+ var untouched []*kv
+ for _, value := range vals {
+ if !value.t {
+ untouched = append(untouched, value)
+ }
+ }
+
+ if len(untouched) > 0 {
+ t.Errorf("Missed %d nodes", len(untouched))
+ for _, value := range untouched {
+ t.Error(value)
+ }
+ }
+}
diff --git a/whisper/message.go b/whisper/message.go
index 23b5cfb0e..5d9e5b5c1 100644
--- a/whisper/message.go
+++ b/whisper/message.go
@@ -12,6 +12,8 @@ type Message struct {
Signature []byte
Payload []byte
Sent int64
+
+ To *ecdsa.PublicKey
}
func NewMessage(payload []byte) *Message {
diff --git a/whisper/whisper.go b/whisper/whisper.go
index 57c898303..066f2c4ea 100644
--- a/whisper/whisper.go
+++ b/whisper/whisper.go
@@ -256,6 +256,8 @@ func (self *Whisper) postEvent(envelope *Envelope) {
func (self *Whisper) open(envelope *Envelope) (*Message, *ecdsa.PrivateKey) {
for _, key := range self.keys {
if message, err := envelope.Open(key); err == nil || (err != nil && err == ecies.ErrInvalidPublicKey) {
+ message.To = &key.PublicKey
+
return message, key
}
}
diff --git a/xeth/whisper.go b/xeth/whisper.go
index 8e3bcefd0..d9c7e1614 100644
--- a/xeth/whisper.go
+++ b/xeth/whisper.go
@@ -99,8 +99,9 @@ type Options struct {
type WhisperMessage struct {
ref *whisper.Message
Payload string `json:"payload"`
+ To string `json:"to"`
From string `json:"from"`
- Sent int64 `json:"time"`
+ Sent int64 `json:"sent"`
}
func NewWhisperMessage(msg *whisper.Message) WhisperMessage {
@@ -108,6 +109,7 @@ func NewWhisperMessage(msg *whisper.Message) WhisperMessage {
ref: msg,
Payload: toHex(msg.Payload),
From: toHex(crypto.FromECDSAPub(msg.Recover())),
+ To: toHex(crypto.FromECDSAPub(msg.To)),
Sent: msg.Sent,
}
}