Minor fixes and sample coin "improvements"

This commit is contained in:
obscuren 2014-04-24 00:01:22 +02:00
parent 43f1214f97
commit bb72347acf
8 changed files with 112 additions and 27 deletions

@ -5,6 +5,10 @@ function postData(data, cb) {
eth._callbacks[data._seed] = cb; eth._callbacks[data._seed] = cb;
} }
if(data.args === undefined) {
data.args = []
}
navigator.qt.postMessage(JSON.stringify(data)); navigator.qt.postMessage(JSON.stringify(data));
} }
@ -34,6 +38,14 @@ window.eth = {
createTx: function(recipient, value, gas, gasPrice, data, cb) { createTx: function(recipient, value, gas, gasPrice, data, cb) {
postData({call: "createTx", args: [recipient, value, gas, gasPrice, data]}, cb) postData({call: "createTx", args: [recipient, value, gas, gasPrice, data]}, cb)
}, },
getStorage: function(address, storageAddress, cb) {
postData({call: "getStorage", args: [address, storageAddress]}, cb)
},
getKey: function(cb) {
postData({call: "getKey"}, cb)
},
} }
window.eth._callbacks = {} window.eth._callbacks = {}

BIN
ethereal/assets/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

@ -25,12 +25,15 @@ ApplicationWindow {
WebView { WebView {
objectName: "webView" objectName: "webView"
id: webview id: webview
anchors.fill: parent
/*
anchors { anchors {
left: parent.left left: parent.left
right: parent.right right: parent.right
bottom: sizeGrip.top bottom: sizeGrip.top
top: parent.top top: parent.top
} }
*/
onTitleChanged: { window.title = title } onTitleChanged: { window.title = title }
experimental.preferences.javascriptEnabled: true experimental.preferences.javascriptEnabled: true
@ -38,7 +41,7 @@ ApplicationWindow {
experimental.preferences.developerExtrasEnabled: true experimental.preferences.developerExtrasEnabled: true
experimental.userScripts: [ui.assetPath("ethereum.js")] experimental.userScripts: [ui.assetPath("ethereum.js")]
experimental.onMessageReceived: { experimental.onMessageReceived: {
console.log("[onMessageReceived]: ", message.data) //console.log("[onMessageReceived]: ", message.data)
var data = JSON.parse(message.data) var data = JSON.parse(message.data)
switch(data.call) { switch(data.call) {
@ -57,6 +60,20 @@ ApplicationWindow {
var tx = eth.createTx(data.args[0], data.args[1],data.args[2],data.args[3],data.args[4]) var tx = eth.createTx(data.args[0], data.args[1],data.args[2],data.args[3],data.args[4])
postData(data._seed, tx) postData(data._seed, tx)
} }
break
case "getStorage":
if(data.args.length < 2) {
postData(data._seed, null)
} else {
var stateObject = eth.getStateObject(data.args[0])
var storage = stateObject.getStorage(data.args[1])
postData(data._seed, storage)
}
break
case "getKey":
var keys = eth.getKey()
postData(data._seed, keys)
break
} }
} }
function postData(seed, data) { function postData(seed, data) {
@ -67,7 +84,7 @@ ApplicationWindow {
Rectangle { Rectangle {
id: sizeGrip id: sizeGrip
color: "gray" color: "gray"
visible: true visible: false
height: 10 height: 10
anchors { anchors {
left: root.left left: root.left
@ -86,7 +103,7 @@ ApplicationWindow {
WebView { WebView {
id: inspector id: inspector
visible: true visible: false
url: webview.experimental.remoteInspectorUrl url: webview.experimental.remoteInspectorUrl
anchors { anchors {
left: root.left left: root.left

@ -1,10 +1,48 @@
<html> <html>
<head> <head>
<title>jeffcoin</title> <title>jeffcoin</title>
<body> <script type="text/javascript">
var jefcoinAddr = "3dff537f51350239abc95c76a5864aa605259e7d"
function createTransaction() {
var addr = document.querySelector("#addr").value;
var amount = document.querySelector("#amount").value;
var data = "0x" + addr + "\n" + amount
eth.createTx(jefcoinAddr, 0, "10000000", "250", data, function(tx) {
debug("received tx hash:", tx)
})
}
// Any test related actions here please
function tests() {
eth.getKey(function(keys) {
debug(keys)
})
}
function init() {
eth.getKey(function(key) {
eth.getStorage(jefcoinAddr, key, function(storage) {
debug("Currently in storage: ", storage);
document.querySelector("#currentAmount").innerHTML = "Amount: " + storage;
})
})
}
</script>
<style type="text/css">
input[type="text"] {
width: 300px;
}
</style>
</head>
<body onload="init();">
<h1>Jeff Coin</h1> <h1>Jeff Coin</h1>
<img src="file:///Users/jeffrey/Desktop/iconnew.png"> <img src="icon.png">
<div id="currentAmount"></div>
<div id="transactions"> <div id="transactions">
<input id="addr" type="text" placeholder="Receiver address"></input><br> <input id="addr" type="text" placeholder="Receiver address"></input><br>
@ -12,26 +50,8 @@
<button onclick="createTransaction();">Send Tx</button> <button onclick="createTransaction();">Send Tx</button>
</div> </div>
<div><button onclick="test();">Tests</button></div> <div><button onclick="tests();">Tests</button></div>
<script type="text/javascript">
function createTransaction() {
debug("test")
var addr = document.querySelector("#addr").value;
var amount = document.querySelector("#amount").value;
eth.createTx(addr, amount, "100", "250", "", function(tx) {
debug("received tx hash:", tx)
})
}
// Any test related actions here please
function tests() {
eth.getBlock(1, function(block) {
debug("queried block:", block)
})
}
</script>
<div id="debug" style="border: 1px solid block"></div> <div id="debug" style="border: 1px solid block"></div>

@ -7,7 +7,7 @@ import (
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/ethereal/ui" "github.com/ethereum/go-ethereum/ethereal/ui"
"github.com/ethereum/go-ethereum/utils" "github.com/ethereum/go-ethereum/utils"
"github.com/niemeyer/qml" "github.com/go-qml/qml"
"log" "log"
"os" "os"
"os/signal" "os/signal"

@ -8,7 +8,7 @@ import (
"github.com/ethereum/eth-go/ethchain" "github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethdb" "github.com/ethereum/eth-go/ethdb"
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
"github.com/niemeyer/qml" "github.com/go-qml/qml"
"math/big" "math/big"
"strings" "strings"
) )
@ -24,6 +24,18 @@ type Tx struct {
Contract bool Contract bool
} }
type Key struct {
Address string
}
type KeyRing struct {
Keys []interface{}
}
func NewKeyRing(keys []interface{}) *KeyRing {
return &KeyRing{Keys: keys}
}
func NewTxFromTransaction(tx *ethchain.Transaction) *Tx { func NewTxFromTransaction(tx *ethchain.Transaction) *Tx {
hash := hex.EncodeToString(tx.Hash()) hash := hex.EncodeToString(tx.Hash())
sender := hex.EncodeToString(tx.Recipient) sender := hex.EncodeToString(tx.Recipient)

@ -10,6 +10,20 @@ import (
"strings" "strings"
) )
type Contract struct {
object *ethchain.StateObject
}
func NewContract(object *ethchain.StateObject) *Contract {
return &Contract{object: object}
}
func (c *Contract) GetStorage(address string) string {
val := c.object.GetMem(ethutil.Big("0x" + address))
return val.BigInt().String()
}
type EthLib struct { type EthLib struct {
stateManager *ethchain.StateManager stateManager *ethchain.StateManager
blockChain *ethchain.BlockChain blockChain *ethchain.BlockChain
@ -43,6 +57,16 @@ func (lib *EthLib) CreateAndSetPrivKey() (string, string, string, string) {
return mnemonicString, fmt.Sprintf("%x", pair.Address()), fmt.Sprintf("%x", prv), fmt.Sprintf("%x", pub) return mnemonicString, fmt.Sprintf("%x", pair.Address()), fmt.Sprintf("%x", prv), fmt.Sprintf("%x", pub)
} }
func (lib *EthLib) GetKey() string {
return ethutil.Hex(ethutil.Config.Db.GetKeys()[0].Address())
}
func (lib *EthLib) GetStateObject(address string) *Contract {
stateObject := lib.stateManager.ProcState().GetContract(ethutil.FromHex(address))
return NewContract(stateObject)
}
func (lib *EthLib) CreateTx(recipient, valueStr, gasStr, gasPriceStr, dataStr string) (string, error) { func (lib *EthLib) CreateTx(recipient, valueStr, gasStr, gasPriceStr, dataStr string) (string, error) {
var hash []byte var hash []byte
var contractCreation bool var contractCreation bool

@ -7,7 +7,7 @@ import (
"github.com/ethereum/eth-go/ethchain" "github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/utils" "github.com/ethereum/go-ethereum/utils"
"github.com/niemeyer/qml" "github.com/go-qml/qml"
"os" "os"
"path" "path"
"path/filepath" "path/filepath"