KeyChain is a standalone app for signing transactions and generating key pairs. It stores private keys in an isolated environment where no logger, debugger or spyware can intercept them because of the three-layer security protecting each action of the system. KeyChain supports transactions from and to various blockchains, including Ethereum and Bitcoin in the current release, but working on Ethereum classic, Litecoin, Bitcoin Cash, and Bitshares.
- Installation
- Getting started
- How to use
- Companies using KeyChain
- Contributing to the project
- Contact
- License
Download and install KeyChain for macOS. Windows and Linux installers are coming soon.
Try out KeyChain on the demo page.
After installation, connect to the demo-page: http://localhost:16384/ to check if the installation was successful and to test the KeyChain commands. In case everything went well, you will see the following page and you will be able to see responses to the commands in the response box when you click on them.
If you are having trouble connecting to the page, contact us and we will do our best to help you.
You can find a comprehensive installation guide for macOS.
After you have installed KeyChain, you can start using it with web3. Just follow these simple steps.
NB: If you launch KeyChain for the first time, you need to get a public key with the "select_key" command. You can save the public key to local storage. Then you will not need to use "select_key" command again.
- Install
keychain.js
library from this source.
npm install keychain.js
- Now use an overridden web3 function
const { Keychain, KeychainWeb3 } = require('keychain.js');
const Web3 = require('web3');
const web3 = new Web3('YOUR_API_URL'); // https://ropsten.infura.io/v3/046804e3dd3240b09834531326f310cf
const tx = {
to: '0xE8899BA12578d60e4D0683a596EDaCbC85eC18CC',
value: 100,
gas: 21000
};
const keychain = new Keychain();
const keychainWeb3 = new KeychainWeb3(keychain, web3);
keychain.selectKey()
.then(publicKey => keychainWeb3.signTransaction(tx, publicKey))
.then(result => web3.eth.sendSignedTransaction(result.rawTransaction));
signTransaction
with KeyChain in action
KeyChain and Swap.Online in action:
The main purpose of this repository is to continue to evolve KeyChain core, making it faster and easier to use. Development of KeyChain happens in the open on GitHub, and we are grateful to the community for contributing bugfixes and improvements.
KeyChain has adopted a Code of Conduct that we expect project participants to adhere to. Please read the full text so that you can understand what actions will and will not be accepted.
To contribute or report a bug, you can contact us or create an issue with a label "bug".
For extensive documentation on KeyChain, refer to the Wiki.
There you will find:
- Home: how to navigate in our Wiki.
- How to sign an Ethereum transaction: a simple and precise tutorial.
- An installation guide for macOS.
- KeyChain Protocol: full comprehensive descriptions of the KeyChain commands.
- KeyChain sample commands: shortcut to using the commands.
- Pipe API: integrating KeyChain through pipe.
- Restore your keys with master key
- Security: why KeyChain is highly secure.
- Troubleshooting: error handling, log files, debugging.
- Useful reference: external links.
- WebSocket API: integrating KeyChain through WebSocket.
If you need help interacting with KeyChain, please do not hesitate to contact us:
- Telegram
- Stackoverflow
- Or you can write us an email to support@array.io.
If you want to report a security issue, include the word "security" in the subject field.
We take security issues very seriously and we'll be looking forward to hearing from you. Still, we hope you enjoy using KeyChain and the integration goes smooth!
This project is licensed under the terms of the MIT license.