aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Wilcke <obscuren@users.noreply.github.com>2014-09-11 18:28:05 +0800
committerJeffrey Wilcke <obscuren@users.noreply.github.com>2014-09-11 18:28:05 +0800
commit369e8c41509baef341e61e4c5243899d5ffba1fc (patch)
tree2a9a4245e586d28f61744172759a954b0e3b68ea
parent2f362509b813573f533a5be437c140355ddec7fc (diff)
parent8ac1b85a0b9dc9e25764aecfbb2571037965b450 (diff)
downloaddexon-369e8c41509baef341e61e4c5243899d5ffba1fc.tar
dexon-369e8c41509baef341e61e4c5243899d5ffba1fc.tar.gz
dexon-369e8c41509baef341e61e4c5243899d5ffba1fc.tar.bz2
dexon-369e8c41509baef341e61e4c5243899d5ffba1fc.tar.lz
dexon-369e8c41509baef341e61e4c5243899d5ffba1fc.tar.xz
dexon-369e8c41509baef341e61e4c5243899d5ffba1fc.tar.zst
dexon-369e8c41509baef341e61e4c5243899d5ffba1fc.zip
Merge pull request #49 from WeMeetAgain/develop
add pushtx to api
-rw-r--r--ethpipe/js_pipe.go6
-rw-r--r--ethpipe/pipe.go9
-rw-r--r--ethrpc/packages.go21
3 files changed, 36 insertions, 0 deletions
diff --git a/ethpipe/js_pipe.go b/ethpipe/js_pipe.go
index eeece5179..47cac2ca2 100644
--- a/ethpipe/js_pipe.go
+++ b/ethpipe/js_pipe.go
@@ -225,6 +225,12 @@ func (self *JSPipe) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr
return NewJSReciept(contractCreation, tx.CreationAddress(), tx.Hash(), keyPair.Address()), nil
}
+func (self *JSPipe) PushTx(txStr string) (*JSReceipt, error) {
+ tx := ethchain.NewTransactionFromBytes(ethutil.Hex2Bytes(txStr))
+ self.obj.TxPool().QueueTransaction(tx)
+ return NewJSReciept(tx.CreatesContract(), tx.CreationAddress(), tx.Hash(), tx.Sender()), nil
+}
+
func (self *JSPipe) CompileMutan(code string) string {
data, err := self.Pipe.CompileMutan(code)
if err != nil {
diff --git a/ethpipe/pipe.go b/ethpipe/pipe.go
index 800a71139..b7d3be041 100644
--- a/ethpipe/pipe.go
+++ b/ethpipe/pipe.go
@@ -149,6 +149,15 @@ func (self *Pipe) Transact(key *ethcrypto.KeyPair, rec []byte, value, gas, price
return tx.Hash(), nil
}
+func (self *Pipe) PushTx(tx *ethchain.Transaction) ([]byte, error) {
+ self.obj.TxPool().QueueTransaction(tx)
+ if tx.Recipient == nil {
+ logger.Infof("Contract addr %x", tx.CreationAddress())
+ return tx.CreationAddress(), nil
+ }
+ return tx.Hash(), nil
+}
+
func (self *Pipe) CompileMutan(code string) ([]byte, error) {
data, err := ethutil.Compile(code, false)
if err != nil {
diff --git a/ethrpc/packages.go b/ethrpc/packages.go
index f2e57fa49..087167a42 100644
--- a/ethrpc/packages.go
+++ b/ethrpc/packages.go
@@ -145,6 +145,27 @@ func (p *EthereumApi) Create(args *NewTxArgs, reply *string) error {
return nil
}
+type PushTxArgs struct {
+ Tx string
+}
+
+func (a *PushTxArgs) requirementsPushTx() error {
+ if a.Tx == "" {
+ return NewErrorResponse("PushTx requires a 'tx' as argument")
+ }
+ return nil
+}
+
+func (p *EthereumApi) PushTx(args *PushTxArgs, reply *string) error {
+ err := args.requirementsPushTx()
+ if err != nil {
+ return err
+ }
+ result, _ := p.pipe.PushTx(args.Tx)
+ *reply = NewSuccessRes(result)
+ return nil
+}
+
func (p *EthereumApi) GetKey(args interface{}, reply *string) error {
*reply = NewSuccessRes(p.pipe.Key())
return nil