diff --git a/client/cmd/transaction.go b/client/cmd/transaction.go index a527577481c7fec56dc87ac25383cbfef6b7f3f7..e020c0ac12cbee9d99d63c7e314b295fe91c2980 100644 --- a/client/cmd/transaction.go +++ b/client/cmd/transaction.go @@ -23,6 +23,8 @@ import ( "github.com/eris-ltd/eris-db/client/methods" "github.com/eris-ltd/eris-db/util" + + "github.com/eris-ltd/eris-db/client/transaction" ) func buildTransactionCommand() *cobra.Command { diff --git a/client/transaction/transaction.go b/client/transaction/transaction.go new file mode 100644 index 0000000000000000000000000000000000000000..a004d5de327934dfa03eca93a9bcbcdf58c21c8a --- /dev/null +++ b/client/transaction/transaction.go @@ -0,0 +1,96 @@ +// Copyright 2015, 2016 Eris Industries (UK) Ltd. +// This file is part of Eris-RT + +// Eris-RT is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Eris-RT is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Eris-RT. If not, see <http://www.gnu.org/licenses/>. + +package transaction + +import ( + "fmt" + "os" + + "github.com/eris-ltd/eris-cli/log" + + "github.com/eris-ltd/eris-db/client" + "github.com/eris-ltd/eris-db/client/core" + "github.com/eris-ltd/eris-db/definitions" + "github.com/eris-ltd/eris-db/keys" +) + +func Send(do *definitions.ClientDo) { + // construct two clients to call out to keys server and + // blockchain node. + erisKeyClient := keys.NewErisKeyClient(do.SignAddrFlag) + erisNodeClient := client.NewErisNodeClient(do.NodeAddrFlag) + // form the send transaction + sendTransaction, err := core.Send(erisNodeClient, erisKeyClient, + do.PubkeyFlag, do.AddrFlag, do.ToFlag, do.AmtFlag, do.NonceFlag) + if err != nil { + log.Fatalf("Failed on forming Send Transaction: %s", err) + return + } + // TODO: [ben] we carry over the sign bool, but always set it to true, + // as we move away from and deprecate the api that allows sending unsigned + // transactions and relying on (our) receiving node to sign it. + unpackSignAndBroadcast( + core.SignAndBroadcast(do.ChainidFlag, erisNodeClient, + erisKeyClient, sendTransaction, true, do.BroadcastFlag, do.WaitFlag)) +} + +func Call(do *definitions.ClientDo) { + // construct two clients to call out to keys server and + // blockchain node. + erisKeyClient := keys.NewErisKeyClient(do.SignAddrFlag) + erisNodeClient := client.NewErisNodeClient(do.NodeAddrFlag) + // form the call transaction + callTransaction, err := core.Call(erisNodeClient, erisKeyClient, + do.PubkeyFlag, do.AddrFlag, do.ToFlag, do.AmtFlag, do.NonceFlag, + do.GasFlag, do.FeeFlag, do.DataFlag) + if err != nil { + log.Fatalf("Failed on forming Call Transaction: %s", err) + return + } + // TODO: [ben] we carry over the sign bool, but always set it to true, + // as we move away from and deprecate the api that allows sending unsigned + // transactions and relying on (our) receiving node to sign it. + unpackSignAndBroadcast( + core.SignAndBroadcast(do.ChainidFlag, erisNodeClient, + erisKeyClient, callTransaction, true, do.BroadcastFlag, do.WaitFlag)) +} + +//---------------------------------------------------------------------- +// Helper functions + +func unpackSignAndBroadcast(result *core.TxResult, err error) { + if err != nil { + log.Fatalf("Failed on signing (and broadcasting) transaction: %s", err) + os.Exit(1) + } + if result == nil { + // if we don't provide --sign or --broadcast + return + } + printResult := log.Fields{ + "transaction hash": fmt.Sprintf("%X", result.Hash), + } + if result.Address != nil { + printResult["Contract Address"] = fmt.Sprintf("%X", result.Address) + } + if result.Return != nil { + printResult["Block Hash"] = fmt.Sprintf("%X", result.BlockHash) + printResult["Return Value"] = fmt.Sprintf("%X", result.Return) + printResult["Exception"] = fmt.Sprintf("%s", result.Exception) + } + log.WithFields(printResult).Warn("Result") +} diff --git a/manager/eris-mint/eris-mint.go b/manager/eris-mint/eris-mint.go index 6a79b82eacdaaa0c628c3ab2598c08155f2b2533..90f9af757bd1548845b1e304e7953a12289f6948 100644 --- a/manager/eris-mint/eris-mint.go +++ b/manager/eris-mint/eris-mint.go @@ -27,6 +27,7 @@ import ( "github.com/eris-ltd/eris-db/logging" "github.com/eris-ltd/eris-db/logging/loggers" + sm "github.com/eris-ltd/eris-db/manager/eris-mint/state" manager_types "github.com/eris-ltd/eris-db/manager/types" "github.com/eris-ltd/eris-db/txs" diff --git a/manager/eris-mint/pipe.go b/manager/eris-mint/pipe.go index be62592e8af54d258cdb65f5d6222ba372d3c0e3..014de66207a1c2b0f27de336016d15291f9c8de6 100644 --- a/manager/eris-mint/pipe.go +++ b/manager/eris-mint/pipe.go @@ -36,11 +36,11 @@ import ( core_types "github.com/eris-ltd/eris-db/core/types" "github.com/eris-ltd/eris-db/definitions" edb_event "github.com/eris-ltd/eris-db/event" + genesis "github.com/eris-ltd/eris-db/genesis" "github.com/eris-ltd/eris-db/logging" "github.com/eris-ltd/eris-db/logging/loggers" vm "github.com/eris-ltd/eris-db/manager/eris-mint/evm" "github.com/eris-ltd/eris-db/manager/eris-mint/state" - genesis "github.com/eris-ltd/eris-db/genesis" manager_types "github.com/eris-ltd/eris-db/manager/types" rpc_tm_types "github.com/eris-ltd/eris-db/rpc/tendermint/core/types" "github.com/eris-ltd/eris-db/txs"