Coder Social home page Coder Social logo

fabric-aries's Introduction

Fabric Aries

This is a design docs for integrating aries with hyperledger fabric blockchain. Doc will be almost common for other general purpose blockchain (like ethereum, solana, hedera hashgraph) which supports smart contracts.

Flow

Chaincode request flow

Aries Agent Authentication

authentication for aries agent making request to ledger.

  • Aries agent sends SignedLedgerRequest to Ledger (chaincode)
export interface SignedLedgerRequest {
    reqId: number;
    identifier: string; // did of transaction caller
    operation:  {[key: string] : any};
    protocolVersion: number;
    signature: string; // signature of caller with it's private key corresponding to verkey of did caller.
}
  • Chaincode authenticates caller by verifying signature, flow of signature verification should be:
    • get did from worldstate : getDID(request.identifier)
    • convert verkey to public key pub = ed25519.PublicKey(base58.Decode(did.verkey))
    • decode signature from base58 sign = base58.Decode(request.signature)
    • serialize message serialized_message = serialize(request)
    • verify signature valid = ed25519.Verify(pub, serialized_message, sign)

Chaincode initialization

Chaincode should be initialize with list of TRUSTEE :

[
   {
    "alias" : "",
    "dest" : "",
    "verkey" : "",
   } 
]

Registered TRUSTEE make nymTransaction

  • Fabric Client Authentication
  • Aries Agent Authentication
  • Create new NYM if not existing

Create Schema

  • Fabric Client Authentication
  • Aries Agent Authentication, role >= ENDORSER
  • Create new NYM if not existing
  • ID = ${identifier}:2:${schema.name}:${schema.version}

Create Credential Definition

  • Fabric Client Authentication
  • Aries Agent Authentication, role >= ENDORSER
  • Create new NYM if not existing
  • ID = ${identifier}:3:${credDef.signature_type}:${hash64(schemaID)}:${credDef.tag}

Chaincode response

Success

{
    "op" : "READ" || "WRITE",
    "type" : "1" || "101" || "102", // transaction type
    "identifier" : "7jUk7gMNzBXgZvVGPdDVnx", // did of caller
    "data" : {
        // op and type specific data
    }
}

Error

{
    "op" : "READ" || "WRITE",
    "type" : "1" || "101" || "102", // transaction type
    "identifier" : "7jUk7gMNzBXgZvVGPdDVnx", // did of caller
    "reason" : "error message"  
}

fabric-aries's People

Contributors

zzocker avatar daevmithran avatar

Stargazers

Dan Capri avatar Sai Ranjit Tummalapalli avatar XETA avatar Satoshi Ito avatar Mohammed A.Baqi avatar  avatar Víctor Martínez Jurado avatar Ryan Koch avatar Timo Glastra avatar

Watchers

Chinmay Jain avatar Adarsh Srivastava avatar

fabric-aries's Issues

Error while installing yarn

