aboutsummaryrefslogtreecommitdiffstats
path: root/core/types
diff options
context:
space:
mode:
authorWei-Ning Huang <w@cobinhood.com>2018-10-18 13:12:16 +0800
committerWei-Ning Huang <w@dexon.org>2019-03-12 12:19:09 +0800
commit6795fe7ac5b8dedf3d1ce7fdfb7f5113d60f0421 (patch)
tree25ec550517d0e65e67596238ba9dfe84266642e7 /core/types
parentcf3c29bd89848492440a0010f6aa6ee79f3f149c (diff)
downloaddexon-6795fe7ac5b8dedf3d1ce7fdfb7f5113d60f0421.tar
dexon-6795fe7ac5b8dedf3d1ce7fdfb7f5113d60f0421.tar.gz
dexon-6795fe7ac5b8dedf3d1ce7fdfb7f5113d60f0421.tar.bz2
dexon-6795fe7ac5b8dedf3d1ce7fdfb7f5113d60f0421.tar.lz
dexon-6795fe7ac5b8dedf3d1ce7fdfb7f5113d60f0421.tar.xz
dexon-6795fe7ac5b8dedf3d1ce7fdfb7f5113d60f0421.tar.zst
dexon-6795fe7ac5b8dedf3d1ce7fdfb7f5113d60f0421.zip
core: vm: implement RAND opcode support
DEXON has a built-in on chain random oracle that allow one to retrieve a random variable. Add a new opcode `RAND` to load the random variable onto the stack.
Diffstat (limited to 'core/types')
-rw-r--r--core/types/block.go1
-rw-r--r--core/types/gen_header_json.go7
-rw-r--r--core/types/gen_log_json.go2
-rw-r--r--core/types/gen_tx_json.go2
4 files changed, 12 insertions, 0 deletions
diff --git a/core/types/block.go b/core/types/block.go
index 3d0997f5e..9532beb2d 100644
--- a/core/types/block.go
+++ b/core/types/block.go
@@ -83,6 +83,7 @@ type Header struct {
Extra []byte `json:"extraData" gencodec:"required"`
MixDigest common.Hash `json:"mixHash"`
Nonce BlockNonce `json:"nonce"`
+ Randomness []byte `json:"randomness" gencodec:"required"`
}
// field type overrides for gencodec
diff --git a/core/types/gen_header_json.go b/core/types/gen_header_json.go
index ef2249311..4f844b406 100644
--- a/core/types/gen_header_json.go
+++ b/core/types/gen_header_json.go
@@ -31,6 +31,7 @@ func (h Header) MarshalJSON() ([]byte, error) {
Extra hexutil.Bytes `json:"extraData" gencodec:"required"`
MixDigest common.Hash `json:"mixHash"`
Nonce BlockNonce `json:"nonce"`
+ Randomness []byte `json:"randomness" gencodec:"required"`
Hash common.Hash `json:"hash"`
}
var enc Header
@@ -49,6 +50,7 @@ func (h Header) MarshalJSON() ([]byte, error) {
enc.Extra = h.Extra
enc.MixDigest = h.MixDigest
enc.Nonce = h.Nonce
+ enc.Randomness = h.Randomness
enc.Hash = h.Hash()
return json.Marshal(&enc)
}
@@ -71,6 +73,7 @@ func (h *Header) UnmarshalJSON(input []byte) error {
Extra *hexutil.Bytes `json:"extraData" gencodec:"required"`
MixDigest *common.Hash `json:"mixHash"`
Nonce *BlockNonce `json:"nonce"`
+ Randomness []byte `json:"randomness" gencodec:"required"`
}
var dec Header
if err := json.Unmarshal(input, &dec); err != nil {
@@ -134,5 +137,9 @@ func (h *Header) UnmarshalJSON(input []byte) error {
if dec.Nonce != nil {
h.Nonce = *dec.Nonce
}
+ if dec.Randomness == nil {
+ return errors.New("missing required field 'randomness' for Header")
+ }
+ h.Randomness = dec.Randomness
return nil
}
diff --git a/core/types/gen_log_json.go b/core/types/gen_log_json.go
index 4d24b92fd..e301a69c8 100644
--- a/core/types/gen_log_json.go
+++ b/core/types/gen_log_json.go
@@ -12,6 +12,7 @@ import (
var _ = (*logMarshaling)(nil)
+// MarshalJSON marshals as JSON.
func (l Log) MarshalJSON() ([]byte, error) {
type Log struct {
Address common.Address `json:"address" gencodec:"required"`
@@ -37,6 +38,7 @@ func (l Log) MarshalJSON() ([]byte, error) {
return json.Marshal(&enc)
}
+// UnmarshalJSON unmarshals from JSON.
func (l *Log) UnmarshalJSON(input []byte) error {
type Log struct {
Address *common.Address `json:"address" gencodec:"required"`
diff --git a/core/types/gen_tx_json.go b/core/types/gen_tx_json.go
index b1415094b..2f216dfb9 100644
--- a/core/types/gen_tx_json.go
+++ b/core/types/gen_tx_json.go
@@ -13,6 +13,7 @@ import (
var _ = (*txdataMarshaling)(nil)
+// MarshalJSON marshals as JSON.
func (t txdata) MarshalJSON() ([]byte, error) {
type txdata struct {
AccountNonce hexutil.Uint64 `json:"nonce" gencodec:"required"`
@@ -40,6 +41,7 @@ func (t txdata) MarshalJSON() ([]byte, error) {
return json.Marshal(&enc)
}
+// UnmarshalJSON unmarshals from JSON.
func (t *txdata) UnmarshalJSON(input []byte) error {
type txdata struct {
AccountNonce *hexutil.Uint64 `json:"nonce" gencodec:"required"`