diff options
author | Wei-Ning Huang <w@cobinhood.com> | 2018-10-18 13:12:16 +0800 |
---|---|---|
committer | Wei-Ning Huang <w@dexon.org> | 2019-04-09 21:32:50 +0800 |
commit | 6137f79f726e8ec6a282ee0ca4ed45c05020ed4c (patch) | |
tree | 9a9e5c3cc01e0a7c1898799562e13fabeaf608d5 /core/types | |
parent | 1fa4415d48e4ed7ee0f75ed21e62847ea68d3a0f (diff) | |
download | dexon-6137f79f726e8ec6a282ee0ca4ed45c05020ed4c.tar dexon-6137f79f726e8ec6a282ee0ca4ed45c05020ed4c.tar.gz dexon-6137f79f726e8ec6a282ee0ca4ed45c05020ed4c.tar.bz2 dexon-6137f79f726e8ec6a282ee0ca4ed45c05020ed4c.tar.lz dexon-6137f79f726e8ec6a282ee0ca4ed45c05020ed4c.tar.xz dexon-6137f79f726e8ec6a282ee0ca4ed45c05020ed4c.tar.zst dexon-6137f79f726e8ec6a282ee0ca4ed45c05020ed4c.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.go | 1 | ||||
-rw-r--r-- | core/types/gen_header_json.go | 7 | ||||
-rw-r--r-- | core/types/gen_log_json.go | 2 | ||||
-rw-r--r-- | core/types/gen_tx_json.go | 2 |
4 files changed, 12 insertions, 0 deletions
diff --git a/core/types/block.go b/core/types/block.go index b568c2b37..ef2cb2c56 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 4c028337f..d06b07769 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"` |