Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
09280c5f
Commit
09280c5f
authored
Mar 27, 2015
by
Jeffrey Wilcke
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #565 from tgerring/responsetypes
Update response types + tests
parents
b0b09398
e22bcb78
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
202 additions
and
58 deletions
+202
-58
responses.go
rpc/responses.go
+79
-58
responses_test.go
rpc/responses_test.go
+123
-0
No files found.
rpc/responses.go
View file @
09280c5f
...
@@ -6,14 +6,14 @@ import (
...
@@ -6,14 +6,14 @@ import (
"math/big"
"math/big"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
)
)
type
BlockRes
struct
{
type
BlockRes
struct
{
fullTx
bool
fullTx
bool
BlockNumber
int64
`json:"number"`
BlockNumber
*
big
.
Int
`json:"number"`
BlockHash
common
.
Hash
`json:"hash"`
BlockHash
common
.
Hash
`json:"hash"`
ParentHash
common
.
Hash
`json:"parentHash"`
ParentHash
common
.
Hash
`json:"parentHash"`
Nonce
[
8
]
byte
`json:"nonce"`
Nonce
[
8
]
byte
`json:"nonce"`
...
@@ -22,13 +22,13 @@ type BlockRes struct {
...
@@ -22,13 +22,13 @@ type BlockRes struct {
TransactionRoot
common
.
Hash
`json:"transactionRoot"`
TransactionRoot
common
.
Hash
`json:"transactionRoot"`
StateRoot
common
.
Hash
`json:"stateRoot"`
StateRoot
common
.
Hash
`json:"stateRoot"`
Miner
common
.
Address
`json:"miner"`
Miner
common
.
Address
`json:"miner"`
Difficulty
int64
`json:"difficulty"`
Difficulty
*
big
.
Int
`json:"difficulty"`
TotalDifficulty
int64
`json:"totalDifficulty"`
TotalDifficulty
*
big
.
Int
`json:"totalDifficulty"`
Size
int64
`json:"size"`
Size
*
big
.
Int
`json:"size"`
ExtraData
[]
byte
`json:"extraData"`
ExtraData
[]
byte
`json:"extraData"`
GasLimit
int64
`json:"gasLimit"`
GasLimit
*
big
.
Int
`json:"gasLimit"`
MinGasPrice
int64
`json:"minGasPrice"`
MinGasPrice
int64
`json:"minGasPrice"`
GasUsed
int64
`json:"gasUsed"`
GasUsed
*
big
.
Int
`json:"gasUsed"`
UnixTimestamp
int64
`json:"timestamp"`
UnixTimestamp
int64
`json:"timestamp"`
Transactions
[]
*
TransactionRes
`json:"transactions"`
Transactions
[]
*
TransactionRes
`json:"transactions"`
Uncles
[]
common
.
Hash
`json:"uncles"`
Uncles
[]
common
.
Hash
`json:"uncles"`
...
@@ -58,7 +58,7 @@ func (b *BlockRes) MarshalJSON() ([]byte, error) {
...
@@ -58,7 +58,7 @@ func (b *BlockRes) MarshalJSON() ([]byte, error) {
}
}
// convert strict types to hexified strings
// convert strict types to hexified strings
ext
.
BlockNumber
=
common
.
ToHex
(
b
ig
.
NewInt
(
b
.
BlockNumber
)
.
Bytes
())
ext
.
BlockNumber
=
common
.
ToHex
(
b
.
BlockNumber
.
Bytes
())
ext
.
BlockHash
=
b
.
BlockHash
.
Hex
()
ext
.
BlockHash
=
b
.
BlockHash
.
Hex
()
ext
.
ParentHash
=
b
.
ParentHash
.
Hex
()
ext
.
ParentHash
=
b
.
ParentHash
.
Hex
()
ext
.
Nonce
=
common
.
ToHex
(
b
.
Nonce
[
:
])
ext
.
Nonce
=
common
.
ToHex
(
b
.
Nonce
[
:
])
...
@@ -67,13 +67,13 @@ func (b *BlockRes) MarshalJSON() ([]byte, error) {
...
@@ -67,13 +67,13 @@ func (b *BlockRes) MarshalJSON() ([]byte, error) {
ext
.
TransactionRoot
=
b
.
TransactionRoot
.
Hex
()
ext
.
TransactionRoot
=
b
.
TransactionRoot
.
Hex
()
ext
.
StateRoot
=
b
.
StateRoot
.
Hex
()
ext
.
StateRoot
=
b
.
StateRoot
.
Hex
()
ext
.
Miner
=
b
.
Miner
.
Hex
()
ext
.
Miner
=
b
.
Miner
.
Hex
()
ext
.
Difficulty
=
common
.
ToHex
(
b
ig
.
NewInt
(
b
.
Difficulty
)
.
Bytes
())
ext
.
Difficulty
=
common
.
ToHex
(
b
.
Difficulty
.
Bytes
())
ext
.
TotalDifficulty
=
common
.
ToHex
(
b
ig
.
NewInt
(
b
.
TotalDifficulty
)
.
Bytes
())
ext
.
TotalDifficulty
=
common
.
ToHex
(
b
.
TotalDifficulty
.
Bytes
())
ext
.
Size
=
common
.
ToHex
(
b
ig
.
NewInt
(
b
.
Size
)
.
Bytes
())
ext
.
Size
=
common
.
ToHex
(
b
.
Size
.
Bytes
())
// ext.ExtraData = common.ToHex(b.ExtraData)
// ext.ExtraData = common.ToHex(b.ExtraData)
ext
.
GasLimit
=
common
.
ToHex
(
b
ig
.
NewInt
(
b
.
GasLimit
)
.
Bytes
())
ext
.
GasLimit
=
common
.
ToHex
(
b
.
GasLimit
.
Bytes
())
// ext.MinGasPrice = common.ToHex(big.NewInt(b.MinGasPrice).Bytes())
// ext.MinGasPrice = common.ToHex(big.NewInt(b.MinGasPrice).Bytes())
ext
.
GasUsed
=
common
.
ToHex
(
b
ig
.
NewInt
(
b
.
GasUsed
)
.
Bytes
())
ext
.
GasUsed
=
common
.
ToHex
(
b
.
GasUsed
.
Bytes
())
ext
.
UnixTimestamp
=
common
.
ToHex
(
big
.
NewInt
(
b
.
UnixTimestamp
)
.
Bytes
())
ext
.
UnixTimestamp
=
common
.
ToHex
(
big
.
NewInt
(
b
.
UnixTimestamp
)
.
Bytes
())
ext
.
Transactions
=
make
([]
interface
{},
len
(
b
.
Transactions
))
ext
.
Transactions
=
make
([]
interface
{},
len
(
b
.
Transactions
))
if
b
.
fullTx
{
if
b
.
fullTx
{
...
@@ -99,7 +99,7 @@ func NewBlockRes(block *types.Block) *BlockRes {
...
@@ -99,7 +99,7 @@ func NewBlockRes(block *types.Block) *BlockRes {
}
}
res
:=
new
(
BlockRes
)
res
:=
new
(
BlockRes
)
res
.
BlockNumber
=
block
.
Number
()
.
Int64
()
res
.
BlockNumber
=
block
.
Number
()
res
.
BlockHash
=
block
.
Hash
()
res
.
BlockHash
=
block
.
Hash
()
res
.
ParentHash
=
block
.
ParentHash
()
res
.
ParentHash
=
block
.
ParentHash
()
res
.
Nonce
=
block
.
Header
()
.
Nonce
res
.
Nonce
=
block
.
Header
()
.
Nonce
...
@@ -108,15 +108,13 @@ func NewBlockRes(block *types.Block) *BlockRes {
...
@@ -108,15 +108,13 @@ func NewBlockRes(block *types.Block) *BlockRes {
res
.
TransactionRoot
=
block
.
Header
()
.
TxHash
res
.
TransactionRoot
=
block
.
Header
()
.
TxHash
res
.
StateRoot
=
block
.
Root
()
res
.
StateRoot
=
block
.
Root
()
res
.
Miner
=
block
.
Header
()
.
Coinbase
res
.
Miner
=
block
.
Header
()
.
Coinbase
res
.
Difficulty
=
block
.
Difficulty
()
.
Int64
()
res
.
Difficulty
=
block
.
Difficulty
()
if
block
.
Td
!=
nil
{
res
.
TotalDifficulty
=
block
.
Td
res
.
TotalDifficulty
=
block
.
Td
.
Int64
()
res
.
Size
=
big
.
NewInt
(
int64
(
block
.
Size
()))
}
res
.
Size
=
int64
(
block
.
Size
())
// res.ExtraData =
// res.ExtraData =
res
.
GasLimit
=
block
.
GasLimit
()
.
Int64
()
res
.
GasLimit
=
block
.
GasLimit
()
// res.MinGasPrice =
// res.MinGasPrice =
res
.
GasUsed
=
block
.
GasUsed
()
.
Int64
()
res
.
GasUsed
=
block
.
GasUsed
()
res
.
UnixTimestamp
=
block
.
Time
()
res
.
UnixTimestamp
=
block
.
Time
()
res
.
Transactions
=
make
([]
*
TransactionRes
,
len
(
block
.
Transactions
()))
res
.
Transactions
=
make
([]
*
TransactionRes
,
len
(
block
.
Transactions
()))
for
i
,
tx
:=
range
block
.
Transactions
()
{
for
i
,
tx
:=
range
block
.
Transactions
()
{
...
@@ -135,47 +133,47 @@ func NewBlockRes(block *types.Block) *BlockRes {
...
@@ -135,47 +133,47 @@ func NewBlockRes(block *types.Block) *BlockRes {
type
TransactionRes
struct
{
type
TransactionRes
struct
{
Hash
common
.
Hash
`json:"hash"`
Hash
common
.
Hash
`json:"hash"`
Nonce
int64
`json:"nonce"`
Nonce
uint64
`json:"nonce"`
BlockHash
common
.
Hash
`json:"blockHash,omitempty"`
BlockHash
common
.
Hash
`json:"blockHash,omitempty"`
BlockNumber
int64
`json:"blockNumber,omitempty"`
BlockNumber
int64
`json:"blockNumber,omitempty"`
TxIndex
int64
`json:"transactionIndex,omitempty"`
TxIndex
int64
`json:"transactionIndex,omitempty"`
From
common
.
Address
`json:"from"`
From
common
.
Address
`json:"from"`
To
*
common
.
Address
`json:"to"`
To
*
common
.
Address
`json:"to"`
Value
int64
`json:"value"`
Value
*
big
.
Int
`json:"value"`
Gas
int64
`json:"gas"`
Gas
*
big
.
Int
`json:"gas"`
GasPrice
int64
`json:"gasPrice"`
GasPrice
*
big
.
Int
`json:"gasPrice"`
Input
[]
byte
`json:"input"`
Input
[]
byte
`json:"input"`
}
}
func
(
t
*
TransactionRes
)
MarshalJSON
()
([]
byte
,
error
)
{
func
(
t
*
TransactionRes
)
MarshalJSON
()
([]
byte
,
error
)
{
var
ext
struct
{
var
ext
struct
{
Hash
string
`json:"hash"`
Hash
string
`json:"hash"`
Nonce
string
`json:"nonce"`
Nonce
string
`json:"nonce"`
BlockHash
string
`json:"blockHash,omitempty"`
BlockHash
string
`json:"blockHash,omitempty"`
BlockNumber
string
`json:"blockNumber,omitempty"`
BlockNumber
string
`json:"blockNumber,omitempty"`
TxIndex
string
`json:"transactionIndex,omitempty"`
TxIndex
string
`json:"transactionIndex,omitempty"`
From
string
`json:"from"`
From
string
`json:"from"`
To
string
`json:"to"`
To
interface
{}
`json:"to"`
Value
string
`json:"value"`
Value
string
`json:"value"`
Gas
string
`json:"gas"`
Gas
string
`json:"gas"`
GasPrice
string
`json:"gasPrice"`
GasPrice
string
`json:"gasPrice"`
Input
string
`json:"input"`
Input
string
`json:"input"`
}
}
ext
.
Hash
=
t
.
Hash
.
Hex
()
ext
.
Hash
=
t
.
Hash
.
Hex
()
ext
.
Nonce
=
common
.
ToHex
(
big
.
NewInt
(
t
.
Nonce
)
.
Bytes
())
ext
.
Nonce
=
common
.
ToHex
(
big
.
NewInt
(
int64
(
t
.
Nonce
)
)
.
Bytes
())
ext
.
BlockHash
=
t
.
BlockHash
.
Hex
()
ext
.
BlockHash
=
t
.
BlockHash
.
Hex
()
ext
.
BlockNumber
=
common
.
ToHex
(
big
.
NewInt
(
t
.
BlockNumber
)
.
Bytes
())
ext
.
BlockNumber
=
common
.
ToHex
(
big
.
NewInt
(
t
.
BlockNumber
)
.
Bytes
())
ext
.
TxIndex
=
common
.
ToHex
(
big
.
NewInt
(
t
.
TxIndex
)
.
Bytes
())
ext
.
TxIndex
=
common
.
ToHex
(
big
.
NewInt
(
t
.
TxIndex
)
.
Bytes
())
ext
.
From
=
t
.
From
.
Hex
()
ext
.
From
=
t
.
From
.
Hex
()
if
t
.
To
==
nil
{
if
t
.
To
==
nil
{
ext
.
To
=
"0x00"
ext
.
To
=
nil
}
else
{
}
else
{
ext
.
To
=
t
.
To
.
Hex
()
ext
.
To
=
t
.
To
.
Hex
()
}
}
ext
.
Value
=
common
.
ToHex
(
big
.
NewInt
(
t
.
Value
)
.
Bytes
())
ext
.
Value
=
common
.
ToHex
(
t
.
Value
.
Bytes
())
ext
.
Gas
=
common
.
ToHex
(
big
.
NewInt
(
t
.
Gas
)
.
Bytes
())
ext
.
Gas
=
common
.
ToHex
(
t
.
Gas
.
Bytes
())
ext
.
GasPrice
=
common
.
ToHex
(
big
.
NewInt
(
t
.
GasPrice
)
.
Bytes
())
ext
.
GasPrice
=
common
.
ToHex
(
t
.
GasPrice
.
Bytes
())
ext
.
Input
=
common
.
ToHex
(
t
.
Input
)
ext
.
Input
=
common
.
ToHex
(
t
.
Input
)
return
json
.
Marshal
(
ext
)
return
json
.
Marshal
(
ext
)
...
@@ -184,12 +182,12 @@ func (t *TransactionRes) MarshalJSON() ([]byte, error) {
...
@@ -184,12 +182,12 @@ func (t *TransactionRes) MarshalJSON() ([]byte, error) {
func
NewTransactionRes
(
tx
*
types
.
Transaction
)
*
TransactionRes
{
func
NewTransactionRes
(
tx
*
types
.
Transaction
)
*
TransactionRes
{
var
v
=
new
(
TransactionRes
)
var
v
=
new
(
TransactionRes
)
v
.
Hash
=
tx
.
Hash
()
v
.
Hash
=
tx
.
Hash
()
v
.
Nonce
=
int64
(
tx
.
Nonce
()
)
v
.
Nonce
=
tx
.
Nonce
(
)
v
.
From
,
_
=
tx
.
From
()
v
.
From
,
_
=
tx
.
From
()
v
.
To
=
tx
.
To
()
v
.
To
=
tx
.
To
()
v
.
Value
=
tx
.
Value
()
.
Int64
()
v
.
Value
=
tx
.
Value
()
v
.
Gas
=
tx
.
Gas
()
.
Int64
()
v
.
Gas
=
tx
.
Gas
()
v
.
GasPrice
=
tx
.
GasPrice
()
.
Int64
()
v
.
GasPrice
=
tx
.
GasPrice
()
v
.
Input
=
tx
.
Data
()
v
.
Input
=
tx
.
Data
()
return
v
return
v
}
}
...
@@ -218,25 +216,48 @@ type FilterWhisperRes struct {
...
@@ -218,25 +216,48 @@ type FilterWhisperRes struct {
}
}
type
LogRes
struct
{
type
LogRes
struct
{
Address
string
`json:"address"`
Address
common
.
Address
`json:"address"`
Topics
[]
string
`json:"topics"`
Topics
[]
common
.
Hash
`json:"topics"`
Data
string
`json:"data"`
Data
[]
byte
`json:"data"`
Number
uint64
`json:"number"`
Number
uint64
`json:"number"`
}
func
NewLogRes
(
log
state
.
Log
)
LogRes
{
var
l
LogRes
l
.
Topics
=
make
([]
common
.
Hash
,
len
(
log
.
Topics
()))
l
.
Address
=
log
.
Address
()
l
.
Data
=
log
.
Data
()
l
.
Number
=
log
.
Number
()
for
j
,
topic
:=
range
log
.
Topics
()
{
l
.
Topics
[
j
]
=
topic
}
return
l
}
func
(
l
*
LogRes
)
MarshalJSON
()
([]
byte
,
error
)
{
var
ext
struct
{
Address
string
`json:"address"`
Topics
[]
string
`json:"topics"`
Data
string
`json:"data"`
Number
string
`json:"number"`
}
ext
.
Address
=
l
.
Address
.
Hex
()
ext
.
Data
=
common
.
Bytes2Hex
(
l
.
Data
)
ext
.
Number
=
common
.
Bytes2Hex
(
big
.
NewInt
(
int64
(
l
.
Number
))
.
Bytes
())
ext
.
Topics
=
make
([]
string
,
len
(
l
.
Topics
))
for
i
,
v
:=
range
l
.
Topics
{
ext
.
Topics
[
i
]
=
v
.
Hex
()
}
return
json
.
Marshal
(
ext
)
}
}
func
NewLogsRes
(
logs
state
.
Logs
)
(
ls
[]
LogRes
)
{
func
NewLogsRes
(
logs
state
.
Logs
)
(
ls
[]
LogRes
)
{
ls
=
make
([]
LogRes
,
len
(
logs
))
ls
=
make
([]
LogRes
,
len
(
logs
))
for
i
,
log
:=
range
logs
{
for
i
,
log
:=
range
logs
{
var
l
LogRes
ls
[
i
]
=
NewLogRes
(
log
)
l
.
Topics
=
make
([]
string
,
len
(
log
.
Topics
()))
l
.
Address
=
log
.
Address
()
.
Hex
()
l
.
Data
=
common
.
ToHex
(
log
.
Data
())
l
.
Number
=
log
.
Number
()
for
j
,
topic
:=
range
log
.
Topics
()
{
l
.
Topics
[
j
]
=
topic
.
Hex
()
}
ls
[
i
]
=
l
}
}
return
return
...
...
rpc/responses_test.go
0 → 100644
View file @
09280c5f
package
rpc
import
(
"encoding/json"
"math/big"
"testing"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
)
func
TestNewBlockRes
(
t
*
testing
.
T
)
{
parentHash
:=
common
.
HexToHash
(
"0x01"
)
coinbase
:=
common
.
HexToAddress
(
"0x01"
)
root
:=
common
.
HexToHash
(
"0x01"
)
difficulty
:=
common
.
Big1
nonce
:=
uint64
(
1
)
extra
:=
""
block
:=
types
.
NewBlock
(
parentHash
,
coinbase
,
root
,
difficulty
,
nonce
,
extra
)
_
=
NewBlockRes
(
block
)
}
func
TestBlockRes
(
t
*
testing
.
T
)
{
v
:=
&
BlockRes
{
BlockNumber
:
big
.
NewInt
(
0
),
BlockHash
:
common
.
HexToHash
(
"0x0"
),
ParentHash
:
common
.
HexToHash
(
"0x0"
),
Nonce
:
[
8
]
byte
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
},
Sha3Uncles
:
common
.
HexToHash
(
"0x0"
),
LogsBloom
:
types
.
BytesToBloom
([]
byte
{
0
}),
TransactionRoot
:
common
.
HexToHash
(
"0x0"
),
StateRoot
:
common
.
HexToHash
(
"0x0"
),
Miner
:
common
.
HexToAddress
(
"0x0"
),
Difficulty
:
big
.
NewInt
(
0
),
TotalDifficulty
:
big
.
NewInt
(
0
),
Size
:
big
.
NewInt
(
0
),
ExtraData
:
[]
byte
{},
GasLimit
:
big
.
NewInt
(
0
),
MinGasPrice
:
int64
(
0
),
GasUsed
:
big
.
NewInt
(
0
),
UnixTimestamp
:
int64
(
0
),
// Transactions []*TransactionRes `json:"transactions"`
// Uncles []common.Hash `json:"uncles"`
}
_
,
_
=
json
.
Marshal
(
v
)
// fmt.Println(string(j))
}
func
TestTransactionRes
(
t
*
testing
.
T
)
{
a
:=
common
.
HexToAddress
(
"0x0"
)
v
:=
&
TransactionRes
{
Hash
:
common
.
HexToHash
(
"0x0"
),
Nonce
:
uint64
(
0
),
BlockHash
:
common
.
HexToHash
(
"0x0"
),
BlockNumber
:
int64
(
0
),
TxIndex
:
int64
(
0
),
From
:
common
.
HexToAddress
(
"0x0"
),
To
:
&
a
,
Value
:
big
.
NewInt
(
0
),
Gas
:
big
.
NewInt
(
0
),
GasPrice
:
big
.
NewInt
(
0
),
Input
:
[]
byte
{
0
},
}
_
,
_
=
json
.
Marshal
(
v
)
}
func
TestNewTransactionRes
(
t
*
testing
.
T
)
{
to
:=
common
.
HexToAddress
(
"0x02"
)
amount
:=
big
.
NewInt
(
1
)
gasAmount
:=
big
.
NewInt
(
1
)
gasPrice
:=
big
.
NewInt
(
1
)
data
:=
[]
byte
{
1
,
2
,
3
}
tx
:=
types
.
NewTransactionMessage
(
to
,
amount
,
gasAmount
,
gasPrice
,
data
)
_
=
NewTransactionRes
(
tx
)
}
func
TestLogRes
(
t
*
testing
.
T
)
{
topics
:=
make
([]
common
.
Hash
,
3
)
topics
=
append
(
topics
,
common
.
HexToHash
(
"0x00"
))
topics
=
append
(
topics
,
common
.
HexToHash
(
"0x10"
))
topics
=
append
(
topics
,
common
.
HexToHash
(
"0x20"
))
v
:=
&
LogRes
{
Topics
:
topics
,
Address
:
common
.
HexToAddress
(
"0x0"
),
Data
:
[]
byte
{
1
,
2
,
3
},
Number
:
uint64
(
5
),
}
_
,
_
=
json
.
Marshal
(
v
)
}
func
MakeStateLog
(
num
int
)
state
.
Log
{
address
:=
common
.
HexToAddress
(
"0x0"
)
data
:=
[]
byte
{
1
,
2
,
3
}
number
:=
uint64
(
num
)
topics
:=
make
([]
common
.
Hash
,
3
)
topics
=
append
(
topics
,
common
.
HexToHash
(
"0x00"
))
topics
=
append
(
topics
,
common
.
HexToHash
(
"0x10"
))
topics
=
append
(
topics
,
common
.
HexToHash
(
"0x20"
))
log
:=
state
.
NewLog
(
address
,
topics
,
data
,
number
)
return
log
}
func
TestNewLogRes
(
t
*
testing
.
T
)
{
log
:=
MakeStateLog
(
0
)
_
=
NewLogRes
(
log
)
}
func
TestNewLogsRes
(
t
*
testing
.
T
)
{
logs
:=
make
([]
state
.
Log
,
3
)
logs
[
0
]
=
MakeStateLog
(
1
)
logs
[
1
]
=
MakeStateLog
(
2
)
logs
[
2
]
=
MakeStateLog
(
3
)
_
=
NewLogsRes
(
logs
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment