Skip to content

Commit fb6c69c

Browse files
authored
Merge pull request openwallet-foundation#2022 from ianco/multi-issues-2
Multi-ledger/Multi-tenant issues
2 parents 75c057e + 724aceb commit fb6c69c

10 files changed

Lines changed: 67 additions & 13 deletions

File tree

aries_cloudagent/admin/server.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,7 @@ async def check_multitenant_authorization(request: web.Request, handler):
370370
and not is_server_path
371371
and not is_unprotected_path(path)
372372
and not base_limited_access_path
373+
and not (request.method == "OPTIONS") # CORS fix
373374
):
374375
raise web.HTTPUnauthorized()
375376

aries_cloudagent/config/argparse.py

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ def create_argument_parser(*, prog: str = None):
7474

7575

7676
def load_argument_groups(parser: ArgumentParser, *groups: Type[ArgumentGroup]):
77-
"""Log a set of argument groups into a parser.
77+
"""
78+
Log a set of argument groups into a parser.
7879
7980
Returns:
8081
A callable to convert loaded arguments into a settings dictionary
@@ -872,32 +873,56 @@ def get_settings(self, args: Namespace) -> dict:
872873
if args.no_ledger:
873874
settings["ledger.disabled"] = True
874875
else:
875-
configured = False
876+
single_configured = False
877+
multi_configured = False
878+
update_pool_name = False
876879
if args.genesis_url:
877880
settings["ledger.genesis_url"] = args.genesis_url
878-
configured = True
881+
single_configured = True
879882
elif args.genesis_file:
880883
settings["ledger.genesis_file"] = args.genesis_file
881-
configured = True
884+
single_configured = True
882885
elif args.genesis_transactions:
883886
settings["ledger.genesis_transactions"] = args.genesis_transactions
884-
configured = True
887+
single_configured = True
885888
if args.genesis_transactions_list:
886889
with open(args.genesis_transactions_list, "r") as stream:
887890
txn_config_list = yaml.safe_load(stream)
888891
ledger_config_list = []
889892
for txn_config in txn_config_list:
890893
ledger_config_list.append(txn_config)
894+
if "is_write" in txn_config and txn_config["is_write"]:
895+
if "genesis_url" in txn_config:
896+
settings["ledger.genesis_url"] = txn_config[
897+
"genesis_url"
898+
]
899+
elif "genesis_file" in txn_config:
900+
settings["ledger.genesis_file"] = txn_config[
901+
"genesis_file"
902+
]
903+
elif "genesis_transactions" in txn_config:
904+
settings["ledger.genesis_transactions"] = txn_config[
905+
"genesis_transactions"
906+
]
907+
else:
908+
raise ArgsParseError(
909+
"No genesis information provided for write ledger"
910+
)
911+
if "id" in txn_config:
912+
settings["ledger.pool_name"] = txn_config["id"]
913+
update_pool_name = True
891914
settings["ledger.ledger_config_list"] = ledger_config_list
892-
configured = True
893-
if not configured:
915+
multi_configured = True
916+
if not (single_configured or multi_configured):
894917
raise ArgsParseError(
895918
"One of --genesis-url --genesis-file, --genesis-transactions "
896919
"or --genesis-transactions-list must be specified (unless "
897920
"--no-ledger is specified to explicitly configure aca-py to"
898921
" run with no ledger)."
899922
)
900-
if args.ledger_pool_name:
923+
if single_configured and multi_configured:
924+
raise ArgsParseError("Cannot configure both single- and multi-ledger.")
925+
if args.ledger_pool_name and not update_pool_name:
901926
settings["ledger.pool_name"] = args.ledger_pool_name
902927
if args.ledger_keepalive:
903928
settings["ledger.keepalive"] = args.ledger_keepalive

