-
Notifications
You must be signed in to change notification settings - Fork 285
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(validator): indy validator and indy-testnet files
Signed-off-by: Izuru Sato <sato.izuru@fujitsu.com>
- Loading branch information
Showing
18 changed files
with
525 additions
and
58 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
# Starting Indy Valdiator | ||
|
||
## Starting | ||
|
||
### Build and run containers | ||
|
||
go to cactus/tools/docker/indy-testnet and | ||
|
||
``` | ||
$ cd cactus/tools/docker/indy-testnet | ||
$ docker-compose -f ./under-construction-docker-compose.yaml up | ||
Starting nginx ... done | ||
Starting validator ... done | ||
Starting indy_pool ... done | ||
``` | ||
|
||
Type Ctrl + C to stop these containers. | ||
|
||
### Verify that containers are actually up | ||
|
||
Type following in the host environemnt: | ||
|
||
``` | ||
$ docker ps | grep -e indy_pool -e nginx -e valipy | ||
``` | ||
Three containers `indy_pool`, `nginx` and `valipy` must be printed. | ||
|
||
### Start Indy validator server | ||
|
||
Run following commands (from host environment) to log into validator container: | ||
|
||
``` | ||
$ sudo docker exec -it validator /bin/bash | ||
``` | ||
and run the server using these commands: | ||
|
||
``` | ||
$ cd /root/validator | ||
$ pip install pyyaml | ||
$ TEST_POOL_IP=172.16.0.2 python -m main | ||
``` | ||
|
2 changes: 2 additions & 0 deletions
2
packages-python/cactus_validator_socketio/etc/cactus/node-settings.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
port: 8000 | ||
logging_dir: "" |
3 changes: 3 additions & 0 deletions
3
packages-python/cactus_validator_socketio/etc/cactus/node-validator-registry.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
proto: "" | ||
url: "" | ||
publickey: "" |
2 changes: 2 additions & 0 deletions
2
packages-python/cactus_validator_socketio/etc/cactus/validator-001-secrets.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
sign_key: "" | ||
auth_credential: "" |
1 change: 1 addition & 0 deletions
1
packages-python/cactus_validator_socketio/etc/cactus/validator-001-settings.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
port: 8000 |
8 changes: 8 additions & 0 deletions
8
packages-python/cactus_validator_socketio/testcli/package.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
{ | ||
"name": "testcli", | ||
"version": "0.0.0", | ||
"private": true, | ||
"dependencies": { | ||
"socket.io-client": "^4.1.2" | ||
} | ||
} |
54 changes: 54 additions & 0 deletions
54
packages-python/cactus_validator_socketio/testcli/testsock.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// NOTE: Run pip install socket.io-client. | ||
const io = require('socket.io-client'); | ||
const url = "http://localhost:8000"; | ||
const socket = io(url, { | ||
//transports: [ 'websocket', 'polling'] | ||
}); | ||
|
||
socket.on('connect', () => { | ||
console.log('connect'); | ||
console.log(socket.id); | ||
const transport = socket.io.engine.transport.name; | ||
console.log(transport); | ||
//socket.emit('mymessage', 'hoge'); | ||
}); | ||
|
||
socket.on('mymessage', () => { | ||
console.log('received mymessage'); | ||
}); | ||
|
||
socket.on('response', (respData) => { | ||
console.log('received response from Validator'); | ||
// console.log(`##response : ${JSON.stringify(respData)}`); | ||
const respObj = JSON.parse(respData); | ||
console.log(`response(Obj) is ${JSON.stringify(respObj)}`); | ||
}); | ||
|
||
// socket.emit('nop'); | ||
socket.emit('startMonitor'); | ||
|
||
socket.emit('test-event'); | ||
|
||
setTimeout(() => { | ||
console.log('call request2!'); | ||
|
||
args_schema = "{\"reqId\":1624420883330729255,\"identifier\":\"8TAyhNonMhWGNRiRHRhs5C\",\"operation\":{\"type\":\"107\",\"dest\":\"HxuDdJmNSxboTCwLf8FN1j\",\"data\":{\"name\":\"Job-Certificate\",\"version\":\"0.2\"}},\"protocolVersion\":2}"; | ||
args_credential_definition = "{\"reqId\":1624437652192258330,\"identifier\":\"JbYRZdQeSkjxYKW61NReHN\",\"operation\":{\"type\":\"108\",\"ref\":14,\"signature_type\":\"CL\",\"origin\":\"DnZczRFF5iyiYgLMeFdHpk\",\"tag\":\"TAG1\"},\"protocolVersion\":2}"; | ||
|
||
// Call Validator | ||
const requestData = { | ||
contract: {"channelName": "mychannel", "contractName": "indysomething"}, | ||
method: {type: "evaluateTransaction", command: "indy_ledger_submit_request"}, | ||
args: args_credential_definition, | ||
reqId: "reqID_test" | ||
}; | ||
|
||
socket.emit('request2', requestData); | ||
|
||
}, 2000); | ||
|
||
|
||
setTimeout(() => { | ||
console.log('call nop!'); | ||
socket.emit('nop'); | ||
}, 2000); |
2 changes: 2 additions & 0 deletions
2
packages-python/cactus_validator_socketio/validator-python/.gitignore
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
__pycache__ | ||
*.log |
6 changes: 6 additions & 0 deletions
6
packages-python/cactus_validator_socketio/validator-python/main.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
from validator_socketio_module.SocketIoValidator import SocketIoValidator | ||
|
||
if __name__ == '__main__': | ||
validator = SocketIoValidator() | ||
validator.init_indy() | ||
validator.run() |
46 changes: 46 additions & 0 deletions
46
...cactus_validator_socketio/validator-python/validator_socketio_module/AbstractConnector.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
from abc import ABCMeta, abstractmethod | ||
|
||
class AbstractConnector: | ||
@abstractmethod | ||
def __init__(self): | ||
pass | ||
|
||
@abstractmethod | ||
def getValidatorInformation(self, validatorURL): | ||
"""Get the validator information including version, name, ID, and other information""" | ||
pass | ||
|
||
@abstractmethod | ||
def sendSignedTransaction(self, signedTransaction): | ||
"""Request a verifier to execute a ledger operation""" | ||
pass | ||
|
||
@abstractmethod | ||
def getBalance(self, address): | ||
"""Get balance of an account for native token on a leder""" | ||
pass | ||
|
||
@abstractmethod | ||
def execSyncFunction(self, address, funcName, args): | ||
"""Execute a synchronous function held by a smart contract""" | ||
pass | ||
|
||
@abstractmethod | ||
def startMonitor(self, clientId, cb): | ||
"""Request a validator to start monitoring ledger""" | ||
pass | ||
|
||
@abstractmethod | ||
def stopMonitor(self, clientId): | ||
"""Request a validator to stop monitoring ledger""" | ||
pass | ||
|
||
@abstractmethod | ||
def cb(self, callbackData): | ||
"""Callback function to call when receiving data from Ledger""" | ||
pass | ||
|
||
@abstractmethod | ||
def nop(self): | ||
"""Nop function for testing""" | ||
pass |
81 changes: 81 additions & 0 deletions
81
...hon/cactus_validator_socketio/validator-python/validator_socketio_module/IndyConnector.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
from abc import ABCMeta, abstractmethod | ||
|
||
import json | ||
import time | ||
from indy import ledger | ||
import asyncio | ||
|
||
from .AbstractConnector import AbstractConnector | ||
|
||
class IndyConnector(AbstractConnector): | ||
def __init__(self, socketio, sessionid, indy_dic): | ||
self.moduleName = "IndyConnector" | ||
self.indy_dic = indy_dic | ||
print(f"##{self.moduleName}.__init__") | ||
|
||
def getValidatorInformation(self, validatorURL): | ||
"""Get the validator information including version, name, ID, and other information""" | ||
print(f"##{self.moduleName}.getValidatorInformation()") | ||
|
||
def sendSignedTransaction(self, signedTransaction): | ||
"""Request a verifier to execute a ledger operation""" | ||
print(f"##{self.moduleName}.sendSignedTransaction()") | ||
|
||
def getBalance(self, address): | ||
"""Get balance of an account for native token on a leder""" | ||
print(f"##{self.moduleName}.getBalance()") | ||
|
||
def execSyncFunction(self, address, funcName, args): | ||
"""Execute a synchronous function held by a smart contract""" | ||
print(f"##{self.moduleName}.execSyncFunction()") | ||
|
||
command = args['method']['command'] | ||
if command== 'indy_ledger_submit_request': | ||
return self.load_schema_or_credential_definition(args['args']) | ||
|
||
print(f"##{self.moduleName} unknown command : {command}") | ||
return "unknown command." | ||
|
||
|
||
def load_schema_or_credential_definition(self, args): | ||
"""Execute a synchronous function held by a smart contract""" | ||
print(f"##{self.moduleName}.load_schema_or_credential_definition()") | ||
|
||
pool_handle = self.indy_dic['pool_handle'] | ||
responseStr = self.run_coroutine_ensure_previous_request_applied(pool_handle, args, lambda response: response['result']['data'] is not None) | ||
|
||
response = json.loads(responseStr) | ||
|
||
return response | ||
|
||
def startMonitor(self, clientId, cb): | ||
"""Request a validator to start monitoring ledger""" | ||
print(f"##{self.moduleName}.startMonitor()") | ||
|
||
def stopMonitor(self, clientId): | ||
"""Request a validator to stop monitoring ledger""" | ||
print(f"##{self.moduleName}.stopMonitor()") | ||
|
||
def cb(self, callbackData): | ||
"""Callback function to call when receiving data from Ledger""" | ||
print(f"##{self.moduleName}.cb()") | ||
|
||
def nop(self): | ||
"""Nop function for testing""" | ||
print(f"##{self.moduleName}.nop()") | ||
|
||
async def ensure_previous_request_applied(self, pool_handle, checker_request, checker): | ||
for _ in range(3): | ||
response = json.loads(await ledger.submit_request(pool_handle, checker_request)) | ||
try: | ||
if checker(response): | ||
return json.dumps(response) | ||
except TypeError: | ||
pass | ||
time.sleep(5) | ||
|
||
def run_coroutine_ensure_previous_request_applied(self, pool_handle, checker_request, checker, loop=None): | ||
if loop is None: | ||
loop = asyncio.get_event_loop() | ||
results = loop.run_until_complete(self.ensure_previous_request_applied(pool_handle, checker_request, checker)) | ||
return results |
60 changes: 60 additions & 0 deletions
60
...s-python/cactus_validator_socketio/validator-python/validator_socketio_module/Settings.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
import dataclasses | ||
import yaml | ||
|
||
rootPath = "/" | ||
|
||
pathNodeSettings = rootPath + "etc/cactus/node-settings.yaml" | ||
pathNodeValidatorRegistry = rootPath + "etc/cactus/node-validator-registry.yaml" | ||
pathValidatorSettings = rootPath + "etc/cactus/validator-001-settings.yaml" | ||
pathValidatorSecrets = rootPath + "etc/cactus/validator-001-secrets.yaml" | ||
|
||
#dataclass for validator-<DLT id>-settings.yml | ||
#data members should be equal to yml | ||
@dataclasses.dataclass | ||
class NodeSettings: | ||
port: int | ||
logging_dir: str | ||
|
||
#dataclass for validator-<DLT id>-settings.yml | ||
#data members should be equal to yml | ||
@dataclasses.dataclass | ||
class NodeValidatorRegistry: | ||
proto: str | ||
url: str | ||
publickey: str | ||
|
||
#dataclass for validator-<DLT id>-settings.yml | ||
#data members should be equal to yml | ||
@dataclasses.dataclass | ||
class ValidatorSettings: | ||
port: int | ||
|
||
#dataclass for validator-<DLT id>-settings.yml | ||
#data members should be equal to yml | ||
@dataclasses.dataclass | ||
class ValidatorSecrets: | ||
sign_key: str | ||
auth_credential: str | ||
|
||
@dataclasses.dataclass | ||
class Settings: | ||
nodeSettings: NodeSettings = None | ||
nodeValidatorRegistry: NodeValidatorRegistry = None | ||
validatorSettings: ValidatorSettings = None | ||
validatorSecrets: ValidatorSecrets = None | ||
|
||
# this method is automatically implemented after generate object | ||
def __post_init__(self): | ||
|
||
self.validatorSettings = ValidatorSettings(**(self.loadYaml(pathNodeSettings))) | ||
self.validatorSettings = ValidatorSettings(**(self.loadYaml(pathNodeValidatorRegistry))) | ||
self.validatorSettings = ValidatorSettings(**(self.loadYaml(pathValidatorSettings))) | ||
self.validatorSettings = ValidatorSettings(**(self.loadYaml(pathValidatorSecrets))) | ||
|
||
|
||
def loadYaml(self, yamlFilePath): | ||
# load usersettings file | ||
with open(pathValidatorSettings) as yamlFile: | ||
yamlObj = yaml.safe_load(yamlFile) | ||
|
||
return yamlObj |
Oops, something went wrong.