diff options
author | obscuren <geffobscura@gmail.com> | 2014-01-11 05:44:53 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-01-11 05:44:53 +0800 |
commit | 8bbf879cb31e9cb28700773ed788421f9935ac36 (patch) | |
tree | ea2ab662a0577aa6238b084eda7ec9644ee35995 /transaction.go | |
parent | f6fa4f88797030b8e83066cb262a68958953974e (diff) | |
download | dexon-8bbf879cb31e9cb28700773ed788421f9935ac36.tar dexon-8bbf879cb31e9cb28700773ed788421f9935ac36.tar.gz dexon-8bbf879cb31e9cb28700773ed788421f9935ac36.tar.bz2 dexon-8bbf879cb31e9cb28700773ed788421f9935ac36.tar.lz dexon-8bbf879cb31e9cb28700773ed788421f9935ac36.tar.xz dexon-8bbf879cb31e9cb28700773ed788421f9935ac36.tar.zst dexon-8bbf879cb31e9cb28700773ed788421f9935ac36.zip |
Moving the ethgo to individual packages
Diffstat (limited to 'transaction.go')
-rw-r--r-- | transaction.go | 206 |
1 files changed, 0 insertions, 206 deletions
diff --git a/transaction.go b/transaction.go deleted file mode 100644 index 90e0d9869..000000000 --- a/transaction.go +++ /dev/null @@ -1,206 +0,0 @@ -package main - -import ( - "math/big" - "fmt" - "github.com/obscuren/secp256k1-go" - _"encoding/hex" - _"crypto/sha256" - _ "bytes" -) - -/* -Transaction Contract Size -------------------------------------------- -sender sender 20 bytes -recipient 0x0 20 bytes -value endowment 4 bytes (uint32) -fee fee 4 bytes (uint32) -d_size o_size 4 bytes (uint32) -data ops * -signature signature 64 bytes -*/ - -var StepFee *big.Int = new(big.Int) -var TxFee *big.Int = new(big.Int) -var ContractFee *big.Int = new(big.Int) -var MemFee *big.Int = new(big.Int) -var DataFee *big.Int = new(big.Int) -var CryptoFee *big.Int = new(big.Int) -var ExtroFee *big.Int = new(big.Int) - -var Period1Reward *big.Int = new(big.Int) -var Period2Reward *big.Int = new(big.Int) -var Period3Reward *big.Int = new(big.Int) -var Period4Reward *big.Int = new(big.Int) - -type Transaction struct { - nonce string - sender string - recipient string - value uint64 - fee uint32 - data []string - memory []int - lastTx string - v uint32 - r, s []byte -} - -func NewTransaction(to string, value uint64, data []string) *Transaction { - tx := Transaction{sender: "1234567890", recipient: to, value: value} - tx.nonce = "0" - tx.fee = 0//uint32((ContractFee + MemoryFee * float32(len(tx.data))) * 1e8) - tx.lastTx = "0" - - // Serialize the data - tx.data = make([]string, len(data)) - for i, val := range data { - instr, err := CompileInstr(val) - if err != nil { - //fmt.Printf("compile error:%d %v\n", i+1, err) - } - - tx.data[i] = instr - } - - tx.Sign([]byte("privkey")) - tx.Sender() - - - return &tx -} - -func (tx *Transaction) Hash() []byte { - preEnc := []interface{}{ - tx.nonce, - tx.recipient, - tx.value, - tx.fee, - tx.data, - } - - return Sha256Bin(Encode(preEnc)) -} - -func (tx *Transaction) IsContract() bool { - return tx.recipient == "" -} - -func (tx *Transaction) Signature(key []byte) []byte { - hash := tx.Hash() - sec := Sha256Bin(key) - - sig, _ := secp256k1.Sign(hash, sec) - - return sig -} - -func (tx *Transaction) PublicKey() []byte { - hash := Sha256Bin(tx.Hash()) - sig := append(tx.r, tx.s...) - - pubkey, _ := secp256k1.RecoverPubkey(hash, sig) - - return pubkey -} - -func (tx *Transaction) Sender() []byte { - pubkey := tx.PublicKey() - - // Validate the returned key. - // Return nil if public key isn't in full format (04 = full, 03 = compact) - if pubkey[0] != 4 { - return nil - } - - return Sha256Bin(pubkey[1:65])[12:] -} - -func (tx *Transaction) Sign(privk []byte) { - sig := tx.Signature(privk) - - // Add 27 so we get either 27 or 28 (for positive and negative) - tx.v = uint32(sig[64]) + 27 - tx.r = sig[:32] - tx.s = sig[32:65] -} - -func (tx *Transaction) MarshalRlp() []byte { - // Prepare the transaction for serialization - preEnc := []interface{}{ - tx.nonce, - tx.recipient, - tx.value, - tx.fee, - tx.data, - tx.v, - tx.r, - tx.s, - } - - return Encode(preEnc) -} - -func (tx *Transaction) UnmarshalRlp(data []byte) { - decoder := NewRlpDecoder(data) - - tx.nonce = decoder.Get(0).AsString() - tx.recipient = decoder.Get(0).AsString() - tx.value = decoder.Get(2).AsUint() - tx.fee = uint32(decoder.Get(3).AsUint()) - - d := decoder.Get(4) - tx.data = make([]string, d.Length()) - fmt.Println(d.Get(0)) - for i := 0; i < d.Length(); i++ { - tx.data[i] = d.Get(i).AsString() - } - - tx.v = uint32(decoder.Get(5).AsUint()) - tx.r = decoder.Get(6).AsBytes() - tx.s = decoder.Get(7).AsBytes() -} - -func InitFees() { - // Base for 2**60 - b60 := new(big.Int) - b60.Exp(big.NewInt(2), big.NewInt(64), big.NewInt(0)) - // Base for 2**80 - b80 := new(big.Int) - b80.Exp(big.NewInt(2), big.NewInt(80), big.NewInt(0)) - - StepFee.Exp(big.NewInt(10), big.NewInt(16), big.NewInt(0)) - //StepFee.Div(b60, big.NewInt(64)) - //fmt.Println("StepFee:", StepFee) - - TxFee.Exp(big.NewInt(2), big.NewInt(64), big.NewInt(0)) - //fmt.Println("TxFee:", TxFee) - - ContractFee.Exp(big.NewInt(2), big.NewInt(64), big.NewInt(0)) - //fmt.Println("ContractFee:", ContractFee) - - MemFee.Div(b60, big.NewInt(4)) - //fmt.Println("MemFee:", MemFee) - - DataFee.Div(b60, big.NewInt(16)) - //fmt.Println("DataFee:", DataFee) - - CryptoFee.Div(b60, big.NewInt(16)) - //fmt.Println("CrytoFee:", CryptoFee) - - ExtroFee.Div(b60, big.NewInt(16)) - //fmt.Println("ExtroFee:", ExtroFee) - - Period1Reward.Mul(b80, big.NewInt(1024)) - //fmt.Println("Period1Reward:", Period1Reward) - - Period2Reward.Mul(b80, big.NewInt(512)) - //fmt.Println("Period2Reward:", Period2Reward) - - Period3Reward.Mul(b80, big.NewInt(256)) - //fmt.Println("Period3Reward:", Period3Reward) - - Period4Reward.Mul(b80, big.NewInt(128)) - //fmt.Println("Period4Reward:", Period4Reward) -} |