https://github.com/vaporyjs/vaporyjs-icap
Utilities for handling ICAP addresses
https://github.com/vaporyjs/vaporyjs-icap
decoding encoding iban icap vaporyjs
Last synced: 4 months ago
JSON representation
Utilities for handling ICAP addresses
- Host: GitHub
- URL: https://github.com/vaporyjs/vaporyjs-icap
- Owner: vaporyjs
- License: mit
- Created: 2018-03-04T04:42:54.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-01-11T05:04:59.000Z (over 2 years ago)
- Last Synced: 2025-01-14T11:58:10.087Z (5 months ago)
- Topics: decoding, encoding, iban, icap, vaporyjs
- Language: JavaScript
- Homepage: https://vapory.org
- Size: 194 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# vaporyjs-icap
[](https://www.npmjs.org/package/vaporyjs-icap)
[](https://travis-ci.org/vaporyjs/vaporyjs-icap)
[](https://coveralls.io/r/vaporyjs/vaporyjs-icap)
[](https://gitter.im/vapory/vaporyjs-lib) or #vaporyjs on freenodeUtilities for handling [ICAP](https://github.com/vaporyco/wiki/wiki/ICAP:-Inter-exchange-Client-Address-Protocol) addresses.
It works in Node.js as well as in the browser via `browserify`. When minified for a browser, it should be less than 4K in size.
## API
* `fromAddress(address, print, nonstd)` - try encoding an address into an IBAN
* `fromAsset(asset, print)` - try encoding an asset description into an IBAN
* `toAddress(iban)` - try decoding an IBAN into an address
* `toAsset(iban)` - try decoding an IBAN into an asset description
* `encode(address/asset)` - encode an address or asset description into an IBAN
* `decode(iban)` - decode an IBAN into an address or asset description
* `encodeBBAN(address/asset)` - encode an address or asset description into a BBAN
* `decodeBBAN(bban)` - decode a BBAN into an address or asset description
* `isICAP(iban)` - return true if input is a valid ICAP, otherwise false
* `isAddress(iban)` - return true if the input is a valid ICAP with an address, otherwise false
* `isAsset(iban)` - return true if the input is a valid ICAP with an asset description, otherwise falseAll of the above methods will throw exceptions on invalid inputs. The `to*` and `from*` method will also check for the expected inputs and outputs.
The `print` parameter above, when set to true, will create an IBAN in the *print format*, which is space delimited groups of four characters: `XE73 38O0 73KY GTWW ZN0F 2WZ0 R8PX 5ZPP ZS`
The `address` parameter only supports `0x` prefixed input and will include that in the output.
The `nonstd` parameter of `fromAddress`, when set to true, will turn on support for the *basic ICAP format* generating an invalid IBAN, but encoding the entire 160 bits of an Vapory address.
## Examples
```js
ICAP.fromAsset({
asset: 'VAP',
institution: 'XREG',
client: 'GAVOFYORK'
})
// returns 'XE81VAPXREGGAVOFYORK'ICAP.fromAddress('0x00c5496aee77c1ba1f0854206a26dda82a81d6d8')
// returns 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'ICAP.toAsset('XE81VAPXREGGAVOFYORK')
// returns {
// asset: 'VAP',
// institution: 'XREG',
// client: 'GAVOFYORK'
// }ICAP.toAddress('XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS')
// returns '0x00c5496aee77c1ba1f0854206a26dda82a81d6d8'
```## *Direct* address generation
A *direct address ICAP* is an address less than 155 bits of length and therefore it safely fits into the length restrictions of IBAN (and the checksum method used).
That upper limit is `0x03ffffffffffffffffffffffffffffffffffffff` or `XE91GTJRJEU5043IEF993XWE21DBF0BVGF`.The following simple bruteforce code can be used to generate such addresses:
```js
const vapUtil = require('vaporyjs-util')
function generateDirectAddress () {
while(true) {
var privateKey = crypto.randomBytes(32) // or your favourite other random method
if (vapUtil.privateToAddress(privateKey)[0] <= 3) {
return privateKey
}
}
}
```Alternatively [`vaporyjs-wallet`](http://npmjs.com/packages/vaporyjs-wallet) can be used to generate compatible addresses.