transact 0.4.5

Transact is a transaction execution platform designed to be used as a library or component when implementing distributed ledgers, including blockchains.
Documentation
// Copyright 2017 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// -----------------------------------------------------------------------------

syntax = "proto3";
option go_package = "smallbank_pb2";

message Account {
    // Customer ID
    uint32 customer_id = 1;

    // Customer Name
    string customer_name = 2;

    // Savings Balance (in cents to avoid float)
    uint32 savings_balance = 3;

    // Checking Balance (in cents to avoid float)
    uint32 checking_balance = 4;
}

message SmallbankTransactionPayload {
    message CreateAccountTransactionData {
        // The CreateAccountTransaction creates an account

        // Customer ID
        uint32 customer_id = 1;

        // Customer Name
        string customer_name = 2;

        // Initial Savings Balance (in cents to avoid float)
        uint32 initial_savings_balance = 3;

        // Initial Checking Balance (in cents to avoid float)
        uint32 initial_checking_balance = 4;
    }

    message DepositCheckingTransactionData {
        // The DepositCheckingTransction adds an amount to the customer's
        // checking account.

        // Customer ID
        uint32 customer_id = 1;

        // Amount
        uint32 amount = 2;
    }

    message WriteCheckTransactionData {
        // The WriteCheckTransaction removes an amount from the customer's
        // checking account.

        // Customer ID
        uint32 customer_id = 1;

        // Amount
        uint32 amount = 2;
    }

    message TransactSavingsTransactionData {
        // The TransactSavingsTransaction adds an amount to the customer's
        // savings account. Amount may be a negative number.

        // Customer ID
        uint32 customer_id = 1;

        // Amount
        int32 amount = 2;
    }

    message SendPaymentTransactionData {
        // The SendPaymentTransaction transfers an amount from one customer's
        // checking account to another customer's checking account.

        // Source Customer ID
        uint32 source_customer_id = 1;

        // Destination Customer ID
        uint32 dest_customer_id = 2;

        // Amount
        uint32 amount = 3;
    }

    message AmalgamateTransactionData {
        // The AmalgamateTransaction transfers the entire contents of one
        // customer's savings account into another customer's checking
        // account.

        // Source Customer ID
        uint32 source_customer_id = 1;

        // Destination Customer ID
        uint32 dest_customer_id = 2;
    }

    enum PayloadType {
        PAYLOAD_TYPE_UNSET = 0;
        CREATE_ACCOUNT = 1;
        DEPOSIT_CHECKING = 2;
        WRITE_CHECK = 3;
        TRANSACT_SAVINGS = 4;
        SEND_PAYMENT = 5;
        AMALGAMATE = 6;
    }

    PayloadType payload_type = 1;
    CreateAccountTransactionData create_account = 2;
    DepositCheckingTransactionData deposit_checking = 3;
    WriteCheckTransactionData write_check = 4;
    TransactSavingsTransactionData transact_savings = 5;
    SendPaymentTransactionData send_payment = 6;
    AmalgamateTransactionData amalgamate = 7;
}