yarn install v1.22.19
warning ../../../../package.json: No license field
info No lockfile found.
[1/4] Resolving packages...
warning @aries-framework/node > indy-sdk > node-gyp > make-fetch-happen > cacache > @npmcli/[email protected]: This functionality has been moved to @npmcli/fs
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning " > [email protected]" has unmet peer dependency "@types/node@".
[4/4] Building fresh packages...
[-/5] ⡀ waiting...
[2/5] ⡀ pkcs11js
[-/5] ⡀ waiting...
[4/5] ⡀ indy-sdk
error /home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/indy-sdk: Command failed.
Exit code: 1
Command: node-gyp rebuild
Arguments:
Directory: /home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/indy-sdk
Output:
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | linux | x64
gyp info find Python using Python version 3.10.12 found at "/usr/bin/python3"
gyp info spawn /usr/bin/python3
gyp info spawn args [
gyp info spawn args '/home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args 'binding.gyp',
gyp info spawn args '-f',
gyp info spawn args 'make',
gyp info spawn args '-I',
gyp info spawn args '/home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/indy-sdk/build/config.gypi',
gyp info spawn args '-I',
gyp info spawn args '/home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/node-gyp/addon.gypi',
gyp info spawn args '-I',
gyp info spawn args '/home/irfan/.cache/node-gyp/18.17.1/include/node/common.gypi',
gyp info spawn args '-Dlibrary=shared_library',
gyp info spawn args '-Dvisibility=default',
gyp info spawn args '-Dnode_root_dir=/home/irfan/.cache/node-gyp/18.17.1',
gyp info spawn args '-Dnode_gyp_dir=/home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/node-gyp',
gyp info spawn args '-Dnode_lib_file=/home/irfan/.cache/node-gyp/18.17.1/<(target_arch)/node.lib',
gyp info spawn args '-Dmodule_root_dir=/home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/indy-sdk',
gyp info spawn args '-Dnode_engine=v8',
gyp info spawn args '--depth=.',
gyp info spawn args '--no-parallel',
gyp info spawn args '--generator-output',
gyp info spawn args 'build',
gyp info spawn args '-Goutput_dir=.'
gyp info spawn args ]
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/indy-sdk/build'
CXX(target) Release/obj.target/indynodejs/src/indy.o
../src/indy.cc: In static member function ‘static void IndyCallback::onMainLoopReentry(uv_async_t
)’:
../src/indy.cc:236:33: warning: ignoring return value of ‘v8::Maybe v8::Object::Set(v8::Localv8::Context, uint32_t, v8::Localv8::Value)’, declared with attribute ‘warn_unused_result’ [-Wunused-result]
236 | (void)tuple->Set(context, 0, Nan::Newv8::Number(icb->handle0));
| ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/irfan/.cache/node-gyp/18.17.1/include/node/v8-array-buffer.h:13,
from /home/irfan/.cache/node-gyp/18.17.1/include/node/v8.h:24,
from /home/irfan/.cache/node-gyp/18.17.1/include/node/node.h:73,
from ../../nan/nan.h:60,
from ../src/indy.cc:4:
/home/irfan/.cache/node-gyp/18.17.1/include/node/v8-object.h:247:37: note: declared here
247 | V8_WARN_UNUSED_RESULT Maybe Set(Local context, uint32_t index,
| ^~~
../src/indy.cc:237:33: warning: ignoring return value of ‘v8::Maybe v8::Object::Set(v8::Localv8::Context, uint32_t, v8::Localv8::Value)’, declared with attribute ‘warn_unused_result’ [-Wunused-result]
237 | (void)tuple->Set(context, 1, Nan::Newv8::Number(icb->u32int0));
| ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/irfan/.cache/node-gyp/18.17.1/include/node/v8-array-buffer.h:13,
from /home/irfan/.cache/node-gyp/18.17.1/include/node/v8.h:24,
from /home/irfan/.cache/node-gyp/18.17.1/include/node/node.h:73,
from ../../nan/nan.h:60,
from ../src/indy.cc:4:
/home/irfan/.cache/node-gyp/18.17.1/include/node/v8-object.h:247:37: note: declared here
247 | V8_WARN_UNUSED_RESULT Maybe Set(Local context, uint32_t index,
| ^~~
../src/indy.cc:245:33: warning: ignoring return value of ‘v8::Maybe v8::Object::Set(v8::Localv8::Context, uint32_t, v8::Localv8::Value)’, declared with attribute ‘warn_unused_result’ [-Wunused-result]
2
11 | size_t len = strlen(original);
| ~~~~~~^~~~~~~~~~
SOLINK_MODULE(target) Release/obj.target/indynodejs.node
/usr/bin/ld: cannot find -lindy: No such file or directory
collect2: error: ld returned 1 exit status
make: *** [indynodejs.target.mk:148: Release/obj.target/indynodejs.node] Error 1
make: Leaving directory '/home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/indy-sdk/build'
gyp ERR! build error
gyp ERR! stack Error: make failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack at ChildProcess.emit (node:events:514:28)
gyp ERR! stack at ChildProcess._handle.onexit (node:internal/child_process:291:12)
gyp ERR! System Linux 6.2.0-26-generic
gyp ERR! command "/home/irfan/.nvm/versions/node/v18.17.1/bin/node" "/home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/indy-sdk/node_modules/.bin/node-gyp" "rebuild"
gyp ERR! cwd /home/irfan/Desktop/fabric/fabric-aries/demo/node_modules/indy-sdk

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.