go-ethereum/contracts/smcUtils.go
2018-11-27 10:44:01 +05:30

30 lines
No EOL
1,022 B
Go

package contracts
import (
"math/big"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
)
func getLocSimpleVariable (slot uint64) common.Hash {
slotHash := common.BigToHash(new(big.Int).SetUint64(slot))
return slotHash
}
func getLocMappingAtKey (key common.Hash, slot uint64) common.Hash {
slotHash := common.BigToHash(new(big.Int).SetUint64(slot))
return crypto.Keccak256Hash(key.Bytes(), slotHash.Bytes())
}
func getLocDynamicArrAtElement (slotHash common.Hash, index uint64, elementSize uint64) common.Hash {
slotKecBig := crypto.Keccak256Hash(slotHash.Bytes()).Big()
//arrBig = slotKecBig + index * elementSize
arrBig := slotKecBig.Add(slotKecBig, new(big.Int).SetUint64(index * elementSize))
return common.BigToHash(arrBig)
}
func getLocFixedArrAtElement (slot uint64, index uint64, elementSize uint64) common.Hash {
slotBig := new(big.Int).SetUint64(slot)
arrBig := slotBig.Add(slotBig, new(big.Int).SetUint64(index * elementSize))
return common.BigToHash(arrBig)
}