aries_cloudagent/core/conductor.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
from ..config.wallet import wallet_config
2929
from ..core.profile import Profile
3030
from ..indy.verifier import IndyVerifier
31-
from ..ledger.base import BaseLedger
31+
3232
from ..ledger.error import LedgerConfigError, LedgerTransactionError
3333
from ..ledger.multiple_ledger.base_manager import (
3434
BaseMultipleLedgerManager,
@@ -144,7 +144,6 @@ async def setup(self):
144144
self.root_profile.BACKEND_NAME == "askar"
145145
and ledger.BACKEND_NAME == "indy-vdr"
146146
):
147-
context.injector.bind_instance(BaseLedger, ledger)
148147
context.injector.bind_provider(
149148
IndyVerifier,
150149
ClassProvider(
@@ -156,7 +155,6 @@ async def setup(self):
156155
self.root_profile.BACKEND_NAME == "indy"
157156
and ledger.BACKEND_NAME == "indy"
158157
):
159-
context.injector.bind_instance(BaseLedger, ledger)
160158
context.injector.bind_provider(
161159
IndyVerifier,
162160
ClassProvider(

demo/features/0586-sign-transaction.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Feature: RFC 0586 Aries sign (endorse) transactions functions
2525
| --mediation | --mediation | driverslicense |
2626
| --multitenant | --multitenant | driverslicense |
2727
| --mediation --multitenant | --mediation --multitenant | driverslicense |
28+
| --multitenant --multi-ledger | --multitenant --multi-ledger | driverslicense |
2829

2930

3031
@T001.1-RFC0586 @GHA

demo/features/taa-txn-author-acceptance.feature

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ Feature: TAA Transaction Author Agreement related tests
1717
| --taa-accept | driverslicense |
1818
| --taa-accept --multitenant | driverslicense |
1919
| --taa-accept --revocation | driverslicense |
20+
| --taa-accept --multi-ledger | driverslicense |
21+
| --taa-accept --multitenant --multi-ledger | driverslicense |
2022

2123
@T001a-TAA @taa_required
2224
Scenario Outline: accept the ledger TAA and write to the ledger via endorser

demo/multi_ledger_config.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
#- id: local
2+
# is_production: true
3+
# genesis_url: 'http://$LEDGER_HOST:9000/genesis'
14
- id: bcorvinTest
25
is_production: true
6+
is_write: true
37
genesis_url: 'http://test.bcovrin.vonx.io/genesis'
48
- id: greenlightTest
59
is_production: true

demo/multi_ledger_config_bdd.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
- id: local
2+
is_production: true
3+
is_write: true
4+
genesis_url: 'http://$LEDGER_HOST:9000/genesis'
5+
- id: bcorvinTest
6+
is_production: true
7+
# is_write: true
8+
genesis_url: 'http://test.bcovrin.vonx.io/genesis'
9+
- id: greenlightTest
10+
is_production: true
11+
genesis_url: 'http://dev.greenlight.bcovrin.vonx.io/genesis'

demo/runners/agent_container.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1274,9 +1274,11 @@ async def create_agent_with_args(args, ident: str = None):
12741274
)
12751275

12761276
multi_ledger_config_path = None
1277+
genesis = None
12771278
if "multi_ledger" in args and args.multi_ledger:
12781279
multi_ledger_config_path = "./demo/multi_ledger_config.yml"
1279-
genesis = await default_genesis_txns()
1280+
else:
1281+
genesis = await default_genesis_txns()
12801282
if not genesis and not multi_ledger_config_path:
12811283
print("Error retrieving ledger genesis transactions")
12821284
sys.exit(1)

demo/runners/support/agent.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ def __init__(
213213
self.agency_wallet_did = self.did
214214
self.agency_wallet_key = self.wallet_key
215215

216+
self.multi_write_ledger_url = None
216217
if self.genesis_txn_list:
217218
updated_config_list = []
218219
with open(self.genesis_txn_list, "r") as stream:
@@ -225,6 +226,10 @@ def __init__(
225226
"$LEDGER_HOST", str(self.external_host)
226227
)
227228
updated_config_list.append(config)
229+
if "is_write" in config and config["is_write"]:
230+
self.multi_write_ledger_url = config["genesis_url"].replace(
231+
"/genesis", ""
232+
)
228233
with open(self.genesis_txn_list, "w") as file:
229234
documents = yaml.dump(updated_config_list, file)
230235

@@ -479,7 +484,10 @@ async def register_did(
479484
# if registering a did for issuing indy credentials, publish the did on the ledger
480485
self.log(f"Registering {self.ident} ...")
481486
if not ledger_url:
482-
ledger_url = LEDGER_URL
487+
if self.multi_write_ledger_url:
488+
ledger_url = self.multi_write_ledger_url
489+
else:
490+
ledger_url = LEDGER_URL
483491
if not ledger_url:
484492
ledger_url = f"http://{self.external_host}:9000"
485493
data = {"alias": alias or self.ident}
@@ -501,6 +509,7 @@ async def register_did(
501509
await asyncio.sleep(3.0)
502510
nym_info = data
503511
else:
512+
log_msg("using ledger: " + ledger_url + "/register")
504513
resp = await self.client_session.post(
505514
ledger_url + "/register", json=data
506515
)

docker/Dockerfile.bdd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ FROM faber-alice-demo
44
RUN pip3 install --no-cache-dir -r demo/requirements.behave.txt
55

66
WORKDIR ./demo
7+
ADD demo/multi_ledger_config_bdd.yml ./demo/multi_ledger_config.yml
78
RUN chmod a+w .
89
ENTRYPOINT ["behave"]

0 commit comments

Comments
 (0)