func verify(hash common.Hash, diff *big.Int, nonce uint64) bool { sha := sha3.NewKeccak256() n := make([]byte, 8) binary.PutUvarint(n, nonce) sha.Write(n) sha.Write(hash[:]) verification := new(big.Int).Div(common.BigPow(2, 256), diff) res := common.BigD(sha.Sum(nil)) return res.Cmp(verification) <= 0 }
// New methods using proper ecdsa keys from the stdlib func ToECDSA(prv []byte) *ecdsa.PrivateKey { if len(prv) == 0 { return nil } priv := new(ecdsa.PrivateKey) priv.PublicKey.Curve = secp256k1.S256() priv.D = common.BigD(prv) priv.PublicKey.X, priv.PublicKey.Y = secp256k1.S256().ScalarBaseMult(prv) return priv }
// Seal closes the envelope by spending the requested amount of time as a proof // of work on hashing the data. func (self *Envelope) Seal(pow time.Duration) { d := make([]byte, 64) copy(d[:32], self.rlpWithoutNonce()) finish, bestBit := time.Now().Add(pow).UnixNano(), 0 for nonce := uint32(0); time.Now().UnixNano() < finish; { for i := 0; i < 1024; i++ { binary.BigEndian.PutUint32(d[60:], nonce) firstBit := common.FirstBitSet(common.BigD(crypto.Sha3(d))) if firstBit > bestBit { self.Nonce, bestBit = nonce, firstBit } nonce++ } } }
func opMload(instr instruction, pc *uint64, env Environment, contract *Contract, memory *Memory, stack *stack) { offset := stack.pop() val := common.BigD(memory.Get(offset.Int64(), 32)) stack.push(val) }