edichain
v0.0.21
Published
Provides a basic integration for ipfs (storage/distribution) and ethereum blockchain (validation/authorization) based EDIfact message exchange.
Downloads
61
Maintainers
Readme
EDIchain
Provides a basic integration for ipfs (storage/distribution) and ethereum blockchain (validation/authorization) based EDI message exchange. All messages are transactions represented within the blockchain. Message data is always encrypted an is not part of the blockchain transaction. Instead a hash of the encrypted content is published into the blockchain. Message data/content is distributed via ipfs.
- Encrypted P2P Data exchange that require transaction proof (consens of transactions)
- High-End scalability due to P2P architecture for content distribution
- Easy integration into existing backend systems (like EDIFact)
- Try to do a kind of Plug and Play ... (Auto-Register, Auto-Config...)
Demo
There is a cloud demo available at http://139.59.212.222:8088/ - However this is an unprotected environment to quickly see what this package/module is about.
Installation
npm install edichain --save
cd node_modules/edichain
npm start
Requirement
Requires ipfs daemon to be started.
ipfs daemon
Requires geth to be started and synced blockchain.
geth --rpc --unlock "0x12345678..." --rpcapi "eth,net,web3,personal" --rpcaddr "localhost" --rpcport "8545" console
Usage
As module
Basic
var cb = function() {
// YOUR Code to interact
}
var config = {
bootstrap_callback:cb
}
var echain = new edichain.bootstrap(config);
As JSON-RPC2 service
Namespace: edichain
Exposed Methods
Configuration Options
Known Limitations
- Runtime should not exceed 1 day as geth account unlock is limited to 86400 seconds
- Account create is not implemented. You might use MIST to create your Ethereum account
Examples
Sending Data to (registered) Ethereum Account
edichain.sendData("0x9707F3C9ca3C554A6E6d31B71A3C03d7017063F4","Some Data you like to send to me :)");
What happens in the background:
- Check if recipient "0x97..." is registered
- Fetch public key of recipient via ipfs using hash provided by registrar contract in blockchain
- Encrypt Data and store it as ipfs object
- Send message with hash to stored object to recipient (using registrar)
Checking and updating inbox
edichain.updateInbox(); // Checks Blockchain for updates
// edichain.messages[] holds all messages received (inc. data)
// Sample on how to use messages array
setInterval(function() {
var old_inbox_length=0;
if(edichain.messages.length!=old_inbox_length) {
var isEncrypted=true;
for(var i=edichain.messages.length-1;i>old_inbox_length-1;i--) {
if(!edichain.messages[i].data) isEncrypted=false; else {
console.log(edichain.messages[i]);
}
}
if(isEncrypted) old_inbox_length=edichain.messages.length;
}
},1000);
How messages get processed:
- Check with registrar for new messages
- Retrieve address of message contract
- Retrieve hash with data using IPFS
- Decrypt message and validate sender
- Update Messages array
Transaction Log
In EDI it is all about securing transactions. In this aspect all operations this script does are visible within the blockchain.
edichain.txlog.stream({ start: -1 }).on('log', function(log) {
console.log(log);
});
Internally this script is using winston as logger and creates a tx.log file containing all transactions for auditing.
Contributing
- https://gitter.im/zoernert/edichain
- https://blog.stromhaltig.de/
Release History
- 0.0.21 Added Transaction View
- 0.0.11 Added JSON-RPC2 Interface as sample implementation
- 0.0.10 Maintainance Release (Fix Issue #2)
- 0.0.9 Encapsulated IPFS cloud WORM in order to allow providers as alternative
- 0.0.5 Updated Logger, several fixes in message handling
- 0.0.1 Initial release