From 4b1f63563659cfedd305974132af650e438d3c58 Mon Sep 17 00:00:00 2001 From: AnilChinchawale Date: Sun, 2 Dec 2018 11:16:17 +0530 Subject: [PATCH] add randomize(smc) reader --- contracts/randomizeReader.go | 58 ++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 contracts/randomizeReader.go diff --git a/contracts/randomizeReader.go b/contracts/randomizeReader.go new file mode 100644 index 0000000000..08934db6a1 --- /dev/null +++ b/contracts/randomizeReader.go @@ -0,0 +1,58 @@ +package contracts + +import ( + "fmt" + "strings" + "time" + + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + randomizeContract "github.com/ethereum/go-ethereum/contracts/randomize/contract" + "github.com/ethereum/go-ethereum/core/state" +) + +var ( + slotRandomizeMapping = map[string]uint64{ + "randomSecret": 0, + "randomOpening": 1, + } + ParsedRandomizeABI, _ = abi.JSON(strings.NewReader(randomizeContract.XDCRandomizeABI)) +) + +func GetSecret(statedb *state.StateDB, parsed abi.ABI, address common.Address) [][]byte { + start := time.Now() + fmt.Printf("--------GetSecret---------\n") + + slot := slotRandomizeMapping["randomSecret"] + locSecret := getLocMappingAtKey(address.Hash(), slot) + arrLength := statedb.GetState(common.HexToAddress(common.RandomizeSMC), common.BigToHash(locSecret)) + fmt.Printf("Secret length: %v\n", arrLength.Hex()) + keys := []common.Hash{} + for i := uint64(0); i < arrLength.Big().Uint64(); i++ { + key := getLocDynamicArrAtElement(common.BigToHash(locSecret), i, 1) + keys = append(keys, key) + } + rets := [][]byte{} + for _, key := range keys { + ret := statedb.GetState(common.HexToAddress(common.RandomizeSMC), key) + rets = append(rets, ret.Bytes()) + fmt.Printf("ret hex: %v - ret byte: %v\n", ret.Hex(), ret.Bytes()) + } + elapsed := time.Since(start) + + fmt.Printf("Execution time: %s\n", elapsed) + return rets +} + +func GetOpening(statedb *state.StateDB, parsed abi.ABI, address common.Address) []byte { + start := time.Now() + fmt.Printf("--------GetOpening---------\n") + + slot := slotRandomizeMapping["randomOpening"] + locOpening := getLocMappingAtKey(address.Hash(), slot) + ret := statedb.GetState(common.HexToAddress(common.RandomizeSMC), common.BigToHash(locOpening)) + fmt.Printf("ret hex: %v - ret byte: %v\n", ret.Hex(), ret.Bytes()) + elapsed := time.Since(start) + fmt.Printf("Execution time: %s\n", elapsed) + return ret.Bytes() +} \ No newline at end of file