Infinitechain Client
Structure
IFCBuilder
IFC
- client
- makeRawPayment
- audit
- takeObjection
- verifyPayment
- saveRawPayment
- getRawPayment
- savePayment
- getPayment
- export
- crypto
- getOrNewKeyPair
- importSignerKey
- importCipherKey
- encrypt
- decrypt
- sign
- verify
- getSignerAddress
- keyInfo
- sidechain
- getIFCContract
- getStage
- getStageRootHash
- getLatestStageHeight
- getSlice
- event
- watchAddStage
- watchObjection
- watchExonerate
- watchFinalize
Example
1. Use IFCBuilder to create an ifc object
ifc = new IFCBuilder()
.setNodeUrl("http://0.0.0.0:3000")
.setWeb3Url("http://0.0.0.0:8545")
.setStorageType('chrome-extension')
.setClientAddress('0x49aabbbe9141fe7a80804bdf01473e250a3414cb')
.setServerAddress('0x5b9688b5719f608f1cb20fdc59626e717fbeaa9a')
.build()
crypto
to generate key pair and you can also import your private key.
2. Use ifc.crypto.getOrNewKeyPair()
ifc.crypto.keyInfo()
ifc.crypto.importSignerKey('YOUR_PRIVATE_KEY')
3. Make raw payment with specific format
When client wants to purchase a product, makeRawPayment()
should be called to produce a raw payment. After that, client can call saveRawPayment()
to save it and then send to server.
rawPayment = ifc.client.makeRawPayment(value, data)
ifc.client.saveRawPayment(rawPayment)
/*
rawPayment = {
from: '0x49aabbbe9141fe7a80804bdf01473e250a3414cb',
to: '0x5b9688b5719f608f1cb20fdc59626e717fbeaa9a',
value: 100,
localSequenceNumber: 99,
stageHeight: 3,
data: {
foo: 'bar',
pkClient: '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5SxAR4lIyHg3vF/DbWKq\nZfedueCC6TpSMmD3LMZ2vhvI8cO1ydmDRTngJlgiKCcQFGGRcDqI5vxBfE4vdCy/\nDFw1zTiT9pPLUWGZNT4YxlcdFUJ26b4YqRHUk8Tfg4YNSUTaNKaj2VKj3NyLrchN\neunMWeLj+QlfdjV5zUkOy9pbMj0co1gDAK85jnO8NJupycWyA/ezfpaoTfJj2Ijd\n2b0+nCWCdWw8oWBJH9uXhCetbTI2QjYYOXj77aICrr2OUH4OkiZMoiIXAIV0D+P9\nysa6hgFzv5xAlO39mOnnu4wRoYJIIaHZyvNMVkdt4ZavZPuTuAQIPODy8/n19QWq\nRQIDAQAB\n-----END PUBLIC KEY-----',
pkStakeholder: '-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiQgP8iTDok0b1JSIPmbE\nzCKSphTfHm57Mu3LIgz9PD3vfcVW43sqAMOkelRijqmUpNLW0OBYzNIgH7sIIrhG\n89zXxXG/s4ewrbcbJn8XhotFoJQFLzBFovgYv34v3ZYmlCZsApWAtXkxWveq54FJ\nsQFrUWA+J/FNkp4uqu2Ekenn8OnuYYn25LdZPiUugOPMrALk4hS6nDSBmfVSPPka\nDilawdZwjkQGH9uu8pOFYG+oT1q9MYahrkmRzY05Q4zHOhB8HPzsbz0HpuwanXga\n/HqEmvBn0EJs+SrkZZmyZ6bjz1Izx8Io67HEje9JUeV6qDLE/ZQ/PXoRLnqg3Yqd\nIwIDAQAB\n-----END PUBLIC KEY-----'
}
}
*/
console.log(rawPayment);
4. Verify payment
After client receive a payment that included a server's signature, client should call verifyPayment()
to verify the integrity of payment. If it is valid, client could call savePayment()
to save it.
ifc.client.verifyPayment(payment)
ifc.client.savePayment(payment)
5. Audit payment
After client is notified by a AddNewStage event
, he can call audit()
to audit the payments that are related to the event.
ifc.client.audit(paymentHash)
6. Take objection
When a result of the distributed auditing is false, client can call takeObjection()
.
ifc.client.takeObjection(payment)