Coder Social home page Coder Social logo

corda-rpc's Introduction

corda-rpc: Rust libraries for doing Corda RPC

Build status Coverage status License: Apache 2.0

Because I no longer work at ING or on any Corda-related projects, this crate is unlikely to see further development unless funding appears -- I am available on a freelance basis. I'm happy to answer questions about the code and its current state, and I intend to provide (passive) maintenance (like PR code reviews) of this code going forward.

Corda is an open source blockchain platform. To work with a Corda node, your code needs to communicate over AMQP 1.0 with the broker run by the node. This project targets stable Rust and uses asynchronous network I/O built on Tokio. This might be useful for code running in constrained environments (IoT) or interfacing with other native code.

This project was written within ING Bank, while working on the ValueX project to create a digital securities distribution platform for institutional investors. The provided functionality is separated into three crates, as explained below.

The current state of the project can be described as pre-alpha. So far I have worked to get a simple RPC call to the Corda node to work, and everything provided is only complete insofar as needed for that purpose. The example code in network-map-snapshot will trigger an RPC call on the Corda node as desired and return the proper response. However, this only works against a Corda node which has some changes applied to it.

corda-rpc: abstractions specific to Corda RPC

Documentation Crates.io

While the Corda RPC protocol builds on top of the AMQP 1.0 standard, it defines its own encoding schema serialization to protocol to make protocol messages self-describing. This crate contains implementations of the required serialization and deserialization primitives, and will contain other code specific to Corda going forward. The ideal end goal would be an implementation matching Corda's CordaRPCOps interface.

oasis-amqp: generic implementation of the AMQP 1.0 protocol

Documentation Crates.io

The name "AMQP" is often used to refer to version 0.9.1 of the protocol, as implemented by RabbitMQ and many other software components. Despite the shared name, AMQP 1.0 as standardized by OASIS deviates substantially from the 0.9.1 protocol. This crate aims to provide a generally usable (not specific to Corda) implementation of a protocol client.

As mentioned above, the library currently falls short of that goal. While it provides a robust version of the parts of the protocol that are strictly needed to start exchanging messages with a broker, many parts are missing or incomplete. Nevertheless, the building blocks provided (in particular, the serialization and deserialization based on Rust's powerful serde framework) should in many cases make it straightforward to fill in the missing bits.

oasis-amqp-macros: helper macro(s)

Documentation Crates.io

The implementation of the oasis-amqp crate is supported by a single procedural macro which derives required implementations of serde::Deserialize and oasis_amqp::Described for any type definitions.

corda-rpc's People

Contributors

dependabot-preview[bot] avatar dependabot[bot] avatar djc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

kigawas icodein luos

corda-rpc's Issues

Element constructor for Array

The AMQP 1.0 protocol specifies that Array (array8, and array32) should have the element constructor followed by a sequence of encoded values. The serializer implementation appears to serialize every element with every element's constructor. My understanding is that this is not really following the AMQP 1.0 protocol, is that right?

Release 0.2.1

Just stumbled upon the serde bug. It took me quite some time to figure out, that it is already fixed in the repo (f52fe38) but not in the published version on crates.io.

It would be neat if you could push the current state as 0.2.1 to crates.io

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.