forked from cerc-io/plugeth
Added more opcodes
This commit is contained in:
parent
fd7e79f4e3
commit
815313c759
@ -1,10 +1,13 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/ethereum/ethutil-go"
|
"github.com/ethereum/ethutil-go"
|
||||||
|
"github.com/obscuren/secp256-go"
|
||||||
"log"
|
"log"
|
||||||
|
"math"
|
||||||
"math/big"
|
"math/big"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -421,9 +424,40 @@ out:
|
|||||||
|
|
||||||
// x = floor(10^21 / floor(diff^0.5))
|
// x = floor(10^21 / floor(diff^0.5))
|
||||||
bm.stack.Push(x.String())
|
bm.stack.Push(x.String())
|
||||||
case oSHA256:
|
case oSHA256, oRIPEMD160:
|
||||||
case oRIPEMD160:
|
// This is probably save
|
||||||
|
// ceil(pop / 32)
|
||||||
|
length := int(math.Ceil(float64(ethutil.Big(bm.stack.Pop()).Uint64()) / 32.0))
|
||||||
|
// New buffer which will contain the concatenated popped items
|
||||||
|
data := new(bytes.Buffer)
|
||||||
|
for i := 0; i < length; i++ {
|
||||||
|
// Encode the number to bytes and have it 32bytes long
|
||||||
|
num := ethutil.NumberToBytes(ethutil.Big(bm.stack.Pop()).Bytes(), 256)
|
||||||
|
data.WriteString(string(num))
|
||||||
|
}
|
||||||
|
|
||||||
|
if op == oSHA256 {
|
||||||
|
bm.stack.Push(base.SetBytes(ethutil.Sha256Bin(data.Bytes())).String())
|
||||||
|
} else {
|
||||||
|
bm.stack.Push(base.SetBytes(ethutil.Ripemd160(data.Bytes())).String())
|
||||||
|
}
|
||||||
case oECMUL:
|
case oECMUL:
|
||||||
|
y := bm.stack.Pop()
|
||||||
|
x := bm.stack.Pop()
|
||||||
|
n := bm.stack.Pop()
|
||||||
|
|
||||||
|
if ethutil.Big(x).Cmp(ethutil.Big(y))
|
||||||
|
data := new(bytes.Buffer)
|
||||||
|
data.WriteString(x)
|
||||||
|
data.WriteString(y)
|
||||||
|
if secp256.VerifyPubkeyValidity(data.Bytes()) == 1 {
|
||||||
|
// TODO
|
||||||
|
} else {
|
||||||
|
// Invalid, push infinity
|
||||||
|
bm.stack.Push("0")
|
||||||
|
bm.stack.Push("0")
|
||||||
|
}
|
||||||
|
|
||||||
case oECADD:
|
case oECADD:
|
||||||
case oECSIGN:
|
case oECSIGN:
|
||||||
case oECRECOVER:
|
case oECRECOVER:
|
||||||
|
Loading…
Reference in New Issue
Block a user