Skip to content
Snippets Groups Projects
Commit a3ae6633 authored by Benjamin Bollen's avatar Benjamin Bollen
Browse files

Start Application interface from TMSP provided template; this is a starting...

Start Application interface from TMSP provided template; this is a starting point; where E-DB can restructure this interface for a more capable pipe, while maintaining compativility with Tendermint-TMSP
parent 67cc052a
No related branches found
No related tags found
No related merge requests found
// 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 types
// TODO: Result is not yet defined (originally defined as tmsp protobuf type)
// NOTE: [ben] this interface is likely to be changed. Currently it is taken
// from the tendermint socket protocol application interface;
// but for the needs of eris-rt and generalisation improvements will be made.
// Application interface applies transactions to the state.
//
type Application interface {
// Info returns application information as a string
// NOTE: [ben] likely to move
Info() (info string)
// Set application option (e.g. mode=mempool, mode=consensus)
// NOTE: [ben] taken from tendermint, but it is unclear what the use is,
// specifically, when will tendermint call this over tmsp ?
SetOption(key string, value string) (log string)
// Append transaction applies a transaction to the state regardless of
// whether the transaction is valid or not.
// Currently AppendTx is taken from tmsp, and returns a result.
// This will be altered, as AppendTransaction needs to more strongly reflect
// the theoretical logic:
// Append(StateN, Transaction) = StateN+1
// here invalid transactions are allowed, but should act as the identity on
// the state:
// Append(StateN, InvalidTransaction) = StateN
// TODO: implementation notes:
// 1. at this point the transaction should already be strongly typed
// 2.
AppendTx(tx []byte) Result
// Check Transaction validates a transaction before being allowed into the
// consensus' engine memory pool. This is the original defintion and
// intention as taken from tmsp, but should be remapped to the more
// general concept of basic, cheap verification;
// Check Transaction does not alter the state, but does require an immutable
// copy of the state. In particular there is no consensus on ordering yet.
// TODO: implementation notes:
// 1. at this point the transaction should already be strongly typed
// 2.
CheckTx(tx []byte) Result
// Commit returns the root hash of the current application state
// NOTE: [ben] Because the concept of the block has been erased here
// the commit root hash is a fully implict stateful function;
// the opposit the principle of explicit stateless functions.
// This will be amended when we introduce the concept of (streaming)
// blocks in the pipe.
Commit() Result
// Query for state. This query request is not passed over the p2p network
// and is called from Tendermint rpc directly up to the application.
// NOTE: [ben] Eris-DB will give preference to queries from the local client
// directly over the Eris-DB rpc.
// We will support this for Tendermint compatibility.
Query(query []byte) Result
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment