diff --git a/node/cmd/guardiand/node.go b/node/cmd/guardiand/node.go index f826e2ddd3..03dab1cb35 100644 --- a/node/cmd/guardiand/node.go +++ b/node/cmd/guardiand/node.go @@ -73,8 +73,7 @@ var ( guardianKeyPath *string guardianSignerUri *string - tssSecretsPath *string - tssNetworkSocketPath *string + tssSecretsPath *string ethRPC *string ethContract *string @@ -326,7 +325,6 @@ func init() { fogoShimContract = NodeCmd.Flags().String("fogoShimContract", "", "Address of the Fogo shim program") tssSecretsPath = NodeCmd.Flags().String("tssSecret", "", "Path to guardian tss secrets (required)") - tssNetworkSocketPath = NodeCmd.Flags().String("tssNetworkPort", "[::]:8998", "Listen address for TSS server") ethRPC = node.RegisterFlagWithValidationOrFail(NodeCmd, "ethRPC", "Ethereum RPC URL", "ws://eth-devnet:8545", []string{"ws", "wss"}) ethContract = NodeCmd.Flags().String("ethContract", "", "Ethereum contract address") @@ -1919,7 +1917,7 @@ func runNode(cmd *cobra.Command, args []string) { node.GuardianOptionStatusServer(*statusAddr), node.GuardianOptionAlternatePublisher(guardianAddrAsBytes, *additionalPublishers), node.GuardianOptionProcessor(*p2pNetworkID), - node.GuardianOptionTSSNetwork(*tssNetworkSocketPath), + node.GuardianOptionTSSNetwork(), // Keep this last so that all of its dependencies are met. node.GuardianOptionP2P( diff --git a/node/go.mod b/node/go.mod index 9d750c9239..60345a15ce 100644 --- a/node/go.mod +++ b/node/go.mod @@ -61,7 +61,7 @@ require ( github.com/prometheus/common v0.60.0 github.com/wormhole-foundation/wormchain v0.0.0-00010101000000-000000000000 github.com/wormhole-foundation/wormhole/sdk v0.0.0-20220926172624-4b38dc650bb0 - github.com/xlabs/multi-party-sig v0.0.2-0.20251008145440-ef00c6484b73 + github.com/xlabs/multi-party-sig v0.0.2-0.20251027070734-8ce22a563161 github.com/xlabs/tss-common v0.0.0-20251006064114-b1fcd9c2ce8e golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e @@ -140,7 +140,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/flynn/noise v1.1.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect - github.com/fxamacker/cbor/v2 v2.8.0 // indirect + github.com/fxamacker/cbor/v2 v2.9.0 // indirect github.com/gagliardetto/binary v0.7.7 // indirect github.com/gagliardetto/treeout v0.1.4 // indirect github.com/go-kit/log v0.2.1 // indirect @@ -393,7 +393,7 @@ require ( github.com/gogo/status v1.1.1 github.com/test-go/testify v1.1.4 // github.com/xlabs/tss-lib/v2 v2.0.0-20241224083831-c218006b15e3 - github.com/xlabs/tss-lib/v2 v2.0.0-20251008162257-d741b8e3b429 + github.com/xlabs/tss-lib/v2 v2.0.0-20251027091210-d9dae503b078 ) replace github.com/agl/ed25519 => github.com/binance-chain/edwards25519 v0.0.0-20200305024217-f36fc4b53d43 // done in the TSS-LIB. diff --git a/node/go.sum b/node/go.sum index df59325aeb..d960a7406d 100644 --- a/node/go.sum +++ b/node/go.sum @@ -1265,8 +1265,8 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= -github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU= -github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= +github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= +github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gagliardetto/binary v0.7.7 h1:QZpT38+sgoPg+TIQjH94sLbl/vX+nlIRA37pEyOsjfY= @@ -3133,12 +3133,12 @@ github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlabs/multi-party-sig v0.0.2-0.20251008145440-ef00c6484b73 h1:MP649hemhNYpdOA/l6hXfqd8bwyBB8FPdZzCGlyo1SU= -github.com/xlabs/multi-party-sig v0.0.2-0.20251008145440-ef00c6484b73/go.mod h1:NpqmP2W7AAEany+2usJbi0eadzytXVSoucwK1SQ89cs= +github.com/xlabs/multi-party-sig v0.0.2-0.20251027070734-8ce22a563161 h1:tU9RVX6mgicH+GCpOZcuGzl5CBln3bTIcX8g6Uq/6Lg= +github.com/xlabs/multi-party-sig v0.0.2-0.20251027070734-8ce22a563161/go.mod h1:JbrlubmmY8N5VK/V2xJqriA27HEfi79JkPp1TO0dvWE= github.com/xlabs/tss-common v0.0.0-20251006064114-b1fcd9c2ce8e h1:5PRcFPXMXmvPL4IBEA+h7Evvd2HziSMdcFKuXtiqugg= github.com/xlabs/tss-common v0.0.0-20251006064114-b1fcd9c2ce8e/go.mod h1:EBXV5kup1GsnVpEknaxXXpid87uN6Mh7NboAZhV+HNM= -github.com/xlabs/tss-lib/v2 v2.0.0-20251008162257-d741b8e3b429 h1:zPlr1aiXP/dExYCLMasJy3IU+POVwOUQjQjMMXjN2uM= -github.com/xlabs/tss-lib/v2 v2.0.0-20251008162257-d741b8e3b429/go.mod h1:P6bh6juLJXH/zm/lVAeDiF1g6gbrtBGHreo5PFZdDZM= +github.com/xlabs/tss-lib/v2 v2.0.0-20251027091210-d9dae503b078 h1:nJ4xu5RrOH3nIHEwR8tzaTVRrfK/XYzMDEpYXVQBY0M= +github.com/xlabs/tss-lib/v2 v2.0.0-20251027091210-d9dae503b078/go.mod h1:umKmt3RQUcXDp2CDG/2BQyJZf4hViKquiV3DZFWJeyE= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= diff --git a/node/pkg/internal/testutils/testdata/tss5/guardian0.json b/node/pkg/internal/testutils/testdata/tss5/guardian0.json index c308b7654d..f77aada7e5 100644 --- a/node/pkg/internal/testutils/testdata/tss5/guardian0.json +++ b/node/pkg/internal/testutils/testdata/tss5/guardian0.json @@ -1,74 +1,75 @@ { "MaxSignerTTL": 300000000000, "ChainsWithNoSelfReport": null, - "LeaderIdentity": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFb0ZmcGFCUWVWZ3BxYndJZEprRGc1L04xUmVDdgprYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReThoM3RhVWZBdUZscUZpSTMxcXl2VEdBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "LeaderIdentity": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWpIYk5WMzBvWTYrUnhTdHZBRm0wVHc1UG85Rwp3cTMxSFVlWS9tT1k2NmZCUmNjQkxyenhIREJUdWd1bjRnMVZNMXJRdWxhdDZHbnFaZHkzL3JHR05BPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "EcdsaChains": null, "Self": { "Pid": { - "ID": "91ef42eedb957418fa793f0a20fe48fbf1115d66397c6eebef4c619b17c662de" + "ID": "2e21941491bd37edbd4c66a608fa5b8d039405170b2782a2a6c7d58df87103e6" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFcmN2S01GZ2duM3pLelFxTklNL1dtQmE4dWFFaAptYldjbStLWUhhN1hQSmRkM0RrdGwyVzN0RXZsbHh2MHBXSVFuM0ZFMmJxbWtOVUNkckVxMVhSNVZ3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVgyZ0F3SUJBZ0lSQU1uSDFSenlZd1R5L3g0TWNsR1RncDB3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJLM0x5akJZSUo5OHlzMEtqU0RQMXBnV3ZMbWhJWm0xbkp2aW1CMnUxenlYWGR3NUxaZGx0N1JMNVpjYjlLVmkKRUo5eFJObTZwcERWQW5heEt0VjBlVmVqZ2JFd2dhNHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCVEljOUU0aTJTRlRMZnEwbGxpaUhoc09kS3JnREJOQmdOVkhSRUVSakJFZ2pGMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV0Z6YVdFdE1ESXVaMk53TG5SbGMzUnVaWFF1ZUd4aFluTXVlSGw2Z2dsc2IyTmhiR2h2YzNTSApCSDhBQUFFd0NnWUlLb1pJemowRUF3SURTQUF3UlFJZ05DR09rRlI2WTRlR2NiNE1FcnRuMnVoc29CaXFSdko0CkRiaTBrNUVxbkI4Q0lRQ2NLOVUySHZwUG4vbFc5UDhLcHFpUjg2cW9oN3Z3MWZKc3EzUmIrNjVjUVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", - "CommunicationIndex": 3, + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWpIYk5WMzBvWTYrUnhTdHZBRm0wVHc1UG85Rwp3cTMxSFVlWS9tT1k2NmZCUmNjQkxyenhIREJUdWd1bjRnMVZNMXJRdWxhdDZHbnFaZHkzL3JHR05BPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZXZ0F3SUJBZ0lSQUlpa0g5MDRrcm5jaDJVUXlzYUNxd3d3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJPWXgyelZkOUtHT3ZrY1VyYndCWnRFOE9UNlBSc0t0OVIxSG1QNWptT3Vud1VYSEFTNjg4Und3VTdvTHArSU4KVlROYTBMcFdyZWhwNm1YY3QvNnhoalNqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCU0hlWnF2Nm9kclVMKzB4ZnNvL1pmM3owcXJpakFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05IQURCRUFpQmZiOTdrci8zUWhORklFLzB0Vzh6QgpGZVNCSklRS0JXajRJQjByN2ZGazZRSWdST3R2UU9GTEVzbEJ3Zk1GSmtEK1RNVWFJVzd4d2Jvci9ZQ2NnazUyCnF5WT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", + "CommunicationIndex": 0, "Hostname": "localhost", - "Port": 8800 + "Port": 8998 }, "IdentitiesKeep": { "Identities": [ { "Pid": { - "ID": "25d8a1908e659391e47177d68d7f8f807650b9cf4dc174f5d9bb07348e20c8bd" + "ID": "2e21941491bd37edbd4c66a608fa5b8d039405170b2782a2a6c7d58df87103e6" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFb0ZmcGFCUWVWZ3BxYndJZEprRGc1L04xUmVDdgprYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReThoM3RhVWZBdUZscUZpSTMxcXl2VEdBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxRENDQVh1Z0F3SUJBZ0lRUnRrMVFBOXdaUXl3WlNTaGRhZmswVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCm9GZnBhQlFlVmdwcWJ3SWRKa0RnNS9OMVJlQ3ZrYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReTgKaDN0YVVmQXVGbHFGaUkzMXF5dlRHS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZBL2lZTjh0MUlBS3hSRGN3WE5PaUU2ZTU1ZVNNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE4zTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUNid3I5eVRObTlTOHRYUlMwVnNvWGpyanljTXhCRUhzejYrCjlFOGV4SWI2QWlCK3NGbFc3Y05zUWVpcjVsMzc2bUtYU0R4RWNWRlJmNTBuYVB4TS9UY21YUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWpIYk5WMzBvWTYrUnhTdHZBRm0wVHc1UG85Rwp3cTMxSFVlWS9tT1k2NmZCUmNjQkxyenhIREJUdWd1bjRnMVZNMXJRdWxhdDZHbnFaZHkzL3JHR05BPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZXZ0F3SUJBZ0lSQUlpa0g5MDRrcm5jaDJVUXlzYUNxd3d3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJPWXgyelZkOUtHT3ZrY1VyYndCWnRFOE9UNlBSc0t0OVIxSG1QNWptT3Vud1VYSEFTNjg4Und3VTdvTHArSU4KVlROYTBMcFdyZWhwNm1YY3QvNnhoalNqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCU0hlWnF2Nm9kclVMKzB4ZnNvL1pmM3owcXJpakFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05IQURCRUFpQmZiOTdrci8zUWhORklFLzB0Vzh6QgpGZVNCSklRS0JXajRJQjByN2ZGazZRSWdST3R2UU9GTEVzbEJ3Zk1GSmtEK1RNVWFJVzd4d2Jvci9ZQ2NnazUyCnF5WT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 0, "Hostname": "localhost", - "Port": 8801 + "Port": 8998 }, { "Pid": { - "ID": "3d7def45331e096403a5ae0a896286cc677125cefcdd3480deb66c5f208306f2" + "ID": "808b0c83ac2b6d0a110576f50fe9499de64533d5c7fc18dd92b4e9047023b281" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaEFCbktobjBoVzRwSnpmVW5pdDVQUlhnWHhpSwpSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGNzbURER3pUNjVrOUdzUXcrb3RTdldBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRWnh6R3lNY2F3eUNyaUZ5R0htblJDREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmhBQm5LaG4waFc0cEp6ZlVuaXQ1UFJYZ1h4aUtSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGMKc21EREd6VDY1azlHc1F3K290U3ZXS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZNV3hmQ2xBOUFwUCtwb2ZVK1FBbUlLOFcxYytNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRaWFYzTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFENWhKbDU0QkJYRlp1NldKd0dFZi9Qd3czZXYvYTJoUFNYCngvN245MzVRUFFJZ05aV1dKQk9hQXJtU0xQbVdRNE1xQWRlbHo5ZEhtSjFWS3hxOWE5SFZFaGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTHY1NEwxeTkvYkJLMGRYT3V0KzQ0a0lTK1JUawpKS1kya3p0ekhZT3NvMHhjVW9SUTlaMG5lSHE5cnUzSFc2bVRJc0RiK3g3bnY3eDlCSWhEclVaU1R3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9OblVSTEQydmJVUXRSZzI5REs4cTh3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJDNytlQzljdmYyd1N0SFZ6cnJmdU9KQ0V2a1U1Q1NtTnBNN2N4MkRyS05NWEZLRVVQV2RKM2g2dmE3dHgxdXAKa3lMQTIvc2U1Nys4ZlFTSVE2MUdVaytqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXdubUlxUlV4YmV6aVBZMG1KWk00bTU3dmhjREFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQk56ZVBWSjBHU2ZXNjVjK011RDltaAphbWF6d01xL0Ezb3hQNHZWVDZ3alZnSWhBTG14SEY2OThDUEVPMnhXVE9aQWdOQ2NXSk9wbll2OWQ2enNDcndRCkV0STYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 1, "Hostname": "localhost", - "Port": 8804 + "Port": 9002 }, { "Pid": { - "ID": "5a9aa7cbc190be11a6afd8dc0b7000d43053c24b4181a2870191dd9b3206c1ec" + "ID": "a99e5d642516442e6727109ab19de012583d9d3f4ece1fd17e92cb0fc261a96a" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZklqTGpRMm0xaDIzS3pIT1ZZYmttR01NZW9yagpxVVpDWHBxcXNiMlFsQ0c5QkhJZnZlQzA3MjdhQzNPcllmT0I5cEZjRWJSMjVXY3dXNjhtK0dtNmlBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVh5Z0F3SUJBZ0lSQVBOUzYvdGNzdE9lZERlb2FpNWV0SDR3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJIeUl5NDBOcHRZZHR5c3h6bFdHNUpoakRIcUs0NmxHUWw2YXFyRzlrSlFodlFSeUg3M2d0Tzl1Mmd0enEySHoKZ2ZhUlhCRzBkdVZuTUZ1dkp2aHB1b2lqZ2JBd2dhMHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXRHaUlSQ212aFErdlZKOFNjUVlxM1FhSFp3akJNQmdOVkhSRUVSVEJEZ2pCMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV1YxWXkwd01pNW5ZM0F1ZEdWemRHNWxkQzU0YkdGaWN5NTRlWHFDQ1d4dlkyRnNhRzl6ZEljRQpmd0FBQVRBS0JnZ3Foa2pPUFFRREFnTkpBREJHQWlFQThCWjZ3UjB2K01UQUJDNXNDWk5oZGQzK3NuQmFMWUhqCjNVd3Q1eGZpK0h3Q0lRQ29qcnBSd0tEMXRIVXNCM3NLN3dpSjBjcGlEdVV2K0YvSHc1QWNFWml6OHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMTRveEJOVXVGSkhHMHlDWlJmeEN5UEtXNlVSUwoydlRma0ZsQVJmMGlxeEJ5UW5wMnRpNmNCWU5KZTJyTmhROVVyZ1N6bDc0L04rSFgrd2RoQUtFSWpRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9LQmp5TnNaSFV5SFRLYUJ3dXZoWHd3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJOZUtNUVRWTGhTUnh0TWdtVVg4UXNqeWx1bEVVdHIwMzVCWlFFWDlJcXNRY2tKNmRyWXVuQVdEU1h0cXpZVVAKVks0RXM1ZStQemZoMS9zSFlRQ2hDSTJqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUnpsMGhZc0NSaDArQXJUUDZkVHJXUktweWg1ekFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQkRzakd6bmZ6Z2E2YlVBa3NuS09YbwpMR1MzZzROLzd1bUZ0cW9EVHU4VUVBSWhBTWl0em43VmRISDBaL0NubnhGTmVPY21CYUFxNDB3cTg0SUpLRHVZClRIVW4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 2, "Hostname": "localhost", - "Port": 8803 + "Port": 9001 }, { "Pid": { - "ID": "91ef42eedb957418fa793f0a20fe48fbf1115d66397c6eebef4c619b17c662de" + "ID": "dea0617d250941658c3ec81c476cb91490980df3331c05cbb423db4325880c25" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFcmN2S01GZ2duM3pLelFxTklNL1dtQmE4dWFFaAptYldjbStLWUhhN1hQSmRkM0RrdGwyVzN0RXZsbHh2MHBXSVFuM0ZFMmJxbWtOVUNkckVxMVhSNVZ3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVgyZ0F3SUJBZ0lSQU1uSDFSenlZd1R5L3g0TWNsR1RncDB3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJLM0x5akJZSUo5OHlzMEtqU0RQMXBnV3ZMbWhJWm0xbkp2aW1CMnUxenlYWGR3NUxaZGx0N1JMNVpjYjlLVmkKRUo5eFJObTZwcERWQW5heEt0VjBlVmVqZ2JFd2dhNHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCVEljOUU0aTJTRlRMZnEwbGxpaUhoc09kS3JnREJOQmdOVkhSRUVSakJFZ2pGMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV0Z6YVdFdE1ESXVaMk53TG5SbGMzUnVaWFF1ZUd4aFluTXVlSGw2Z2dsc2IyTmhiR2h2YzNTSApCSDhBQUFFd0NnWUlLb1pJemowRUF3SURTQUF3UlFJZ05DR09rRlI2WTRlR2NiNE1FcnRuMnVoc29CaXFSdko0CkRiaTBrNUVxbkI4Q0lRQ2NLOVUySHZwUG4vbFc5UDhLcHFpUjg2cW9oN3Z3MWZKc3EzUmIrNjVjUVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFKy9XbmNVUXlpcktjRjJFOVI2MElBOW44bnMybQpXVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUVFd3ZIUHNiLzhEYUFPUzVLZWNjcDl3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRZkljMUF5S1h4R2RhQ3EvSU5zd2NaREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCisvV25jVVF5aXJLY0YyRTlSNjBJQTluOG5zMm1XVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUUKRXd2SFBzYi84RGFBT1M1S2VjY3A5Nk9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZFMDJGK09XeDBXUXMwOHJ1OUNZbEVmZUhaZGRNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRHdQNHdXTHhReDJGL08vNmoyaDRpWQpHRWppZjh6RS9PSkVmdnBLL1RNQkhBSWdWTGx0ZHZLMFkrenRCWmc2WEQraStxdDdPYTlFQm9qdndXQ2djMUxSCkc2VT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 3, "Hostname": "localhost", - "Port": 8800 + "Port": 8999 }, { "Pid": { - "ID": "9a9f8068c4541b3f6f147b927a2ab69a89b3050ba8a1ce8053fec2b6bf00818f" + "ID": "f77ba9ed568fd35cb539c63c90795cdf1904966f0f6e239c0d3752d6f41fda95" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaU5kdmR1TlAvUk8rWE9EaWl1eU1FQTNwbllybApkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFhIcVdNUHllSytDUERDTFhYYkExSXJRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRQ2FsMHBQeUM2SHJDQW8vM3pobHEwREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmlOZHZkdU5QL1JPK1hPRGlpdXlNRUEzcG5ZcmxkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFgKSHFXTVB5ZUsrQ1BEQ0xYWGJBMUlyYU9Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGREQ0UWtmUkd1dFJQcldheDBpQkVXclVLcFVNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE5sTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUZ0Mmk3SldkSkNzL3ZNemtoc2dOK1RVMVErREZ4UWhmVzR4CkNGRkdET2o2QWlFQWhyZmJ0b0JTOFRRWWwyeXRmS1VMNDlJRlptOFVOWFZuSHY0b0tWU1dwYlk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMWZoemptR1hhQjZlTG1TWTFTSG55RG5OYWs5SQpwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3RRYWJ0d1ZoaXRPbG40WWFIQjhWaWVRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRVlpyZnBZTzB0bzhuOWQ2eHlPaDdVVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCjFmaHpqbUdYYUI2ZUxtU1kxU0hueURuTmFrOUlwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3QKUWFidHdWaGl0T2xuNFlhSEI4VmllYU9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGZFB4eHhKRHRiVFdxeXhGRzNFSzl3ZHpQSlpNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRG1DRmg5akJIdENPM0NSenFPbEVLOApXU0lkTVJxVWp3K3h3MFpFc0JlVHNBSWdGVXl3SW02b3JPMEk2RmRXRHFJWEdndEo2OXFlVHgrblJDZkxldi9HCnV3Zz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 4, "Hostname": "localhost", - "Port": 8802 + "Port": 9000 } ] }, - "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVgyZ0F3SUJBZ0lSQU1uSDFSenlZd1R5L3g0TWNsR1RncDB3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJLM0x5akJZSUo5OHlzMEtqU0RQMXBnV3ZMbWhJWm0xbkp2aW1CMnUxenlYWGR3NUxaZGx0N1JMNVpjYjlLVmkKRUo5eFJObTZwcERWQW5heEt0VjBlVmVqZ2JFd2dhNHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCVEljOUU0aTJTRlRMZnEwbGxpaUhoc09kS3JnREJOQmdOVkhSRUVSakJFZ2pGMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV0Z6YVdFdE1ESXVaMk53TG5SbGMzUnVaWFF1ZUd4aFluTXVlSGw2Z2dsc2IyTmhiR2h2YzNTSApCSDhBQUFFd0NnWUlLb1pJemowRUF3SURTQUF3UlFJZ05DR09rRlI2WTRlR2NiNE1FcnRuMnVoc29CaXFSdko0CkRiaTBrNUVxbkI4Q0lRQ2NLOVUySHZwUG4vbFc5UDhLcHFpUjg2cW9oN3Z3MWZKc3EzUmIrNjVjUVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", - "PrivateKey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ09NOTRDcUNmNWNwZGVKNmMKK1ZKQ21hb3M2cmdrR1RtODRoTnV1WHJpSVRLaFJBTkNBQVN0eThvd1dDQ2ZmTXJOQ28wZ3o5YVlGcnk1b1NHWgp0WnliNHBnZHJ0YzhsMTNjT1MyWFpiZTBTK1dYRy9TbFloQ2ZjVVRadXFhUTFRSjJzU3JWZEhsWAotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", + "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZXZ0F3SUJBZ0lSQUlpa0g5MDRrcm5jaDJVUXlzYUNxd3d3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJPWXgyelZkOUtHT3ZrY1VyYndCWnRFOE9UNlBSc0t0OVIxSG1QNWptT3Vud1VYSEFTNjg4Und3VTdvTHArSU4KVlROYTBMcFdyZWhwNm1YY3QvNnhoalNqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCU0hlWnF2Nm9kclVMKzB4ZnNvL1pmM3owcXJpakFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05IQURCRUFpQmZiOTdrci8zUWhORklFLzB0Vzh6QgpGZVNCSklRS0JXajRJQjByN2ZGazZRSWdST3R2UU9GTEVzbEJ3Zk1GSmtEK1RNVWFJVzd4d2Jvci9ZQ2NnazUyCnF5WT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", + "PrivateKey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ0kxYmV5S3dmVVZYUGZlTVIKb3JYMVVVRVhtVU1iSkxzcFpVajdpRklNcU95aFJBTkNBQVRtTWRzMVhmU2hqcjVIRksyOEFXYlJQRGsrajBiQwpyZlVkUjVqK1k1anJwOEZGeHdFdXZQRWNNRk82QzZmaURWVXpXdEM2VnEzb2FlcGwzTGYrc1lZMAotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", "Threshold": 2, - "TSSSecrets": "M38DAQEKVFNTU2VjcmV0cwH/gAABAgEGQ29uZmlnAf+CAAEKVHJhY2tpbmdJRAH/hgAAAG3/gQMBAQZDb25maWcB/4IAAQYBAklEAQwAAQlUaHJlc2hvbGQBBAABDFByaXZhdGVTaGFyZQEQAAEJUHVibGljS2V5ARAAAQhDaGFpbktleQEKAAESVmVyaWZpY2F0aW9uU2hhcmVzAf+EAAAACv+DBgEC/4gAAAAO/4kEAQL/igABDAEQAABT/4UDAQEKVHJhY2tpbmdJRAH/hgABBAEIUHJvdG9jb2wBBgABBkRpZ2VzdAEKAAEMUGFydGllc1N0YXRlAQoAAQ1BdXhpbGlhcnlEYXRhAQoAAABp/4ABAUA5MWVmNDJlZWRiOTU3NDE4ZmE3OTNmMGEyMGZlNDhmYmYxMTE1ZDY2Mzk3YzZlZWJlZjRjNjE5YjE3YzY2MmRlAQQBFipjdXJ2ZS5TZWNwMjU2azFTY2FsYXL/iwYBAv+OAAAARv+MIgAg/raCUouvfniN8vk6HnLRnmvL6ks7VNNTXbpMmhIRNvABFSpjdXJ2ZS5TZWNwMjU2azFQb2ludP+PBgEC/5IAAAD+Ak//kCMAIQN0D12Lwg9elnLG6IZraRwZUuERZIueCha2DLM3QJ7beQL+AfqleEAzZDdkZWY0NTMzMWUwOTY0MDNhNWFlMGE4OTYyODZjYzY3NzEyNWNlZmNkZDM0ODBkZWI2NmM1ZjIwODMwNmYyWCEDTNd5erK50p4lj+KF2cnt1ws92t2DK4rfKQu/6jbWkGp4QDVhOWFhN2NiYzE5MGJlMTFhNmFmZDhkYzBiNzAwMGQ0MzA1M2MyNGI0MTgxYTI4NzAxOTFkZDliMzIwNmMxZWNYIQIiXB67woCkU31Dt49tJHIowzztKBvgUpjbjPxKICRL5XhAOTFlZjQyZWVkYjk1NzQxOGZhNzkzZjBhMjBmZTQ4ZmJmMTExNWQ2NjM5N2M2ZWViZWY0YzYxOWIxN2M2NjJkZVghAhCEvfws5TOUz96WF/W7XT9PneEd9945T5/VtUToLOmieEA5YTlmODA2OGM0NTQxYjNmNmYxNDdiOTI3YTJhYjY5YTg5YjMwNTBiYThhMWNlODA1M2ZlYzJiNmJmMDA4MThmWCECiEA6HYo23dxC8BQRby9VU2kiTYV2c5ay4Ykx0brijDp4QDI1ZDhhMTkwOGU2NTkzOTFlNDcxNzdkNjhkN2Y4ZjgwNzY1MGI5Y2Y0ZGMxNzRmNWQ5YmIwNzM0OGUyMGM4YmRYIQNr2dJyTNnl5cs5edUMxqGy7YY6f8z2iLsb4fH/282HogABAQIBIGyiLH37Z8fPRNFJ51vD79YrI07inGR1dk/Ob+V+SzTbAQEfAAA=", + "TSSSecrets": "pWxGcm9zdENvbmZpZ3OmYklEeEAyZTIxOTQxNDkxYmQzN2VkYmQ0YzY2YTYwOGZhNWI4ZDAzOTQwNTE3MGIyNzgyYTJhNmM3ZDU4ZGY4NzEwM2U2aVRocmVzaG9sZAJsUHJpdmF0ZVNoYXJlWCD4LLBhaXJJ0UVMl1gvpJE2SxBLcBQdV4mc8FZOC3SvrmlQdWJsaWNLZXlYIQMgmwxSOlsnUF7sl+bW0JGnzoRk75Qz13gnrGR0us2Dd2hDaGFpbktlefZyVmVyaWZpY2F0aW9uU2hhcmVzWQH6pXhAYTk5ZTVkNjQyNTE2NDQyZTY3MjcxMDlhYjE5ZGUwMTI1ODNkOWQzZjRlY2UxZmQxN2U5MmNiMGZjMjYxYTk2YVghAsV0rw9WQD8GxfImnpWwmG2xClUl5hOiQozu1T+m3AuqeEBkZWEwNjE3ZDI1MDk0MTY1OGMzZWM4MWM0NzZjYjkxNDkwOTgwZGYzMzMxYzA1Y2JiNDIzZGI0MzI1ODgwYzI1WCEDz++IVwKk0o/HBx7n0Z+VuSq9XaGCfP+RDm/40Ugp59V4QGY3N2JhOWVkNTY4ZmQzNWNiNTM5YzYzYzkwNzk1Y2RmMTkwNDk2NmYwZjZlMjM5YzBkMzc1MmQ2ZjQxZmRhOTVYIQIeNUSEEyv0GUyPiW9BHQuNjHMlLgvv4WCGR9DYT+YugHhAMmUyMTk0MTQ5MWJkMzdlZGJkNGM2NmE2MDhmYTViOGQwMzk0MDUxNzBiMjc4MmEyYTZjN2Q1OGRmODcxMDNlNlghAibf4ATSTtx75sso3xjG6K87uhnBvSMr/a4X536ek7YYeEA4MDhiMGM4M2FjMmI2ZDBhMTEwNTc2ZjUwZmU5NDk5ZGU2NDUzM2Q1YzdmYzE4ZGQ5MmI0ZTkwNDcwMjNiMjgxWCED/riMlLPuVnbgbqe++VfyPbduAzGe+D7X/Nn+MYSotGhsRWNkc2FDb25maWdzWRRRqWJJRHhAMmUyMTk0MTQ5MWJkMzdlZGJkNGM2NmE2MDhmYTViOGQwMzk0MDUxNzBiMjc4MmEyYTZjN2Q1OGRmODcxMDNlNmlUaHJlc2hvbGQCZUVDRFNBWCBhWeoFCvXav5E6x6Z6v+3dU+xfgxOuCp6w2Q1qzGNsyWdFbEdhbWFsWCBVPoJwWF/WswFo8wXaWMMbTleXXqhuEEj7qkdh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", "LoadDistributionKey": "" } \ No newline at end of file diff --git a/node/pkg/internal/testutils/testdata/tss5/guardian1.json b/node/pkg/internal/testutils/testdata/tss5/guardian1.json index 47ac404d02..cc74e55bc9 100644 --- a/node/pkg/internal/testutils/testdata/tss5/guardian1.json +++ b/node/pkg/internal/testutils/testdata/tss5/guardian1.json @@ -1,74 +1,75 @@ { "MaxSignerTTL": 300000000000, "ChainsWithNoSelfReport": null, - "LeaderIdentity": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFb0ZmcGFCUWVWZ3BxYndJZEprRGc1L04xUmVDdgprYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReThoM3RhVWZBdUZscUZpSTMxcXl2VEdBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "LeaderIdentity": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWpIYk5WMzBvWTYrUnhTdHZBRm0wVHc1UG85Rwp3cTMxSFVlWS9tT1k2NmZCUmNjQkxyenhIREJUdWd1bjRnMVZNMXJRdWxhdDZHbnFaZHkzL3JHR05BPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "EcdsaChains": null, "Self": { "Pid": { - "ID": "25d8a1908e659391e47177d68d7f8f807650b9cf4dc174f5d9bb07348e20c8bd" + "ID": "dea0617d250941658c3ec81c476cb91490980df3331c05cbb423db4325880c25" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFb0ZmcGFCUWVWZ3BxYndJZEprRGc1L04xUmVDdgprYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReThoM3RhVWZBdUZscUZpSTMxcXl2VEdBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxRENDQVh1Z0F3SUJBZ0lRUnRrMVFBOXdaUXl3WlNTaGRhZmswVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCm9GZnBhQlFlVmdwcWJ3SWRKa0RnNS9OMVJlQ3ZrYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReTgKaDN0YVVmQXVGbHFGaUkzMXF5dlRHS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZBL2lZTjh0MUlBS3hSRGN3WE5PaUU2ZTU1ZVNNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE4zTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUNid3I5eVRObTlTOHRYUlMwVnNvWGpyanljTXhCRUhzejYrCjlFOGV4SWI2QWlCK3NGbFc3Y05zUWVpcjVsMzc2bUtYU0R4RWNWRlJmNTBuYVB4TS9UY21YUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "CommunicationIndex": 0, + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFKy9XbmNVUXlpcktjRjJFOVI2MElBOW44bnMybQpXVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUVFd3ZIUHNiLzhEYUFPUzVLZWNjcDl3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRZkljMUF5S1h4R2RhQ3EvSU5zd2NaREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCisvV25jVVF5aXJLY0YyRTlSNjBJQTluOG5zMm1XVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUUKRXd2SFBzYi84RGFBT1M1S2VjY3A5Nk9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZFMDJGK09XeDBXUXMwOHJ1OUNZbEVmZUhaZGRNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRHdQNHdXTHhReDJGL08vNmoyaDRpWQpHRWppZjh6RS9PSkVmdnBLL1RNQkhBSWdWTGx0ZHZLMFkrenRCWmc2WEQraStxdDdPYTlFQm9qdndXQ2djMUxSCkc2VT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", + "CommunicationIndex": 3, "Hostname": "localhost", - "Port": 8801 + "Port": 8999 }, "IdentitiesKeep": { "Identities": [ { "Pid": { - "ID": "25d8a1908e659391e47177d68d7f8f807650b9cf4dc174f5d9bb07348e20c8bd" + "ID": "2e21941491bd37edbd4c66a608fa5b8d039405170b2782a2a6c7d58df87103e6" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFb0ZmcGFCUWVWZ3BxYndJZEprRGc1L04xUmVDdgprYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReThoM3RhVWZBdUZscUZpSTMxcXl2VEdBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxRENDQVh1Z0F3SUJBZ0lRUnRrMVFBOXdaUXl3WlNTaGRhZmswVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCm9GZnBhQlFlVmdwcWJ3SWRKa0RnNS9OMVJlQ3ZrYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReTgKaDN0YVVmQXVGbHFGaUkzMXF5dlRHS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZBL2lZTjh0MUlBS3hSRGN3WE5PaUU2ZTU1ZVNNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE4zTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUNid3I5eVRObTlTOHRYUlMwVnNvWGpyanljTXhCRUhzejYrCjlFOGV4SWI2QWlCK3NGbFc3Y05zUWVpcjVsMzc2bUtYU0R4RWNWRlJmNTBuYVB4TS9UY21YUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWpIYk5WMzBvWTYrUnhTdHZBRm0wVHc1UG85Rwp3cTMxSFVlWS9tT1k2NmZCUmNjQkxyenhIREJUdWd1bjRnMVZNMXJRdWxhdDZHbnFaZHkzL3JHR05BPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZXZ0F3SUJBZ0lSQUlpa0g5MDRrcm5jaDJVUXlzYUNxd3d3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJPWXgyelZkOUtHT3ZrY1VyYndCWnRFOE9UNlBSc0t0OVIxSG1QNWptT3Vud1VYSEFTNjg4Und3VTdvTHArSU4KVlROYTBMcFdyZWhwNm1YY3QvNnhoalNqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCU0hlWnF2Nm9kclVMKzB4ZnNvL1pmM3owcXJpakFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05IQURCRUFpQmZiOTdrci8zUWhORklFLzB0Vzh6QgpGZVNCSklRS0JXajRJQjByN2ZGazZRSWdST3R2UU9GTEVzbEJ3Zk1GSmtEK1RNVWFJVzd4d2Jvci9ZQ2NnazUyCnF5WT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 0, "Hostname": "localhost", - "Port": 8801 + "Port": 8998 }, { "Pid": { - "ID": "3d7def45331e096403a5ae0a896286cc677125cefcdd3480deb66c5f208306f2" + "ID": "808b0c83ac2b6d0a110576f50fe9499de64533d5c7fc18dd92b4e9047023b281" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaEFCbktobjBoVzRwSnpmVW5pdDVQUlhnWHhpSwpSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGNzbURER3pUNjVrOUdzUXcrb3RTdldBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRWnh6R3lNY2F3eUNyaUZ5R0htblJDREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmhBQm5LaG4waFc0cEp6ZlVuaXQ1UFJYZ1h4aUtSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGMKc21EREd6VDY1azlHc1F3K290U3ZXS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZNV3hmQ2xBOUFwUCtwb2ZVK1FBbUlLOFcxYytNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRaWFYzTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFENWhKbDU0QkJYRlp1NldKd0dFZi9Qd3czZXYvYTJoUFNYCngvN245MzVRUFFJZ05aV1dKQk9hQXJtU0xQbVdRNE1xQWRlbHo5ZEhtSjFWS3hxOWE5SFZFaGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTHY1NEwxeTkvYkJLMGRYT3V0KzQ0a0lTK1JUawpKS1kya3p0ekhZT3NvMHhjVW9SUTlaMG5lSHE5cnUzSFc2bVRJc0RiK3g3bnY3eDlCSWhEclVaU1R3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9OblVSTEQydmJVUXRSZzI5REs4cTh3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJDNytlQzljdmYyd1N0SFZ6cnJmdU9KQ0V2a1U1Q1NtTnBNN2N4MkRyS05NWEZLRVVQV2RKM2g2dmE3dHgxdXAKa3lMQTIvc2U1Nys4ZlFTSVE2MUdVaytqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXdubUlxUlV4YmV6aVBZMG1KWk00bTU3dmhjREFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQk56ZVBWSjBHU2ZXNjVjK011RDltaAphbWF6d01xL0Ezb3hQNHZWVDZ3alZnSWhBTG14SEY2OThDUEVPMnhXVE9aQWdOQ2NXSk9wbll2OWQ2enNDcndRCkV0STYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 1, "Hostname": "localhost", - "Port": 8804 + "Port": 9002 }, { "Pid": { - "ID": "5a9aa7cbc190be11a6afd8dc0b7000d43053c24b4181a2870191dd9b3206c1ec" + "ID": "a99e5d642516442e6727109ab19de012583d9d3f4ece1fd17e92cb0fc261a96a" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZklqTGpRMm0xaDIzS3pIT1ZZYmttR01NZW9yagpxVVpDWHBxcXNiMlFsQ0c5QkhJZnZlQzA3MjdhQzNPcllmT0I5cEZjRWJSMjVXY3dXNjhtK0dtNmlBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVh5Z0F3SUJBZ0lSQVBOUzYvdGNzdE9lZERlb2FpNWV0SDR3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJIeUl5NDBOcHRZZHR5c3h6bFdHNUpoakRIcUs0NmxHUWw2YXFyRzlrSlFodlFSeUg3M2d0Tzl1Mmd0enEySHoKZ2ZhUlhCRzBkdVZuTUZ1dkp2aHB1b2lqZ2JBd2dhMHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXRHaUlSQ212aFErdlZKOFNjUVlxM1FhSFp3akJNQmdOVkhSRUVSVEJEZ2pCMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV1YxWXkwd01pNW5ZM0F1ZEdWemRHNWxkQzU0YkdGaWN5NTRlWHFDQ1d4dlkyRnNhRzl6ZEljRQpmd0FBQVRBS0JnZ3Foa2pPUFFRREFnTkpBREJHQWlFQThCWjZ3UjB2K01UQUJDNXNDWk5oZGQzK3NuQmFMWUhqCjNVd3Q1eGZpK0h3Q0lRQ29qcnBSd0tEMXRIVXNCM3NLN3dpSjBjcGlEdVV2K0YvSHc1QWNFWml6OHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMTRveEJOVXVGSkhHMHlDWlJmeEN5UEtXNlVSUwoydlRma0ZsQVJmMGlxeEJ5UW5wMnRpNmNCWU5KZTJyTmhROVVyZ1N6bDc0L04rSFgrd2RoQUtFSWpRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9LQmp5TnNaSFV5SFRLYUJ3dXZoWHd3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJOZUtNUVRWTGhTUnh0TWdtVVg4UXNqeWx1bEVVdHIwMzVCWlFFWDlJcXNRY2tKNmRyWXVuQVdEU1h0cXpZVVAKVks0RXM1ZStQemZoMS9zSFlRQ2hDSTJqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUnpsMGhZc0NSaDArQXJUUDZkVHJXUktweWg1ekFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQkRzakd6bmZ6Z2E2YlVBa3NuS09YbwpMR1MzZzROLzd1bUZ0cW9EVHU4VUVBSWhBTWl0em43VmRISDBaL0NubnhGTmVPY21CYUFxNDB3cTg0SUpLRHVZClRIVW4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 2, "Hostname": "localhost", - "Port": 8803 + "Port": 9001 }, { "Pid": { - "ID": "91ef42eedb957418fa793f0a20fe48fbf1115d66397c6eebef4c619b17c662de" + "ID": "dea0617d250941658c3ec81c476cb91490980df3331c05cbb423db4325880c25" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFcmN2S01GZ2duM3pLelFxTklNL1dtQmE4dWFFaAptYldjbStLWUhhN1hQSmRkM0RrdGwyVzN0RXZsbHh2MHBXSVFuM0ZFMmJxbWtOVUNkckVxMVhSNVZ3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVgyZ0F3SUJBZ0lSQU1uSDFSenlZd1R5L3g0TWNsR1RncDB3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJLM0x5akJZSUo5OHlzMEtqU0RQMXBnV3ZMbWhJWm0xbkp2aW1CMnUxenlYWGR3NUxaZGx0N1JMNVpjYjlLVmkKRUo5eFJObTZwcERWQW5heEt0VjBlVmVqZ2JFd2dhNHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCVEljOUU0aTJTRlRMZnEwbGxpaUhoc09kS3JnREJOQmdOVkhSRUVSakJFZ2pGMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV0Z6YVdFdE1ESXVaMk53TG5SbGMzUnVaWFF1ZUd4aFluTXVlSGw2Z2dsc2IyTmhiR2h2YzNTSApCSDhBQUFFd0NnWUlLb1pJemowRUF3SURTQUF3UlFJZ05DR09rRlI2WTRlR2NiNE1FcnRuMnVoc29CaXFSdko0CkRiaTBrNUVxbkI4Q0lRQ2NLOVUySHZwUG4vbFc5UDhLcHFpUjg2cW9oN3Z3MWZKc3EzUmIrNjVjUVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFKy9XbmNVUXlpcktjRjJFOVI2MElBOW44bnMybQpXVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUVFd3ZIUHNiLzhEYUFPUzVLZWNjcDl3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRZkljMUF5S1h4R2RhQ3EvSU5zd2NaREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCisvV25jVVF5aXJLY0YyRTlSNjBJQTluOG5zMm1XVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUUKRXd2SFBzYi84RGFBT1M1S2VjY3A5Nk9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZFMDJGK09XeDBXUXMwOHJ1OUNZbEVmZUhaZGRNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRHdQNHdXTHhReDJGL08vNmoyaDRpWQpHRWppZjh6RS9PSkVmdnBLL1RNQkhBSWdWTGx0ZHZLMFkrenRCWmc2WEQraStxdDdPYTlFQm9qdndXQ2djMUxSCkc2VT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 3, "Hostname": "localhost", - "Port": 8800 + "Port": 8999 }, { "Pid": { - "ID": "9a9f8068c4541b3f6f147b927a2ab69a89b3050ba8a1ce8053fec2b6bf00818f" + "ID": "f77ba9ed568fd35cb539c63c90795cdf1904966f0f6e239c0d3752d6f41fda95" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaU5kdmR1TlAvUk8rWE9EaWl1eU1FQTNwbllybApkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFhIcVdNUHllSytDUERDTFhYYkExSXJRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRQ2FsMHBQeUM2SHJDQW8vM3pobHEwREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmlOZHZkdU5QL1JPK1hPRGlpdXlNRUEzcG5ZcmxkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFgKSHFXTVB5ZUsrQ1BEQ0xYWGJBMUlyYU9Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGREQ0UWtmUkd1dFJQcldheDBpQkVXclVLcFVNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE5sTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUZ0Mmk3SldkSkNzL3ZNemtoc2dOK1RVMVErREZ4UWhmVzR4CkNGRkdET2o2QWlFQWhyZmJ0b0JTOFRRWWwyeXRmS1VMNDlJRlptOFVOWFZuSHY0b0tWU1dwYlk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMWZoemptR1hhQjZlTG1TWTFTSG55RG5OYWs5SQpwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3RRYWJ0d1ZoaXRPbG40WWFIQjhWaWVRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRVlpyZnBZTzB0bzhuOWQ2eHlPaDdVVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCjFmaHpqbUdYYUI2ZUxtU1kxU0hueURuTmFrOUlwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3QKUWFidHdWaGl0T2xuNFlhSEI4VmllYU9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGZFB4eHhKRHRiVFdxeXhGRzNFSzl3ZHpQSlpNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRG1DRmg5akJIdENPM0NSenFPbEVLOApXU0lkTVJxVWp3K3h3MFpFc0JlVHNBSWdGVXl3SW02b3JPMEk2RmRXRHFJWEdndEo2OXFlVHgrblJDZkxldi9HCnV3Zz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 4, "Hostname": "localhost", - "Port": 8802 + "Port": 9000 } ] }, - "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxRENDQVh1Z0F3SUJBZ0lRUnRrMVFBOXdaUXl3WlNTaGRhZmswVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCm9GZnBhQlFlVmdwcWJ3SWRKa0RnNS9OMVJlQ3ZrYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReTgKaDN0YVVmQXVGbHFGaUkzMXF5dlRHS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZBL2lZTjh0MUlBS3hSRGN3WE5PaUU2ZTU1ZVNNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE4zTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUNid3I5eVRObTlTOHRYUlMwVnNvWGpyanljTXhCRUhzejYrCjlFOGV4SWI2QWlCK3NGbFc3Y05zUWVpcjVsMzc2bUtYU0R4RWNWRlJmNTBuYVB4TS9UY21YUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "PrivateKey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ2E5cUs3SzZTODlxanpub2UKMkNxZzZENnBsUWlLS0VqT3J3L2xVTDJndFVDaFJBTkNBQVNnVitsb0ZCNVdDbXB2QWgwbVFPRG44M1ZGNEsrUgp2ZGdreXJKN3ZNOTlBUG96eFhSaytnRjlZTDhpSmFpVkRMeUhlMXBSOEM0V1dvV0lqZldySzlNWQotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", + "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRZkljMUF5S1h4R2RhQ3EvSU5zd2NaREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCisvV25jVVF5aXJLY0YyRTlSNjBJQTluOG5zMm1XVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUUKRXd2SFBzYi84RGFBT1M1S2VjY3A5Nk9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZFMDJGK09XeDBXUXMwOHJ1OUNZbEVmZUhaZGRNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRHdQNHdXTHhReDJGL08vNmoyaDRpWQpHRWppZjh6RS9PSkVmdnBLL1RNQkhBSWdWTGx0ZHZLMFkrenRCWmc2WEQraStxdDdPYTlFQm9qdndXQ2djMUxSCkc2VT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", + "PrivateKey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ05nZWxaQTdISHVSTUxjbTAKNC9TcWZRUllJK2xXUWNKUDI1dWlqc0Q0dEhhaFJBTkNBQVQ3OWFkeFJES0tzcHdYWVQxSHJRZ0QyZnllemFaWgpVT2tNT0lVUGJLMXNtRExpK3hhaFl6QU9YOEZCNFpCMHE0UVRDOGMreHYvd05vQTVMa3A1eHluMwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", "Threshold": 2, - "TSSSecrets": "M38DAQEKVFNTU2VjcmV0cwH/gAABAgEGQ29uZmlnAf+CAAEKVHJhY2tpbmdJRAH/hgAAAG3/gQMBAQZDb25maWcB/4IAAQYBAklEAQwAAQlUaHJlc2hvbGQBBAABDFByaXZhdGVTaGFyZQEQAAEJUHVibGljS2V5ARAAAQhDaGFpbktleQEKAAESVmVyaWZpY2F0aW9uU2hhcmVzAf+EAAAACv+DBgEC/4gAAAAO/4kEAQL/igABDAEQAABT/4UDAQEKVHJhY2tpbmdJRAH/hgABBAEIUHJvdG9jb2wBBgABBkRpZ2VzdAEKAAEMUGFydGllc1N0YXRlAQoAAQ1BdXhpbGlhcnlEYXRhAQoAAABp/4ABAUAyNWQ4YTE5MDhlNjU5MzkxZTQ3MTc3ZDY4ZDdmOGY4MDc2NTBiOWNmNGRjMTc0ZjVkOWJiMDczNDhlMjBjOGJkAQQBFipjdXJ2ZS5TZWNwMjU2azFTY2FsYXL/iwYBAv+OAAAARv+MIgAgcFXgwA/Y83iUGV6UUztq/Yd+7/2AoG5cMsxgxTDz9EEBFSpjdXJ2ZS5TZWNwMjU2azFQb2ludP+PBgEC/5IAAAD+Ak//kCMAIQN0D12Lwg9elnLG6IZraRwZUuERZIueCha2DLM3QJ7beQL+AfqleEA5MWVmNDJlZWRiOTU3NDE4ZmE3OTNmMGEyMGZlNDhmYmYxMTE1ZDY2Mzk3YzZlZWJlZjRjNjE5YjE3YzY2MmRlWCECEIS9/CzlM5TP3pYX9btdP0+d4R333jlPn9W1ROgs6aJ4QDlhOWY4MDY4YzQ1NDFiM2Y2ZjE0N2I5MjdhMmFiNjlhODliMzA1MGJhOGExY2U4MDUzZmVjMmI2YmYwMDgxOGZYIQKIQDodijbd3ELwFBFvL1VTaSJNhXZzlrLhiTHRuuKMOnhAMjVkOGExOTA4ZTY1OTM5MWU0NzE3N2Q2OGQ3ZjhmODA3NjUwYjljZjRkYzE3NGY1ZDliYjA3MzQ4ZTIwYzhiZFghA2vZ0nJM2eXlyzl51QzGobLthjp/zPaIuxvh8f/bzYeieEAzZDdkZWY0NTMzMWUwOTY0MDNhNWFlMGE4OTYyODZjYzY3NzEyNWNlZmNkZDM0ODBkZWI2NmM1ZjIwODMwNmYyWCEDTNd5erK50p4lj+KF2cnt1ws92t2DK4rfKQu/6jbWkGp4QDVhOWFhN2NiYzE5MGJlMTFhNmFmZDhkYzBiNzAwMGQ0MzA1M2MyNGI0MTgxYTI4NzAxOTFkZDliMzIwNmMxZWNYIQIiXB67woCkU31Dt49tJHIowzztKBvgUpjbjPxKICRL5QABAQIBIGyiLH37Z8fPRNFJ51vD79YrI07inGR1dk/Ob+V+SzTbAQEfAAA=", + "TSSSecrets": "pWxGcm9zdENvbmZpZ3OmYklEeEBkZWEwNjE3ZDI1MDk0MTY1OGMzZWM4MWM0NzZjYjkxNDkwOTgwZGYzMzMxYzA1Y2JiNDIzZGI0MzI1ODgwYzI1aVRocmVzaG9sZAJsUHJpdmF0ZVNoYXJlWCDi903Yqd5FEI7LuqBpCibW2gxabzFn5RpK1IrPlgY0ZmlQdWJsaWNLZXlYIQMgmwxSOlsnUF7sl+bW0JGnzoRk75Qz13gnrGR0us2Dd2hDaGFpbktlefZyVmVyaWZpY2F0aW9uU2hhcmVzWQH6pXhAYTk5ZTVkNjQyNTE2NDQyZTY3MjcxMDlhYjE5ZGUwMTI1ODNkOWQzZjRlY2UxZmQxN2U5MmNiMGZjMjYxYTk2YVghAsV0rw9WQD8GxfImnpWwmG2xClUl5hOiQozu1T+m3AuqeEBkZWEwNjE3ZDI1MDk0MTY1OGMzZWM4MWM0NzZjYjkxNDkwOTgwZGYzMzMxYzA1Y2JiNDIzZGI0MzI1ODgwYzI1WCEDz++IVwKk0o/HBx7n0Z+VuSq9XaGCfP+RDm/40Ugp59V4QGY3N2JhOWVkNTY4ZmQzNWNiNTM5YzYzYzkwNzk1Y2RmMTkwNDk2NmYwZjZlMjM5YzBkMzc1MmQ2ZjQxZmRhOTVYIQIeNUSEEyv0GUyPiW9BHQuNjHMlLgvv4WCGR9DYT+YugHhAMmUyMTk0MTQ5MWJkMzdlZGJkNGM2NmE2MDhmYTViOGQwMzk0MDUxNzBiMjc4MmEyYTZjN2Q1OGRmODcxMDNlNlghAibf4ATSTtx75sso3xjG6K87uhnBvSMr/a4X536ek7YYeEA4MDhiMGM4M2FjMmI2ZDBhMTEwNTc2ZjUwZmU5NDk5ZGU2NDUzM2Q1YzdmYzE4ZGQ5MmI0ZTkwNDcwMjNiMjgxWCED/riMlLPuVnbgbqe++VfyPbduAzGe+D7X/Nn+MYSotGhsRWNkc2FDb25maWdzWRRRqWJJRHhAZGVhMDYxN2QyNTA5NDE2NThjM2VjODFjNDc2Y2I5MTQ5MDk4MGRmMzMzMWMwNWNiYjQyM2RiNDMyNTg4MGMyNWlUaHJlc2hvbGQCZUVDRFNBWCBS2sjfbtRNVh4qi/3rWhBo2hmhUN1h3PIHy83yRGrXkGdFbEdhbWFsWCBPkZZ4TCkToFPhXBgg2lPPBtYC2eBb/wVuKTRA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", "LoadDistributionKey": "" } \ No newline at end of file diff --git a/node/pkg/internal/testutils/testdata/tss5/guardian2.json b/node/pkg/internal/testutils/testdata/tss5/guardian2.json index cb23865da4..15a28a640c 100644 --- a/node/pkg/internal/testutils/testdata/tss5/guardian2.json +++ b/node/pkg/internal/testutils/testdata/tss5/guardian2.json @@ -1,74 +1,75 @@ { "MaxSignerTTL": 300000000000, "ChainsWithNoSelfReport": null, - "LeaderIdentity": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFb0ZmcGFCUWVWZ3BxYndJZEprRGc1L04xUmVDdgprYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReThoM3RhVWZBdUZscUZpSTMxcXl2VEdBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "LeaderIdentity": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWpIYk5WMzBvWTYrUnhTdHZBRm0wVHc1UG85Rwp3cTMxSFVlWS9tT1k2NmZCUmNjQkxyenhIREJUdWd1bjRnMVZNMXJRdWxhdDZHbnFaZHkzL3JHR05BPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "EcdsaChains": null, "Self": { "Pid": { - "ID": "9a9f8068c4541b3f6f147b927a2ab69a89b3050ba8a1ce8053fec2b6bf00818f" + "ID": "f77ba9ed568fd35cb539c63c90795cdf1904966f0f6e239c0d3752d6f41fda95" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaU5kdmR1TlAvUk8rWE9EaWl1eU1FQTNwbllybApkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFhIcVdNUHllSytDUERDTFhYYkExSXJRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRQ2FsMHBQeUM2SHJDQW8vM3pobHEwREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmlOZHZkdU5QL1JPK1hPRGlpdXlNRUEzcG5ZcmxkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFgKSHFXTVB5ZUsrQ1BEQ0xYWGJBMUlyYU9Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGREQ0UWtmUkd1dFJQcldheDBpQkVXclVLcFVNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE5sTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUZ0Mmk3SldkSkNzL3ZNemtoc2dOK1RVMVErREZ4UWhmVzR4CkNGRkdET2o2QWlFQWhyZmJ0b0JTOFRRWWwyeXRmS1VMNDlJRlptOFVOWFZuSHY0b0tWU1dwYlk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMWZoemptR1hhQjZlTG1TWTFTSG55RG5OYWs5SQpwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3RRYWJ0d1ZoaXRPbG40WWFIQjhWaWVRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRVlpyZnBZTzB0bzhuOWQ2eHlPaDdVVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCjFmaHpqbUdYYUI2ZUxtU1kxU0hueURuTmFrOUlwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3QKUWFidHdWaGl0T2xuNFlhSEI4VmllYU9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGZFB4eHhKRHRiVFdxeXhGRzNFSzl3ZHpQSlpNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRG1DRmg5akJIdENPM0NSenFPbEVLOApXU0lkTVJxVWp3K3h3MFpFc0JlVHNBSWdGVXl3SW02b3JPMEk2RmRXRHFJWEdndEo2OXFlVHgrblJDZkxldi9HCnV3Zz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 4, "Hostname": "localhost", - "Port": 8802 + "Port": 9000 }, "IdentitiesKeep": { "Identities": [ { "Pid": { - "ID": "25d8a1908e659391e47177d68d7f8f807650b9cf4dc174f5d9bb07348e20c8bd" + "ID": "2e21941491bd37edbd4c66a608fa5b8d039405170b2782a2a6c7d58df87103e6" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFb0ZmcGFCUWVWZ3BxYndJZEprRGc1L04xUmVDdgprYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReThoM3RhVWZBdUZscUZpSTMxcXl2VEdBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxRENDQVh1Z0F3SUJBZ0lRUnRrMVFBOXdaUXl3WlNTaGRhZmswVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCm9GZnBhQlFlVmdwcWJ3SWRKa0RnNS9OMVJlQ3ZrYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReTgKaDN0YVVmQXVGbHFGaUkzMXF5dlRHS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZBL2lZTjh0MUlBS3hSRGN3WE5PaUU2ZTU1ZVNNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE4zTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUNid3I5eVRObTlTOHRYUlMwVnNvWGpyanljTXhCRUhzejYrCjlFOGV4SWI2QWlCK3NGbFc3Y05zUWVpcjVsMzc2bUtYU0R4RWNWRlJmNTBuYVB4TS9UY21YUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWpIYk5WMzBvWTYrUnhTdHZBRm0wVHc1UG85Rwp3cTMxSFVlWS9tT1k2NmZCUmNjQkxyenhIREJUdWd1bjRnMVZNMXJRdWxhdDZHbnFaZHkzL3JHR05BPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZXZ0F3SUJBZ0lSQUlpa0g5MDRrcm5jaDJVUXlzYUNxd3d3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJPWXgyelZkOUtHT3ZrY1VyYndCWnRFOE9UNlBSc0t0OVIxSG1QNWptT3Vud1VYSEFTNjg4Und3VTdvTHArSU4KVlROYTBMcFdyZWhwNm1YY3QvNnhoalNqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCU0hlWnF2Nm9kclVMKzB4ZnNvL1pmM3owcXJpakFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05IQURCRUFpQmZiOTdrci8zUWhORklFLzB0Vzh6QgpGZVNCSklRS0JXajRJQjByN2ZGazZRSWdST3R2UU9GTEVzbEJ3Zk1GSmtEK1RNVWFJVzd4d2Jvci9ZQ2NnazUyCnF5WT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 0, "Hostname": "localhost", - "Port": 8801 + "Port": 8998 }, { "Pid": { - "ID": "3d7def45331e096403a5ae0a896286cc677125cefcdd3480deb66c5f208306f2" + "ID": "808b0c83ac2b6d0a110576f50fe9499de64533d5c7fc18dd92b4e9047023b281" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaEFCbktobjBoVzRwSnpmVW5pdDVQUlhnWHhpSwpSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGNzbURER3pUNjVrOUdzUXcrb3RTdldBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRWnh6R3lNY2F3eUNyaUZ5R0htblJDREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmhBQm5LaG4waFc0cEp6ZlVuaXQ1UFJYZ1h4aUtSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGMKc21EREd6VDY1azlHc1F3K290U3ZXS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZNV3hmQ2xBOUFwUCtwb2ZVK1FBbUlLOFcxYytNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRaWFYzTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFENWhKbDU0QkJYRlp1NldKd0dFZi9Qd3czZXYvYTJoUFNYCngvN245MzVRUFFJZ05aV1dKQk9hQXJtU0xQbVdRNE1xQWRlbHo5ZEhtSjFWS3hxOWE5SFZFaGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTHY1NEwxeTkvYkJLMGRYT3V0KzQ0a0lTK1JUawpKS1kya3p0ekhZT3NvMHhjVW9SUTlaMG5lSHE5cnUzSFc2bVRJc0RiK3g3bnY3eDlCSWhEclVaU1R3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9OblVSTEQydmJVUXRSZzI5REs4cTh3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJDNytlQzljdmYyd1N0SFZ6cnJmdU9KQ0V2a1U1Q1NtTnBNN2N4MkRyS05NWEZLRVVQV2RKM2g2dmE3dHgxdXAKa3lMQTIvc2U1Nys4ZlFTSVE2MUdVaytqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXdubUlxUlV4YmV6aVBZMG1KWk00bTU3dmhjREFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQk56ZVBWSjBHU2ZXNjVjK011RDltaAphbWF6d01xL0Ezb3hQNHZWVDZ3alZnSWhBTG14SEY2OThDUEVPMnhXVE9aQWdOQ2NXSk9wbll2OWQ2enNDcndRCkV0STYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 1, "Hostname": "localhost", - "Port": 8804 + "Port": 9002 }, { "Pid": { - "ID": "5a9aa7cbc190be11a6afd8dc0b7000d43053c24b4181a2870191dd9b3206c1ec" + "ID": "a99e5d642516442e6727109ab19de012583d9d3f4ece1fd17e92cb0fc261a96a" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZklqTGpRMm0xaDIzS3pIT1ZZYmttR01NZW9yagpxVVpDWHBxcXNiMlFsQ0c5QkhJZnZlQzA3MjdhQzNPcllmT0I5cEZjRWJSMjVXY3dXNjhtK0dtNmlBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVh5Z0F3SUJBZ0lSQVBOUzYvdGNzdE9lZERlb2FpNWV0SDR3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJIeUl5NDBOcHRZZHR5c3h6bFdHNUpoakRIcUs0NmxHUWw2YXFyRzlrSlFodlFSeUg3M2d0Tzl1Mmd0enEySHoKZ2ZhUlhCRzBkdVZuTUZ1dkp2aHB1b2lqZ2JBd2dhMHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXRHaUlSQ212aFErdlZKOFNjUVlxM1FhSFp3akJNQmdOVkhSRUVSVEJEZ2pCMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV1YxWXkwd01pNW5ZM0F1ZEdWemRHNWxkQzU0YkdGaWN5NTRlWHFDQ1d4dlkyRnNhRzl6ZEljRQpmd0FBQVRBS0JnZ3Foa2pPUFFRREFnTkpBREJHQWlFQThCWjZ3UjB2K01UQUJDNXNDWk5oZGQzK3NuQmFMWUhqCjNVd3Q1eGZpK0h3Q0lRQ29qcnBSd0tEMXRIVXNCM3NLN3dpSjBjcGlEdVV2K0YvSHc1QWNFWml6OHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMTRveEJOVXVGSkhHMHlDWlJmeEN5UEtXNlVSUwoydlRma0ZsQVJmMGlxeEJ5UW5wMnRpNmNCWU5KZTJyTmhROVVyZ1N6bDc0L04rSFgrd2RoQUtFSWpRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9LQmp5TnNaSFV5SFRLYUJ3dXZoWHd3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJOZUtNUVRWTGhTUnh0TWdtVVg4UXNqeWx1bEVVdHIwMzVCWlFFWDlJcXNRY2tKNmRyWXVuQVdEU1h0cXpZVVAKVks0RXM1ZStQemZoMS9zSFlRQ2hDSTJqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUnpsMGhZc0NSaDArQXJUUDZkVHJXUktweWg1ekFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQkRzakd6bmZ6Z2E2YlVBa3NuS09YbwpMR1MzZzROLzd1bUZ0cW9EVHU4VUVBSWhBTWl0em43VmRISDBaL0NubnhGTmVPY21CYUFxNDB3cTg0SUpLRHVZClRIVW4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 2, "Hostname": "localhost", - "Port": 8803 + "Port": 9001 }, { "Pid": { - "ID": "91ef42eedb957418fa793f0a20fe48fbf1115d66397c6eebef4c619b17c662de" + "ID": "dea0617d250941658c3ec81c476cb91490980df3331c05cbb423db4325880c25" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFcmN2S01GZ2duM3pLelFxTklNL1dtQmE4dWFFaAptYldjbStLWUhhN1hQSmRkM0RrdGwyVzN0RXZsbHh2MHBXSVFuM0ZFMmJxbWtOVUNkckVxMVhSNVZ3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVgyZ0F3SUJBZ0lSQU1uSDFSenlZd1R5L3g0TWNsR1RncDB3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJLM0x5akJZSUo5OHlzMEtqU0RQMXBnV3ZMbWhJWm0xbkp2aW1CMnUxenlYWGR3NUxaZGx0N1JMNVpjYjlLVmkKRUo5eFJObTZwcERWQW5heEt0VjBlVmVqZ2JFd2dhNHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCVEljOUU0aTJTRlRMZnEwbGxpaUhoc09kS3JnREJOQmdOVkhSRUVSakJFZ2pGMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV0Z6YVdFdE1ESXVaMk53TG5SbGMzUnVaWFF1ZUd4aFluTXVlSGw2Z2dsc2IyTmhiR2h2YzNTSApCSDhBQUFFd0NnWUlLb1pJemowRUF3SURTQUF3UlFJZ05DR09rRlI2WTRlR2NiNE1FcnRuMnVoc29CaXFSdko0CkRiaTBrNUVxbkI4Q0lRQ2NLOVUySHZwUG4vbFc5UDhLcHFpUjg2cW9oN3Z3MWZKc3EzUmIrNjVjUVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFKy9XbmNVUXlpcktjRjJFOVI2MElBOW44bnMybQpXVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUVFd3ZIUHNiLzhEYUFPUzVLZWNjcDl3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRZkljMUF5S1h4R2RhQ3EvSU5zd2NaREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCisvV25jVVF5aXJLY0YyRTlSNjBJQTluOG5zMm1XVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUUKRXd2SFBzYi84RGFBT1M1S2VjY3A5Nk9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZFMDJGK09XeDBXUXMwOHJ1OUNZbEVmZUhaZGRNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRHdQNHdXTHhReDJGL08vNmoyaDRpWQpHRWppZjh6RS9PSkVmdnBLL1RNQkhBSWdWTGx0ZHZLMFkrenRCWmc2WEQraStxdDdPYTlFQm9qdndXQ2djMUxSCkc2VT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 3, "Hostname": "localhost", - "Port": 8800 + "Port": 8999 }, { "Pid": { - "ID": "9a9f8068c4541b3f6f147b927a2ab69a89b3050ba8a1ce8053fec2b6bf00818f" + "ID": "f77ba9ed568fd35cb539c63c90795cdf1904966f0f6e239c0d3752d6f41fda95" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaU5kdmR1TlAvUk8rWE9EaWl1eU1FQTNwbllybApkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFhIcVdNUHllSytDUERDTFhYYkExSXJRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRQ2FsMHBQeUM2SHJDQW8vM3pobHEwREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmlOZHZkdU5QL1JPK1hPRGlpdXlNRUEzcG5ZcmxkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFgKSHFXTVB5ZUsrQ1BEQ0xYWGJBMUlyYU9Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGREQ0UWtmUkd1dFJQcldheDBpQkVXclVLcFVNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE5sTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUZ0Mmk3SldkSkNzL3ZNemtoc2dOK1RVMVErREZ4UWhmVzR4CkNGRkdET2o2QWlFQWhyZmJ0b0JTOFRRWWwyeXRmS1VMNDlJRlptOFVOWFZuSHY0b0tWU1dwYlk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMWZoemptR1hhQjZlTG1TWTFTSG55RG5OYWs5SQpwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3RRYWJ0d1ZoaXRPbG40WWFIQjhWaWVRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRVlpyZnBZTzB0bzhuOWQ2eHlPaDdVVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCjFmaHpqbUdYYUI2ZUxtU1kxU0hueURuTmFrOUlwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3QKUWFidHdWaGl0T2xuNFlhSEI4VmllYU9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGZFB4eHhKRHRiVFdxeXhGRzNFSzl3ZHpQSlpNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRG1DRmg5akJIdENPM0NSenFPbEVLOApXU0lkTVJxVWp3K3h3MFpFc0JlVHNBSWdGVXl3SW02b3JPMEk2RmRXRHFJWEdndEo2OXFlVHgrblJDZkxldi9HCnV3Zz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 4, "Hostname": "localhost", - "Port": 8802 + "Port": 9000 } ] }, - "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRQ2FsMHBQeUM2SHJDQW8vM3pobHEwREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmlOZHZkdU5QL1JPK1hPRGlpdXlNRUEzcG5ZcmxkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFgKSHFXTVB5ZUsrQ1BEQ0xYWGJBMUlyYU9Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGREQ0UWtmUkd1dFJQcldheDBpQkVXclVLcFVNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE5sTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUZ0Mmk3SldkSkNzL3ZNemtoc2dOK1RVMVErREZ4UWhmVzR4CkNGRkdET2o2QWlFQWhyZmJ0b0JTOFRRWWwyeXRmS1VMNDlJRlptOFVOWFZuSHY0b0tWU1dwYlk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "PrivateKey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ3p3VFB2RElVWnkyOVk0dXIKTWxRcmZ3QkNvMzRqQm5VVE0zdFc0a2R6bE1taFJBTkNBQVNJMTI5MjQwLzlFNzVjNE9LSzdJd1FEZW1kaXVWMQpQZElhUGNaVUgrSWJ2OEFvUGJwamFYNHdGV3lxSXpnT2dOY2VwWXcvSjRyNEk4TUl0ZGRzRFVpdAotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", + "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRVlpyZnBZTzB0bzhuOWQ2eHlPaDdVVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCjFmaHpqbUdYYUI2ZUxtU1kxU0hueURuTmFrOUlwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3QKUWFidHdWaGl0T2xuNFlhSEI4VmllYU9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGZFB4eHhKRHRiVFdxeXhGRzNFSzl3ZHpQSlpNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRG1DRmg5akJIdENPM0NSenFPbEVLOApXU0lkTVJxVWp3K3h3MFpFc0JlVHNBSWdGVXl3SW02b3JPMEk2RmRXRHFJWEdndEo2OXFlVHgrblJDZkxldi9HCnV3Zz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", + "PrivateKey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ1ZHeU5iNmYxM1ZieWthRXcKcUxXemk2dE9NNWtWRTM3SnNhRElJNkJ0ZG5HaFJBTkNBQVRWK0hPT1laZG9IcDR1WkpqVkllZklPYzFxVDBpbApkT2pTazRJYXlqNmRkcUFEMGZ2L2VhekdHMVlXeUxmMXB5MUJwdTNCV0dLMDZXZmhob2NIeFdKNQotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", "Threshold": 2, - "TSSSecrets": "M38DAQEKVFNTU2VjcmV0cwH/gAABAgEGQ29uZmlnAf+CAAEKVHJhY2tpbmdJRAH/hgAAAG3/gQMBAQZDb25maWcB/4IAAQYBAklEAQwAAQlUaHJlc2hvbGQBBAABDFByaXZhdGVTaGFyZQEQAAEJUHVibGljS2V5ARAAAQhDaGFpbktleQEKAAESVmVyaWZpY2F0aW9uU2hhcmVzAf+EAAAACv+DBgEC/4gAAAAO/4kEAQL/igABDAEQAABT/4UDAQEKVHJhY2tpbmdJRAH/hgABBAEIUHJvdG9jb2wBBgABBkRpZ2VzdAEKAAEMUGFydGllc1N0YXRlAQoAAQ1BdXhpbGlhcnlEYXRhAQoAAABp/4ABAUA5YTlmODA2OGM0NTQxYjNmNmYxNDdiOTI3YTJhYjY5YTg5YjMwNTBiYThhMWNlODA1M2ZlYzJiNmJmMDA4MThmAQQBFipjdXJ2ZS5TZWNwMjU2azFTY2FsYXL/iwYBAv+OAAAARv+MIgAgynuNOQTZDkipBp2LDuNj/x7L3GW13YiFXbuV7OjBI8sBFSpjdXJ2ZS5TZWNwMjU2azFQb2ludP+PBgEC/5IAAAD+Ak//kCMAIQN0D12Lwg9elnLG6IZraRwZUuERZIueCha2DLM3QJ7beQL+AfqleEA1YTlhYTdjYmMxOTBiZTExYTZhZmQ4ZGMwYjcwMDBkNDMwNTNjMjRiNDE4MWEyODcwMTkxZGQ5YjMyMDZjMWVjWCECIlweu8KApFN9Q7ePbSRyKMM87Sgb4FKY24z8SiAkS+V4QDkxZWY0MmVlZGI5NTc0MThmYTc5M2YwYTIwZmU0OGZiZjExMTVkNjYzOTdjNmVlYmVmNGM2MTliMTdjNjYyZGVYIQIQhL38LOUzlM/elhf1u10/T53hHffeOU+f1bVE6CzponhAOWE5ZjgwNjhjNDU0MWIzZjZmMTQ3YjkyN2EyYWI2OWE4OWIzMDUwYmE4YTFjZTgwNTNmZWMyYjZiZjAwODE4ZlghAohAOh2KNt3cQvAUEW8vVVNpIk2FdnOWsuGJMdG64ow6eEAyNWQ4YTE5MDhlNjU5MzkxZTQ3MTc3ZDY4ZDdmOGY4MDc2NTBiOWNmNGRjMTc0ZjVkOWJiMDczNDhlMjBjOGJkWCEDa9nSckzZ5eXLOXnVDMahsu2GOn/M9oi7G+Hx/9vNh6J4QDNkN2RlZjQ1MzMxZTA5NjQwM2E1YWUwYTg5NjI4NmNjNjc3MTI1Y2VmY2RkMzQ4MGRlYjY2YzVmMjA4MzA2ZjJYIQNM13l6srnSniWP4oXZye3XCz3a3YMrit8pC7/qNtaQagABAQIBIGyiLH37Z8fPRNFJ51vD79YrI07inGR1dk/Ob+V+SzTbAQEfAAA=", + "TSSSecrets": "pWxGcm9zdENvbmZpZ3OmYklEeEBmNzdiYTllZDU2OGZkMzVjYjUzOWM2M2M5MDc5NWNkZjE5MDQ5NjZmMGY2ZTIzOWMwZDM3NTJkNmY0MWZkYTk1aVRocmVzaG9sZAJsUHJpdmF0ZVNoYXJlWCD8lOJPqdx8uunOhkfhGdyRldsaMr+a7SdpYSEhfj8qKmlQdWJsaWNLZXlYIQMgmwxSOlsnUF7sl+bW0JGnzoRk75Qz13gnrGR0us2Dd2hDaGFpbktlefZyVmVyaWZpY2F0aW9uU2hhcmVzWQH6pXhAMmUyMTk0MTQ5MWJkMzdlZGJkNGM2NmE2MDhmYTViOGQwMzk0MDUxNzBiMjc4MmEyYTZjN2Q1OGRmODcxMDNlNlghAibf4ATSTtx75sso3xjG6K87uhnBvSMr/a4X536ek7YYeEA4MDhiMGM4M2FjMmI2ZDBhMTEwNTc2ZjUwZmU5NDk5ZGU2NDUzM2Q1YzdmYzE4ZGQ5MmI0ZTkwNDcwMjNiMjgxWCED/riMlLPuVnbgbqe++VfyPbduAzGe+D7X/Nn+MYSotGh4QGE5OWU1ZDY0MjUxNjQ0MmU2NzI3MTA5YWIxOWRlMDEyNTgzZDlkM2Y0ZWNlMWZkMTdlOTJjYjBmYzI2MWE5NmFYIQLFdK8PVkA/BsXyJp6VsJhtsQpVJeYTokKM7tU/ptwLqnhAZGVhMDYxN2QyNTA5NDE2NThjM2VjODFjNDc2Y2I5MTQ5MDk4MGRmMzMzMWMwNWNiYjQyM2RiNDMyNTg4MGMyNVghA8/viFcCpNKPxwce59GflbkqvV2hgnz/kQ5v+NFIKefVeEBmNzdiYTllZDU2OGZkMzVjYjUzOWM2M2M5MDc5NWNkZjE5MDQ5NjZmMGY2ZTIzOWMwZDM3NTJkNmY0MWZkYTk1WCECHjVEhBMr9BlMj4lvQR0LjYxzJS4L7+FghkfQ2E/mLoBsRWNkc2FDb25maWdzWRRRqWJJRHhAZjc3YmE5ZWQ1NjhmZDM1Y2I1MzljNjNjOTA3OTVjZGYxOTA0OTY2ZjBmNmUyMzljMGQzNzUyZDZmNDFmZGE5NWlUaHJlc2hvbGQCZUVDRFNBWCDfVJJv/2ukUvzJmVbC2kzuqbO9FGId7TSWHaSdrOM24mdFbEdhbWFsWCBwG09QOWoaZ5L9YPFLkxUGcFCgrlYk+xlgMY7uqCGLO2FQWIDl6CBaz3aEwQNuN5dzVr6afiJk+ueD1f97gRAZHkYDAgn/7TZdjUjKNETgunng2wBerRsteb+acyMP+UIoR9Yn+om4ljWroWUFm82eiI/ZSkIcNX3dMhBwuM8YxK2R2xEQLMg2nIS2TdrCI17Otasereb8YiTRNWE3D3vDvN7Fu2FRWIDUZxShAXtzcGlyY3Z1Y4SNTp7PttWwA7wva1172fI+HieUshxEZpcM41W75Of/zLFkbSsV7G6rbINLMN3kn25MjxCRVG8w1fF1CqVS0yjTqQV/CWbi8lrvjW/6dRZPpfelIlSyXr5Fdse/NVrfN2jqBfPQdGdBMlVcO42jSbn362NSSURYIBfGJBWTmACFTdXwqILgNdyaGGgHqJHOC7UPV20wPRySaENoYWluS2V5WCClICfJSO2YDKhzLIB4i70BgI+fZxYwhdz1q/tswP3EXmZQdWJsaWOFpmJJRHhAMmUyMTk0MTQ5MWJkMzdlZGJkNGM2NmE2MDhmYTViOGQwMzk0MDUxNzBiMjc4MmEyYTZjN2Q1OGRmODcxMDNlNmVFQ0RTQVghAoOZz2tMHedG/I2rcFcmE2/YRgx8Qhy2G7+SUjHRcoQvZ0VsR2FtYWxYIQJOMIipDaivJ0xFhFhJOqc4bWKJKSJY7FmsSGyA93ManGFOWQEAtBjHKi4bSMnSTsaEXb3vZpHCpzVdLbMR6/0nAvW5SrZ7Ql4tU9aLj/8DtMf9/a9yahvYdhnJn5r7JE5kvavnbRjAxNdz3CP55XQmDnxyU/haLrEA6s+037ZgwX4ErB6vYTAUg76yVOmMQoM56mQchvR37jphdEsqPbS9E3FYXa0KqPCWrKVaP8nnzlZf7ZnGqqoyFrAS7yVJiv51bDxvz9hSoMSKoTs6zXgIqqSs6Tq8OOwkEi7/5Wuq0Dya7QmFnwPcSyvEd2mfSIwwrpSPK92BBeNaA/9rUc2T8ECrYWcVOrMT/7mOZuVR3i3V5MH7HBoc4pRIqIXkPC0kb2GBJWFTWQEAhcLbZpAuJ0lAD3RYCCS3DnGQ1gOeX6T7YRV0fTnMGJgzWj6LAUjAUJ+/sJ4og1/zBkJnXk7XFKpXDR96TpbqdmWvEtBJ8Nkjf+uuqAFs8qSUOcjYEW2LMMFoNUNT+GGRWvXz03qsocQbeu0IFafPrHvNDh+dy5eC70K9QjqRBbq6SLpEuDz2TvdGu0rrc2opTMcNwwjGtCVD4wOcmNmjq9IEFQRmLsYtqHDYx6439ssg2vlmkVd6AnpkNXsGJY6cu9hO5YIJ4Q9i7PRRbdZalXPFX7Gx2HwR0qTMWHQd3HjP8j+NG4UYSRlsDQifRL8a2FdYTlMwYM/1IfDGY/FTF2FUWQEAGvIQeMMR2M7+TH+FLjIyVpFxS+qqdF7F8OmJA8HAi14I20ZGNRANRL18W3Ek8ajSnxxoXYZjYZs/4MxGP7we6u8cOGOAjL0sKeJkZF9j3E8v7Ce/wwa9uYdivJoAjr8vreK/xOd75QTGulLXMgXQzj8AYurxNH2AK8NbW2oDZfD6QEcn26Zn2HksZsczb2czY7h41lvA1nc7JD/nPHtujjo1WzHz9Qr2YJV0QKTOcgOsnOpGiK59akk53bFOQkIK5woh3EXEhptzmZBIMtwU3lEQ47heaNSPI7idA9cMKNsCztRdpitMMdl3fN4yNWAk8QkDjPIpUmc3+f4mnEWOFaZiSUR4QDgwOGIwYzgzYWMyYjZkMGExMTA1NzZmNTBmZTk0OTlkZTY0NTMzZDVjN2ZjMThkZDkyYjRlOTA0NzAyM2IyODFlRUNEU0FYIQLbwJU5skHaQwWGx514ghRiJPZhfpVWbDNOzApBUCs3rmdFbEdhbWFsWCEDOCikS+lkX3hSIatBrWReLc3Bmrzylp64XDk4z5fG+OxhTlkBAOPUIQKTuDaHDZEVouS2CIG6Z3+iR0ZxjSmDGkplUKwjnKpsz8Ph613MGG0KGMTbPUlR/Z/+ESDgx2JuJJ5/+4Kr8kdV2CvUTHZjfBSi0P0bxVzdpaSuAVial2arip/qlb05Xzc52OQOUP354Pjknjuhc25ZWLpohUCSp6C23lemLikeGHoiFtqgXLgv/umweYCPuIvpOLHZZCLYW3/EolYTgYpOE9/1tAbbpkpP5FMb7uonnPkJc4OjjFyzHvH5xQS4/AgpNoYi55tDrmKQlCrv9LQcZGhdUXuSZd9sE0MAl65BQlEmjNQYFVQAKzeFhnl7QCY6A4VANsd3dUWjb2lhU1kBAAJ/uOnyAh04B7J0DBp6f8dobWjy7IqT4cykyCwebhS/thE/8sXkNWYCfiStoGf8Q/Hyx9r2ymaAN1Bf7SYYWUud59s3+xyQ0i9pxhKUILIT1ve3dgtfmjgN7ggRAUj89Flcgm0fsOCZKxlz/yVTYJViRxiRbGaHYcOxcJUdjVimu9iog9WFGIhGC8qIqf5dtQyjhaVAFYu5pxGqArVmqDBwCB+YomkpeCwy4zK4tIFjHeRd/kLacRGAroYKcTV7ob8ralK2X9wKuZz+rAoiUugNIuwRs1jNRW/V5d34cLEssQ0dSYeWxUJa6tyaCfWZKC6ht5XHvMG6B35fp+9tyF9hVFkBALWSI7AGCabpcaonyijVAZgQ78iJPhgJKrhvlOGMcbXtyyANfWA24pqsTb8OK7ZOU5dfuGD/lNvBblVx2+aCM49KsMDnHqjeftKLXX0zLhyDEVW9NUGq+ht2nkKfdmAP2wIWFh6+lUb6e/mLHiG0kdLGt0UCyfcC0/NRZMlnULLcmvwwgJz5RLf8vtSF6OA4AhpJ4V+7r6YQkhvn1WlDAvRKkezEV0sxL+ZBOlmiwS3AuiIFG6rQBSPoaSrKqmXcp5RTQDNu4krg9KNLqgaA3sGG6Tf78T57O4jPgQXn2XTcnHd83ezYzwy/75xt/DthskWcBeV1uT9aZefTDFiPtwemYklEeEBhOTllNWQ2NDI1MTY0NDJlNjcyNzEwOWFiMTlkZTAxMjU4M2Q5ZDNmNGVjZTFmZDE3ZTkyY2IwZmMyNjFhOTZhZUVDRFNBWCEDU4VWXUOxqBMiFJn00A8Xsso3AfLZoCYib0oSCfj2u5pnRWxHYW1hbFghA078tS5Sjwl/nPCk0gwKrug6ZnM3xkn5i5kcM4np18SGYU5ZAQCvgMZ5lbQXC+/v+NKkFBBTOkSTxvVrj3buBU9h6Rc3oLpZ/AfjFmTFKAYsKd6mk+G8vyw/BwoRBtkXZowNCkJTuYuNN1PRFLJuW6MrDBMH+SfQlZxBgQE9WLuKqNIwrxcZWdoUdeOG2Hc5Hdc3vPoCDA7DTyYeuczyzQLEJcH8pf9eImlcrhO81TW4IUp7Q6C6N3tew7TbIgLV8jGOTiSvtq+CdBROKB1vUOIbK8S/EKYpnqRjhs/UqQ4Qd1/kUOap1HaBwv5oaAG9yXWE9pyPaGpbgblRo9zHbCxpP5DQMxzmrv4Xb+gGiDhfPyDXZogm3pH9rMGWxGSxmtC+JlflYVNZAQBFNeWvQ/EqsSgXGiE+ws2dmf0VhoszCZamJnc94kqHbvEWvt7Nq1v72hcaFSILXu2YOBNzLyJAHIcPIqRUUQpS/R24dBz0XjPahli2qvr9YCF+CI172rEjjMDdEBoaDw9TW/r3wvPk+dZ8lozxi+sH/wa1gEboEiIA7x2tXXNztWnLLMX/RBR0AF+MtHnZ02x7lTrl9mAGUI+prfErRxFpCV8oT9ByqkcsJEmy5vAN7YjZ08FJMXu2lQg7yPkmUHZCdC3Q7n2glxhbaLddh2VzQ4tmzA7JoSYK7Uinv2TvLESgnPAvLyUd/PjyifFYyO0u/3IG9KqTcBeRnu/xRZuKYVRZAQBrndwDqX2uwbDP7LVyVIpahwVQHM+PCnSPYElskSyTadJIAZWGWJsFEt8QrHw3qiGrDBmPtw0ZAeydJorwwOJI6a9n7mY2udQRp5Sbw69NebTncMrvJ3G6bapZdOqsRjrtZqJMS7I6onkSBYXVkf8dEc9vX50xh7CKXbtUtEzg9OZOF5pOzJZme/DwmartLhc6dwRSw8f5iOCXAhrCFthY+YsvSkWTfmxmGJriMn79bFxiCHTZdfgjPke7X8sC37kx6H8saFWEHjvx4cRQW6yOooBABNBQM5Q1akM12sDQ+RUSqIeS3isZgKUkRW/+QUmj5x0aDGyki2lqBXGEDHk+pmJJRHhAZGVhMDYxN2QyNTA5NDE2NThjM2VjODFjNDc2Y2I5MTQ5MDk4MGRmMzMzMWMwNWNiYjQyM2RiNDMyNTg4MGMyNWVFQ0RTQVghA2zGqUm/o9BgqMKPm8fGW9//mhIY7jmeDeDT0O1AFz3eZ0VsR2FtYWxYIQMBwFHdUNO4i7V+fqANxPExviUZ9hoOxgVuYx4QOCfSa2FOWQEAvvo5S0n3+54sXEv1xG8RNGoztetRvuNmfkMhoGZ5n0VvcMhVtrOxpEb7m//hpClbEGjQUgzUkkhjqqdw1OkUwN1F05F30HYeBm/pEIqB9yYSgooojBhRNpxT9G8a0jEezwQdMf0APF+bdgxWHCHRR7ddlWqaswXZaSyPaAN47FY/TwxUj+YcNSICRn3d+i/OpVFY3y8oOBPRM2ZiVUrJc6KkF9Ol5joWQDxZEnWu9l8RwMbVASfiviKcUZ6oDztTuAtjYzBBNtZnxPiioeoTEjMr798nN4IHnYkvtsueM4GtD/KWAKuSgt1V3v3C2EV9lx+A2PrQfG35/iRYKNFwuWFTWQEAsRqNsKXAEQPZ/sDGFZRF8UhNgaMSMzOD9e0HlpZJxld36lMsKqAnDOsNvZZG9vRCd2E+7JcGGmCdvCB1ppTmocTuV7jZSzPHDLdPhdsvGIfTMAeBOm57bDwl+T/98oWgBmeVPuWONZZX3k0QAEmgwQVRbY+Zbo8jrBs4Cd+GiNvejhYNeqytXhTuHVrtCKkCdTNTWk3Xw00f4H1/qgqDb5Alxip3BCZfSGANm5J3MJNyw6kxOG4rScF2UQQaaZOBJVh6R0CKbpxqJ8ITV19tqfYCn7He8E0/TSpCB5Sq6BXt7GpbM798O7D5ik0fCejpA173MAjnhQ/TgqjcWrzHfGFUWQEAvRGHUNC/2lL4RqGUkI293GkENtuVeoBM6OsILiP0UFGxdjpbsL7ZaNJggsKQ2eplY5e2qhku+QGZGCWx6KlDUU/r6rIjXeZPUhkCC5xXS9k1cRhlAizN5fHRi+rsYsJunshJ1iBbjMoaSvr6QMslIXbAuvsDVyM3T8tA8Yhgg9MLybKIMPxauI9X3V9JsCDfr0cLObp1o5XHD4iCM0+DJrUM2lDLQSJl0EXHz80G5y1klZZ2b37vbpbfKYsyCY0yKhdWYxesJLuvGx0f31qJQd43pq8oW6901BXQB2kxWM9yKUCmN66DxMHKT6DAY0YuZWpS7xsPRQ9uamElZ9mUsaZiSUR4QGY3N2JhOWVkNTY4ZmQzNWNiNTM5YzYzYzkwNzk1Y2RmMTkwNDk2NmYwZjZlMjM5YzBkMzc1MmQ2ZjQxZmRhOTVlRUNEU0FYIQM6h+gxEBaldTf4xBkId715naCSTw/N3HV8BbKpZtXooGdFbEdhbWFsWCECIjUpJKIMg/ZK8S+KxBURbOIp+x+xb/PIyGl8RtGQJyFhTlkBAL7AzbbzL9ZFHaNAY+fPZBKb3z5PktU7abCy2Luf0RpOXxD5FPJm71mw+rw+GOcGHhC0Ny8osThlxK3QtGZ4HbXbeMGlPRuNS7SIcZneT+jMHJm4NEmsG4oi2ViF5aLNukr/o2HcYC2v/D3cHOdt/lW7fhrZ6280w7NDCnnecJv8nnhpbkEb853pxseqpkQ8EfAGV4YHwJZd8TnNviaJ8XdsCvzWmwNL70PTqh9bKVC7+F1wtidOk5LF3c3P/Y4uNZ0Oyx5KmdRnqWdGqHCFPp3FDITGsIPjb3VXWwYVWcKXsdHQTlkm4j+kT8+R7nsFLDHg3gcQlWD+d8hgWYhp76lhU1kBAFIAjqk8EypvbILuHO+TweMYhNmUy/Q0HiRosmvJgxpTGapkLnBECQ8LtvFa3o1/bbtghpMv7GyIGeT4TK6OWcnfmLSIAZaOmX+RjQSa51IUMu0xZHI+do9+B3DX9Ov712SY/vGg1UYuReQ7oynKa6bjxt0GaCQU1r6rqiKjItY1EZ8ZznJRwvoM0YJ7mTpLACHHm+HOikxp0/8NGHb1jqWtLfC3jrEHo5sR7P181aUt2gIdLblSiCVS/pMlB+wECjsUou+yLRDTJOUEbO8uohWn7uOmLTzOH6P5c5RQ7l+kBB0uLrEYQvhqAP7J81ALfyphfVRsOT/HGX4bGXn/M1phVFkBAKHvu1fiDVWgVT8t/7YVnCj8PdJknRcLfQ8sG03a9OgpgiuA7LiIFvBg66QuDSvLiRQw7h0lDubvjS7l9k3Tju3ojfzEqCdlC1IpKFzifwnXLUX22vDLFss48ln2oIteLZ9Spk/uxh52LGeksKNgFagjqQZfDFk8Yf4O6Ew67a0hMbc29LoaLS5Qy7izQvHnSGmGcE45+tWism452JYi8gk8sv0bJsErNrtg4lJzbGwOeUyT3vHTFnMMImdNBPTWag5Jn2vL5EToDAvNmm3l0dT8yIis52XlitXcAQF8jlbvN2UR6zpGOAqA3FoQCGrFcTuA2fEcRyZFFaAcrb27eOdocHJvdG9jb2wEZmRpZ2VzdFggbKIsfftnx89E0UnnW8Pv1isjTuKcZHV2T85v5X5LNNttcGFydGllc19zdGF0ZUEf", "LoadDistributionKey": "" } \ No newline at end of file diff --git a/node/pkg/internal/testutils/testdata/tss5/guardian3.json b/node/pkg/internal/testutils/testdata/tss5/guardian3.json index 45e22ffa15..6d826ad97a 100644 --- a/node/pkg/internal/testutils/testdata/tss5/guardian3.json +++ b/node/pkg/internal/testutils/testdata/tss5/guardian3.json @@ -1,74 +1,75 @@ { "MaxSignerTTL": 300000000000, "ChainsWithNoSelfReport": null, - "LeaderIdentity": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFb0ZmcGFCUWVWZ3BxYndJZEprRGc1L04xUmVDdgprYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReThoM3RhVWZBdUZscUZpSTMxcXl2VEdBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "LeaderIdentity": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWpIYk5WMzBvWTYrUnhTdHZBRm0wVHc1UG85Rwp3cTMxSFVlWS9tT1k2NmZCUmNjQkxyenhIREJUdWd1bjRnMVZNMXJRdWxhdDZHbnFaZHkzL3JHR05BPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "EcdsaChains": null, "Self": { "Pid": { - "ID": "5a9aa7cbc190be11a6afd8dc0b7000d43053c24b4181a2870191dd9b3206c1ec" + "ID": "a99e5d642516442e6727109ab19de012583d9d3f4ece1fd17e92cb0fc261a96a" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZklqTGpRMm0xaDIzS3pIT1ZZYmttR01NZW9yagpxVVpDWHBxcXNiMlFsQ0c5QkhJZnZlQzA3MjdhQzNPcllmT0I5cEZjRWJSMjVXY3dXNjhtK0dtNmlBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVh5Z0F3SUJBZ0lSQVBOUzYvdGNzdE9lZERlb2FpNWV0SDR3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJIeUl5NDBOcHRZZHR5c3h6bFdHNUpoakRIcUs0NmxHUWw2YXFyRzlrSlFodlFSeUg3M2d0Tzl1Mmd0enEySHoKZ2ZhUlhCRzBkdVZuTUZ1dkp2aHB1b2lqZ2JBd2dhMHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXRHaUlSQ212aFErdlZKOFNjUVlxM1FhSFp3akJNQmdOVkhSRUVSVEJEZ2pCMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV1YxWXkwd01pNW5ZM0F1ZEdWemRHNWxkQzU0YkdGaWN5NTRlWHFDQ1d4dlkyRnNhRzl6ZEljRQpmd0FBQVRBS0JnZ3Foa2pPUFFRREFnTkpBREJHQWlFQThCWjZ3UjB2K01UQUJDNXNDWk5oZGQzK3NuQmFMWUhqCjNVd3Q1eGZpK0h3Q0lRQ29qcnBSd0tEMXRIVXNCM3NLN3dpSjBjcGlEdVV2K0YvSHc1QWNFWml6OHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMTRveEJOVXVGSkhHMHlDWlJmeEN5UEtXNlVSUwoydlRma0ZsQVJmMGlxeEJ5UW5wMnRpNmNCWU5KZTJyTmhROVVyZ1N6bDc0L04rSFgrd2RoQUtFSWpRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9LQmp5TnNaSFV5SFRLYUJ3dXZoWHd3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJOZUtNUVRWTGhTUnh0TWdtVVg4UXNqeWx1bEVVdHIwMzVCWlFFWDlJcXNRY2tKNmRyWXVuQVdEU1h0cXpZVVAKVks0RXM1ZStQemZoMS9zSFlRQ2hDSTJqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUnpsMGhZc0NSaDArQXJUUDZkVHJXUktweWg1ekFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQkRzakd6bmZ6Z2E2YlVBa3NuS09YbwpMR1MzZzROLzd1bUZ0cW9EVHU4VUVBSWhBTWl0em43VmRISDBaL0NubnhGTmVPY21CYUFxNDB3cTg0SUpLRHVZClRIVW4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 2, "Hostname": "localhost", - "Port": 8803 + "Port": 9001 }, "IdentitiesKeep": { "Identities": [ { "Pid": { - "ID": "25d8a1908e659391e47177d68d7f8f807650b9cf4dc174f5d9bb07348e20c8bd" + "ID": "2e21941491bd37edbd4c66a608fa5b8d039405170b2782a2a6c7d58df87103e6" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFb0ZmcGFCUWVWZ3BxYndJZEprRGc1L04xUmVDdgprYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReThoM3RhVWZBdUZscUZpSTMxcXl2VEdBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxRENDQVh1Z0F3SUJBZ0lRUnRrMVFBOXdaUXl3WlNTaGRhZmswVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCm9GZnBhQlFlVmdwcWJ3SWRKa0RnNS9OMVJlQ3ZrYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReTgKaDN0YVVmQXVGbHFGaUkzMXF5dlRHS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZBL2lZTjh0MUlBS3hSRGN3WE5PaUU2ZTU1ZVNNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE4zTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUNid3I5eVRObTlTOHRYUlMwVnNvWGpyanljTXhCRUhzejYrCjlFOGV4SWI2QWlCK3NGbFc3Y05zUWVpcjVsMzc2bUtYU0R4RWNWRlJmNTBuYVB4TS9UY21YUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWpIYk5WMzBvWTYrUnhTdHZBRm0wVHc1UG85Rwp3cTMxSFVlWS9tT1k2NmZCUmNjQkxyenhIREJUdWd1bjRnMVZNMXJRdWxhdDZHbnFaZHkzL3JHR05BPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZXZ0F3SUJBZ0lSQUlpa0g5MDRrcm5jaDJVUXlzYUNxd3d3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJPWXgyelZkOUtHT3ZrY1VyYndCWnRFOE9UNlBSc0t0OVIxSG1QNWptT3Vud1VYSEFTNjg4Und3VTdvTHArSU4KVlROYTBMcFdyZWhwNm1YY3QvNnhoalNqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCU0hlWnF2Nm9kclVMKzB4ZnNvL1pmM3owcXJpakFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05IQURCRUFpQmZiOTdrci8zUWhORklFLzB0Vzh6QgpGZVNCSklRS0JXajRJQjByN2ZGazZRSWdST3R2UU9GTEVzbEJ3Zk1GSmtEK1RNVWFJVzd4d2Jvci9ZQ2NnazUyCnF5WT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 0, "Hostname": "localhost", - "Port": 8801 + "Port": 8998 }, { "Pid": { - "ID": "3d7def45331e096403a5ae0a896286cc677125cefcdd3480deb66c5f208306f2" + "ID": "808b0c83ac2b6d0a110576f50fe9499de64533d5c7fc18dd92b4e9047023b281" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaEFCbktobjBoVzRwSnpmVW5pdDVQUlhnWHhpSwpSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGNzbURER3pUNjVrOUdzUXcrb3RTdldBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRWnh6R3lNY2F3eUNyaUZ5R0htblJDREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmhBQm5LaG4waFc0cEp6ZlVuaXQ1UFJYZ1h4aUtSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGMKc21EREd6VDY1azlHc1F3K290U3ZXS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZNV3hmQ2xBOUFwUCtwb2ZVK1FBbUlLOFcxYytNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRaWFYzTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFENWhKbDU0QkJYRlp1NldKd0dFZi9Qd3czZXYvYTJoUFNYCngvN245MzVRUFFJZ05aV1dKQk9hQXJtU0xQbVdRNE1xQWRlbHo5ZEhtSjFWS3hxOWE5SFZFaGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTHY1NEwxeTkvYkJLMGRYT3V0KzQ0a0lTK1JUawpKS1kya3p0ekhZT3NvMHhjVW9SUTlaMG5lSHE5cnUzSFc2bVRJc0RiK3g3bnY3eDlCSWhEclVaU1R3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9OblVSTEQydmJVUXRSZzI5REs4cTh3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJDNytlQzljdmYyd1N0SFZ6cnJmdU9KQ0V2a1U1Q1NtTnBNN2N4MkRyS05NWEZLRVVQV2RKM2g2dmE3dHgxdXAKa3lMQTIvc2U1Nys4ZlFTSVE2MUdVaytqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXdubUlxUlV4YmV6aVBZMG1KWk00bTU3dmhjREFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQk56ZVBWSjBHU2ZXNjVjK011RDltaAphbWF6d01xL0Ezb3hQNHZWVDZ3alZnSWhBTG14SEY2OThDUEVPMnhXVE9aQWdOQ2NXSk9wbll2OWQ2enNDcndRCkV0STYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 1, "Hostname": "localhost", - "Port": 8804 + "Port": 9002 }, { "Pid": { - "ID": "5a9aa7cbc190be11a6afd8dc0b7000d43053c24b4181a2870191dd9b3206c1ec" + "ID": "a99e5d642516442e6727109ab19de012583d9d3f4ece1fd17e92cb0fc261a96a" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZklqTGpRMm0xaDIzS3pIT1ZZYmttR01NZW9yagpxVVpDWHBxcXNiMlFsQ0c5QkhJZnZlQzA3MjdhQzNPcllmT0I5cEZjRWJSMjVXY3dXNjhtK0dtNmlBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVh5Z0F3SUJBZ0lSQVBOUzYvdGNzdE9lZERlb2FpNWV0SDR3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJIeUl5NDBOcHRZZHR5c3h6bFdHNUpoakRIcUs0NmxHUWw2YXFyRzlrSlFodlFSeUg3M2d0Tzl1Mmd0enEySHoKZ2ZhUlhCRzBkdVZuTUZ1dkp2aHB1b2lqZ2JBd2dhMHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXRHaUlSQ212aFErdlZKOFNjUVlxM1FhSFp3akJNQmdOVkhSRUVSVEJEZ2pCMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV1YxWXkwd01pNW5ZM0F1ZEdWemRHNWxkQzU0YkdGaWN5NTRlWHFDQ1d4dlkyRnNhRzl6ZEljRQpmd0FBQVRBS0JnZ3Foa2pPUFFRREFnTkpBREJHQWlFQThCWjZ3UjB2K01UQUJDNXNDWk5oZGQzK3NuQmFMWUhqCjNVd3Q1eGZpK0h3Q0lRQ29qcnBSd0tEMXRIVXNCM3NLN3dpSjBjcGlEdVV2K0YvSHc1QWNFWml6OHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMTRveEJOVXVGSkhHMHlDWlJmeEN5UEtXNlVSUwoydlRma0ZsQVJmMGlxeEJ5UW5wMnRpNmNCWU5KZTJyTmhROVVyZ1N6bDc0L04rSFgrd2RoQUtFSWpRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9LQmp5TnNaSFV5SFRLYUJ3dXZoWHd3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJOZUtNUVRWTGhTUnh0TWdtVVg4UXNqeWx1bEVVdHIwMzVCWlFFWDlJcXNRY2tKNmRyWXVuQVdEU1h0cXpZVVAKVks0RXM1ZStQemZoMS9zSFlRQ2hDSTJqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUnpsMGhZc0NSaDArQXJUUDZkVHJXUktweWg1ekFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQkRzakd6bmZ6Z2E2YlVBa3NuS09YbwpMR1MzZzROLzd1bUZ0cW9EVHU4VUVBSWhBTWl0em43VmRISDBaL0NubnhGTmVPY21CYUFxNDB3cTg0SUpLRHVZClRIVW4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 2, "Hostname": "localhost", - "Port": 8803 + "Port": 9001 }, { "Pid": { - "ID": "91ef42eedb957418fa793f0a20fe48fbf1115d66397c6eebef4c619b17c662de" + "ID": "dea0617d250941658c3ec81c476cb91490980df3331c05cbb423db4325880c25" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFcmN2S01GZ2duM3pLelFxTklNL1dtQmE4dWFFaAptYldjbStLWUhhN1hQSmRkM0RrdGwyVzN0RXZsbHh2MHBXSVFuM0ZFMmJxbWtOVUNkckVxMVhSNVZ3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVgyZ0F3SUJBZ0lSQU1uSDFSenlZd1R5L3g0TWNsR1RncDB3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJLM0x5akJZSUo5OHlzMEtqU0RQMXBnV3ZMbWhJWm0xbkp2aW1CMnUxenlYWGR3NUxaZGx0N1JMNVpjYjlLVmkKRUo5eFJObTZwcERWQW5heEt0VjBlVmVqZ2JFd2dhNHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCVEljOUU0aTJTRlRMZnEwbGxpaUhoc09kS3JnREJOQmdOVkhSRUVSakJFZ2pGMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV0Z6YVdFdE1ESXVaMk53TG5SbGMzUnVaWFF1ZUd4aFluTXVlSGw2Z2dsc2IyTmhiR2h2YzNTSApCSDhBQUFFd0NnWUlLb1pJemowRUF3SURTQUF3UlFJZ05DR09rRlI2WTRlR2NiNE1FcnRuMnVoc29CaXFSdko0CkRiaTBrNUVxbkI4Q0lRQ2NLOVUySHZwUG4vbFc5UDhLcHFpUjg2cW9oN3Z3MWZKc3EzUmIrNjVjUVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFKy9XbmNVUXlpcktjRjJFOVI2MElBOW44bnMybQpXVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUVFd3ZIUHNiLzhEYUFPUzVLZWNjcDl3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRZkljMUF5S1h4R2RhQ3EvSU5zd2NaREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCisvV25jVVF5aXJLY0YyRTlSNjBJQTluOG5zMm1XVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUUKRXd2SFBzYi84RGFBT1M1S2VjY3A5Nk9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZFMDJGK09XeDBXUXMwOHJ1OUNZbEVmZUhaZGRNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRHdQNHdXTHhReDJGL08vNmoyaDRpWQpHRWppZjh6RS9PSkVmdnBLL1RNQkhBSWdWTGx0ZHZLMFkrenRCWmc2WEQraStxdDdPYTlFQm9qdndXQ2djMUxSCkc2VT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 3, "Hostname": "localhost", - "Port": 8800 + "Port": 8999 }, { "Pid": { - "ID": "9a9f8068c4541b3f6f147b927a2ab69a89b3050ba8a1ce8053fec2b6bf00818f" + "ID": "f77ba9ed568fd35cb539c63c90795cdf1904966f0f6e239c0d3752d6f41fda95" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaU5kdmR1TlAvUk8rWE9EaWl1eU1FQTNwbllybApkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFhIcVdNUHllSytDUERDTFhYYkExSXJRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRQ2FsMHBQeUM2SHJDQW8vM3pobHEwREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmlOZHZkdU5QL1JPK1hPRGlpdXlNRUEzcG5ZcmxkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFgKSHFXTVB5ZUsrQ1BEQ0xYWGJBMUlyYU9Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGREQ0UWtmUkd1dFJQcldheDBpQkVXclVLcFVNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE5sTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUZ0Mmk3SldkSkNzL3ZNemtoc2dOK1RVMVErREZ4UWhmVzR4CkNGRkdET2o2QWlFQWhyZmJ0b0JTOFRRWWwyeXRmS1VMNDlJRlptOFVOWFZuSHY0b0tWU1dwYlk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMWZoemptR1hhQjZlTG1TWTFTSG55RG5OYWs5SQpwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3RRYWJ0d1ZoaXRPbG40WWFIQjhWaWVRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRVlpyZnBZTzB0bzhuOWQ2eHlPaDdVVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCjFmaHpqbUdYYUI2ZUxtU1kxU0hueURuTmFrOUlwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3QKUWFidHdWaGl0T2xuNFlhSEI4VmllYU9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGZFB4eHhKRHRiVFdxeXhGRzNFSzl3ZHpQSlpNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRG1DRmg5akJIdENPM0NSenFPbEVLOApXU0lkTVJxVWp3K3h3MFpFc0JlVHNBSWdGVXl3SW02b3JPMEk2RmRXRHFJWEdndEo2OXFlVHgrblJDZkxldi9HCnV3Zz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 4, "Hostname": "localhost", - "Port": 8802 + "Port": 9000 } ] }, - "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVh5Z0F3SUJBZ0lSQVBOUzYvdGNzdE9lZERlb2FpNWV0SDR3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJIeUl5NDBOcHRZZHR5c3h6bFdHNUpoakRIcUs0NmxHUWw2YXFyRzlrSlFodlFSeUg3M2d0Tzl1Mmd0enEySHoKZ2ZhUlhCRzBkdVZuTUZ1dkp2aHB1b2lqZ2JBd2dhMHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXRHaUlSQ212aFErdlZKOFNjUVlxM1FhSFp3akJNQmdOVkhSRUVSVEJEZ2pCMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV1YxWXkwd01pNW5ZM0F1ZEdWemRHNWxkQzU0YkdGaWN5NTRlWHFDQ1d4dlkyRnNhRzl6ZEljRQpmd0FBQVRBS0JnZ3Foa2pPUFFRREFnTkpBREJHQWlFQThCWjZ3UjB2K01UQUJDNXNDWk5oZGQzK3NuQmFMWUhqCjNVd3Q1eGZpK0h3Q0lRQ29qcnBSd0tEMXRIVXNCM3NLN3dpSjBjcGlEdVV2K0YvSHc1QWNFWml6OHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", - "PrivateKey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ1B0MVhUenU3QzR3QTg5Ri8KdjVVN0RTR0I1NHBnZUFVKzBpakordUh0aDJhaFJBTkNBQVI4aU11TkRhYldIYmNyTWM1Vmh1U1lZd3g2aXVPcApSa0plbXFxeHZaQ1VJYjBFY2grOTRMVHZidG9MYzZ0aDg0SDJrVndSdEhibFp6QmJyeWI0YWJxSQotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", + "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9LQmp5TnNaSFV5SFRLYUJ3dXZoWHd3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJOZUtNUVRWTGhTUnh0TWdtVVg4UXNqeWx1bEVVdHIwMzVCWlFFWDlJcXNRY2tKNmRyWXVuQVdEU1h0cXpZVVAKVks0RXM1ZStQemZoMS9zSFlRQ2hDSTJqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUnpsMGhZc0NSaDArQXJUUDZkVHJXUktweWg1ekFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQkRzakd6bmZ6Z2E2YlVBa3NuS09YbwpMR1MzZzROLzd1bUZ0cW9EVHU4VUVBSWhBTWl0em43VmRISDBaL0NubnhGTmVPY21CYUFxNDB3cTg0SUpLRHVZClRIVW4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", + "PrivateKey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZzlGMitpTnl5WVpkN1Fjc1YKTHo3cnkzN3h2R2FTN2E2UzlaUUQxMkJWSXBXaFJBTkNBQVRYaWpFRTFTNFVrY2JUSUpsRi9FTEk4cGJwUkZMYQo5TitRV1VCRi9TS3JFSEpDZW5hMkxwd0ZnMGw3YXMyRkQxU3VCTE9Ydmo4MzRkZjdCMkVBb1FpTgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", "Threshold": 2, - "TSSSecrets": "M38DAQEKVFNTU2VjcmV0cwH/gAABAgEGQ29uZmlnAf+CAAEKVHJhY2tpbmdJRAH/hgAAAG3/gQMBAQZDb25maWcB/4IAAQYBAklEAQwAAQlUaHJlc2hvbGQBBAABDFByaXZhdGVTaGFyZQEQAAEJUHVibGljS2V5ARAAAQhDaGFpbktleQEKAAESVmVyaWZpY2F0aW9uU2hhcmVzAf+EAAAACv+DBgEC/4gAAAAO/4kEAQL/igABDAEQAABT/4UDAQEKVHJhY2tpbmdJRAH/hgABBAEIUHJvdG9jb2wBBgABBkRpZ2VzdAEKAAEMUGFydGllc1N0YXRlAQoAAQ1BdXhpbGlhcnlEYXRhAQoAAABp/4ABAUA1YTlhYTdjYmMxOTBiZTExYTZhZmQ4ZGMwYjcwMDBkNDMwNTNjMjRiNDE4MWEyODcwMTkxZGQ5YjMyMDZjMWVjAQQBFipjdXJ2ZS5TZWNwMjU2azFTY2FsYXL/iwYBAv+OAAAARv+MIgAg4VSmmhf7oUIJbhlnG4rlyqSGZC6KzCQBw6wzrOs1XUwBFSpjdXJ2ZS5TZWNwMjU2azFQb2ludP+PBgEC/5IAAAD+Ak//kCMAIQN0D12Lwg9elnLG6IZraRwZUuERZIueCha2DLM3QJ7beQL+AfqleEA5YTlmODA2OGM0NTQxYjNmNmYxNDdiOTI3YTJhYjY5YTg5YjMwNTBiYThhMWNlODA1M2ZlYzJiNmJmMDA4MThmWCECiEA6HYo23dxC8BQRby9VU2kiTYV2c5ay4Ykx0brijDp4QDI1ZDhhMTkwOGU2NTkzOTFlNDcxNzdkNjhkN2Y4ZjgwNzY1MGI5Y2Y0ZGMxNzRmNWQ5YmIwNzM0OGUyMGM4YmRYIQNr2dJyTNnl5cs5edUMxqGy7YY6f8z2iLsb4fH/282HonhAM2Q3ZGVmNDUzMzFlMDk2NDAzYTVhZTBhODk2Mjg2Y2M2NzcxMjVjZWZjZGQzNDgwZGViNjZjNWYyMDgzMDZmMlghA0zXeXqyudKeJY/ihdnJ7dcLPdrdgyuK3ykLv+o21pBqeEA1YTlhYTdjYmMxOTBiZTExYTZhZmQ4ZGMwYjcwMDBkNDMwNTNjMjRiNDE4MWEyODcwMTkxZGQ5YjMyMDZjMWVjWCECIlweu8KApFN9Q7ePbSRyKMM87Sgb4FKY24z8SiAkS+V4QDkxZWY0MmVlZGI5NTc0MThmYTc5M2YwYTIwZmU0OGZiZjExMTVkNjYzOTdjNmVlYmVmNGM2MTliMTdjNjYyZGVYIQIQhL38LOUzlM/elhf1u10/T53hHffeOU+f1bVE6CzpogABAQIBIGyiLH37Z8fPRNFJ51vD79YrI07inGR1dk/Ob+V+SzTbAQEfAAA=", + "TSSSecrets": "pWxGcm9zdENvbmZpZ3OmYklEeEBhOTllNWQ2NDI1MTY0NDJlNjcyNzEwOWFiMTlkZTAxMjU4M2Q5ZDNmNGVjZTFmZDE3ZTkyY2IwZmMyNjFhOTZhaVRocmVzaG9sZAJsUHJpdmF0ZVNoYXJlWCCVJ5MCFwrkdOTSkSC8cwOdINVh0ksy/M9+0Zw6aBcnfmlQdWJsaWNLZXlYIQMgmwxSOlsnUF7sl+bW0JGnzoRk75Qz13gnrGR0us2Dd2hDaGFpbktlefZyVmVyaWZpY2F0aW9uU2hhcmVzWQH6pXhAMmUyMTk0MTQ5MWJkMzdlZGJkNGM2NmE2MDhmYTViOGQwMzk0MDUxNzBiMjc4MmEyYTZjN2Q1OGRmODcxMDNlNlghAibf4ATSTtx75sso3xjG6K87uhnBvSMr/a4X536ek7YYeEA4MDhiMGM4M2FjMmI2ZDBhMTEwNTc2ZjUwZmU5NDk5ZGU2NDUzM2Q1YzdmYzE4ZGQ5MmI0ZTkwNDcwMjNiMjgxWCED/riMlLPuVnbgbqe++VfyPbduAzGe+D7X/Nn+MYSotGh4QGE5OWU1ZDY0MjUxNjQ0MmU2NzI3MTA5YWIxOWRlMDEyNTgzZDlkM2Y0ZWNlMWZkMTdlOTJjYjBmYzI2MWE5NmFYIQLFdK8PVkA/BsXyJp6VsJhtsQpVJeYTokKM7tU/ptwLqnhAZGVhMDYxN2QyNTA5NDE2NThjM2VjODFjNDc2Y2I5MTQ5MDk4MGRmMzMzMWMwNWNiYjQyM2RiNDMyNTg4MGMyNVghA8/viFcCpNKPxwce59GflbkqvV2hgnz/kQ5v+NFIKefVeEBmNzdiYTllZDU2OGZkMzVjYjUzOWM2M2M5MDc5NWNkZjE5MDQ5NjZmMGY2ZTIzOWMwZDM3NTJkNmY0MWZkYTk1WCECHjVEhBMr9BlMj4lvQR0LjYxzJS4L7+FghkfQ2E/mLoBsRWNkc2FDb25maWdzWRRRqWJJRHhAYTk5ZTVkNjQyNTE2NDQyZTY3MjcxMDlhYjE5ZGUwMTI1ODNkOWQzZjRlY2UxZmQxN2U5MmNiMGZjMjYxYTk2YWlUaHJlc2hvbGQCZUVDRFNBWCCqC/l3DuGMo5IpvbmailCGAMTtMoffIOmywXMiDC5pGGdFbEdhbWFsWCDxHUV0X9KpJOtKPU+FLEGQtt66+3pZSI60uBEy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", "LoadDistributionKey": "" } \ No newline at end of file diff --git a/node/pkg/internal/testutils/testdata/tss5/guardian4.json b/node/pkg/internal/testutils/testdata/tss5/guardian4.json index d970d4acdf..6e1898628a 100644 --- a/node/pkg/internal/testutils/testdata/tss5/guardian4.json +++ b/node/pkg/internal/testutils/testdata/tss5/guardian4.json @@ -1,74 +1,75 @@ { "MaxSignerTTL": 300000000000, "ChainsWithNoSelfReport": null, - "LeaderIdentity": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFb0ZmcGFCUWVWZ3BxYndJZEprRGc1L04xUmVDdgprYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReThoM3RhVWZBdUZscUZpSTMxcXl2VEdBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "LeaderIdentity": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWpIYk5WMzBvWTYrUnhTdHZBRm0wVHc1UG85Rwp3cTMxSFVlWS9tT1k2NmZCUmNjQkxyenhIREJUdWd1bjRnMVZNMXJRdWxhdDZHbnFaZHkzL3JHR05BPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "EcdsaChains": null, "Self": { "Pid": { - "ID": "3d7def45331e096403a5ae0a896286cc677125cefcdd3480deb66c5f208306f2" + "ID": "808b0c83ac2b6d0a110576f50fe9499de64533d5c7fc18dd92b4e9047023b281" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaEFCbktobjBoVzRwSnpmVW5pdDVQUlhnWHhpSwpSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGNzbURER3pUNjVrOUdzUXcrb3RTdldBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRWnh6R3lNY2F3eUNyaUZ5R0htblJDREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmhBQm5LaG4waFc0cEp6ZlVuaXQ1UFJYZ1h4aUtSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGMKc21EREd6VDY1azlHc1F3K290U3ZXS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZNV3hmQ2xBOUFwUCtwb2ZVK1FBbUlLOFcxYytNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRaWFYzTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFENWhKbDU0QkJYRlp1NldKd0dFZi9Qd3czZXYvYTJoUFNYCngvN245MzVRUFFJZ05aV1dKQk9hQXJtU0xQbVdRNE1xQWRlbHo5ZEhtSjFWS3hxOWE5SFZFaGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTHY1NEwxeTkvYkJLMGRYT3V0KzQ0a0lTK1JUawpKS1kya3p0ekhZT3NvMHhjVW9SUTlaMG5lSHE5cnUzSFc2bVRJc0RiK3g3bnY3eDlCSWhEclVaU1R3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9OblVSTEQydmJVUXRSZzI5REs4cTh3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJDNytlQzljdmYyd1N0SFZ6cnJmdU9KQ0V2a1U1Q1NtTnBNN2N4MkRyS05NWEZLRVVQV2RKM2g2dmE3dHgxdXAKa3lMQTIvc2U1Nys4ZlFTSVE2MUdVaytqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXdubUlxUlV4YmV6aVBZMG1KWk00bTU3dmhjREFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQk56ZVBWSjBHU2ZXNjVjK011RDltaAphbWF6d01xL0Ezb3hQNHZWVDZ3alZnSWhBTG14SEY2OThDUEVPMnhXVE9aQWdOQ2NXSk9wbll2OWQ2enNDcndRCkV0STYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 1, "Hostname": "localhost", - "Port": 8804 + "Port": 9002 }, "IdentitiesKeep": { "Identities": [ { "Pid": { - "ID": "25d8a1908e659391e47177d68d7f8f807650b9cf4dc174f5d9bb07348e20c8bd" + "ID": "2e21941491bd37edbd4c66a608fa5b8d039405170b2782a2a6c7d58df87103e6" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFb0ZmcGFCUWVWZ3BxYndJZEprRGc1L04xUmVDdgprYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReThoM3RhVWZBdUZscUZpSTMxcXl2VEdBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxRENDQVh1Z0F3SUJBZ0lRUnRrMVFBOXdaUXl3WlNTaGRhZmswVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCm9GZnBhQlFlVmdwcWJ3SWRKa0RnNS9OMVJlQ3ZrYjNZSk1xeWU3elBmUUQ2TThWMFpQb0JmV0MvSWlXb2xReTgKaDN0YVVmQXVGbHFGaUkzMXF5dlRHS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZBL2lZTjh0MUlBS3hSRGN3WE5PaUU2ZTU1ZVNNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE4zTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUNid3I5eVRObTlTOHRYUlMwVnNvWGpyanljTXhCRUhzejYrCjlFOGV4SWI2QWlCK3NGbFc3Y05zUWVpcjVsMzc2bUtYU0R4RWNWRlJmNTBuYVB4TS9UY21YUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNWpIYk5WMzBvWTYrUnhTdHZBRm0wVHc1UG85Rwp3cTMxSFVlWS9tT1k2NmZCUmNjQkxyenhIREJUdWd1bjRnMVZNMXJRdWxhdDZHbnFaZHkzL3JHR05BPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZXZ0F3SUJBZ0lSQUlpa0g5MDRrcm5jaDJVUXlzYUNxd3d3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJPWXgyelZkOUtHT3ZrY1VyYndCWnRFOE9UNlBSc0t0OVIxSG1QNWptT3Vud1VYSEFTNjg4Und3VTdvTHArSU4KVlROYTBMcFdyZWhwNm1YY3QvNnhoalNqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCU0hlWnF2Nm9kclVMKzB4ZnNvL1pmM3owcXJpakFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05IQURCRUFpQmZiOTdrci8zUWhORklFLzB0Vzh6QgpGZVNCSklRS0JXajRJQjByN2ZGazZRSWdST3R2UU9GTEVzbEJ3Zk1GSmtEK1RNVWFJVzd4d2Jvci9ZQ2NnazUyCnF5WT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 0, "Hostname": "localhost", - "Port": 8801 + "Port": 8998 }, { "Pid": { - "ID": "3d7def45331e096403a5ae0a896286cc677125cefcdd3480deb66c5f208306f2" + "ID": "808b0c83ac2b6d0a110576f50fe9499de64533d5c7fc18dd92b4e9047023b281" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaEFCbktobjBoVzRwSnpmVW5pdDVQUlhnWHhpSwpSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGNzbURER3pUNjVrOUdzUXcrb3RTdldBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRWnh6R3lNY2F3eUNyaUZ5R0htblJDREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmhBQm5LaG4waFc0cEp6ZlVuaXQ1UFJYZ1h4aUtSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGMKc21EREd6VDY1azlHc1F3K290U3ZXS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZNV3hmQ2xBOUFwUCtwb2ZVK1FBbUlLOFcxYytNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRaWFYzTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFENWhKbDU0QkJYRlp1NldKd0dFZi9Qd3czZXYvYTJoUFNYCngvN245MzVRUFFJZ05aV1dKQk9hQXJtU0xQbVdRNE1xQWRlbHo5ZEhtSjFWS3hxOWE5SFZFaGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFTHY1NEwxeTkvYkJLMGRYT3V0KzQ0a0lTK1JUawpKS1kya3p0ekhZT3NvMHhjVW9SUTlaMG5lSHE5cnUzSFc2bVRJc0RiK3g3bnY3eDlCSWhEclVaU1R3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9OblVSTEQydmJVUXRSZzI5REs4cTh3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJDNytlQzljdmYyd1N0SFZ6cnJmdU9KQ0V2a1U1Q1NtTnBNN2N4MkRyS05NWEZLRVVQV2RKM2g2dmE3dHgxdXAKa3lMQTIvc2U1Nys4ZlFTSVE2MUdVaytqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXdubUlxUlV4YmV6aVBZMG1KWk00bTU3dmhjREFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQk56ZVBWSjBHU2ZXNjVjK011RDltaAphbWF6d01xL0Ezb3hQNHZWVDZ3alZnSWhBTG14SEY2OThDUEVPMnhXVE9aQWdOQ2NXSk9wbll2OWQ2enNDcndRCkV0STYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 1, "Hostname": "localhost", - "Port": 8804 + "Port": 9002 }, { "Pid": { - "ID": "5a9aa7cbc190be11a6afd8dc0b7000d43053c24b4181a2870191dd9b3206c1ec" + "ID": "a99e5d642516442e6727109ab19de012583d9d3f4ece1fd17e92cb0fc261a96a" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZklqTGpRMm0xaDIzS3pIT1ZZYmttR01NZW9yagpxVVpDWHBxcXNiMlFsQ0c5QkhJZnZlQzA3MjdhQzNPcllmT0I5cEZjRWJSMjVXY3dXNjhtK0dtNmlBPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVh5Z0F3SUJBZ0lSQVBOUzYvdGNzdE9lZERlb2FpNWV0SDR3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJIeUl5NDBOcHRZZHR5c3h6bFdHNUpoakRIcUs0NmxHUWw2YXFyRzlrSlFodlFSeUg3M2d0Tzl1Mmd0enEySHoKZ2ZhUlhCRzBkdVZuTUZ1dkp2aHB1b2lqZ2JBd2dhMHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXRHaUlSQ212aFErdlZKOFNjUVlxM1FhSFp3akJNQmdOVkhSRUVSVEJEZ2pCMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV1YxWXkwd01pNW5ZM0F1ZEdWemRHNWxkQzU0YkdGaWN5NTRlWHFDQ1d4dlkyRnNhRzl6ZEljRQpmd0FBQVRBS0JnZ3Foa2pPUFFRREFnTkpBREJHQWlFQThCWjZ3UjB2K01UQUJDNXNDWk5oZGQzK3NuQmFMWUhqCjNVd3Q1eGZpK0h3Q0lRQ29qcnBSd0tEMXRIVXNCM3NLN3dpSjBjcGlEdVV2K0YvSHc1QWNFWml6OHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMTRveEJOVXVGSkhHMHlDWlJmeEN5UEtXNlVSUwoydlRma0ZsQVJmMGlxeEJ5UW5wMnRpNmNCWU5KZTJyTmhROVVyZ1N6bDc0L04rSFgrd2RoQUtFSWpRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9LQmp5TnNaSFV5SFRLYUJ3dXZoWHd3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJOZUtNUVRWTGhTUnh0TWdtVVg4UXNqeWx1bEVVdHIwMzVCWlFFWDlJcXNRY2tKNmRyWXVuQVdEU1h0cXpZVVAKVks0RXM1ZStQemZoMS9zSFlRQ2hDSTJqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUnpsMGhZc0NSaDArQXJUUDZkVHJXUktweWg1ekFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQkRzakd6bmZ6Z2E2YlVBa3NuS09YbwpMR1MzZzROLzd1bUZ0cW9EVHU4VUVBSWhBTWl0em43VmRISDBaL0NubnhGTmVPY21CYUFxNDB3cTg0SUpLRHVZClRIVW4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 2, "Hostname": "localhost", - "Port": 8803 + "Port": 9001 }, { "Pid": { - "ID": "91ef42eedb957418fa793f0a20fe48fbf1115d66397c6eebef4c619b17c662de" + "ID": "dea0617d250941658c3ec81c476cb91490980df3331c05cbb423db4325880c25" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFcmN2S01GZ2duM3pLelFxTklNL1dtQmE4dWFFaAptYldjbStLWUhhN1hQSmRkM0RrdGwyVzN0RXZsbHh2MHBXSVFuM0ZFMmJxbWtOVUNkckVxMVhSNVZ3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVgyZ0F3SUJBZ0lSQU1uSDFSenlZd1R5L3g0TWNsR1RncDB3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5UQTNNREV4TWpRME5EVmFHQTh5TURZMU1EY3pNVEV5TkRRMApOVm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJLM0x5akJZSUo5OHlzMEtqU0RQMXBnV3ZMbWhJWm0xbkp2aW1CMnUxenlYWGR3NUxaZGx0N1JMNVpjYjlLVmkKRUo5eFJObTZwcERWQW5heEt0VjBlVmVqZ2JFd2dhNHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCVEljOUU0aTJTRlRMZnEwbGxpaUhoc09kS3JnREJOQmdOVkhSRUVSakJFZ2pGMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV0Z6YVdFdE1ESXVaMk53TG5SbGMzUnVaWFF1ZUd4aFluTXVlSGw2Z2dsc2IyTmhiR2h2YzNTSApCSDhBQUFFd0NnWUlLb1pJemowRUF3SURTQUF3UlFJZ05DR09rRlI2WTRlR2NiNE1FcnRuMnVoc29CaXFSdko0CkRiaTBrNUVxbkI4Q0lRQ2NLOVUySHZwUG4vbFc5UDhLcHFpUjg2cW9oN3Z3MWZKc3EzUmIrNjVjUVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFKy9XbmNVUXlpcktjRjJFOVI2MElBOW44bnMybQpXVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUVFd3ZIUHNiLzhEYUFPUzVLZWNjcDl3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRZkljMUF5S1h4R2RhQ3EvSU5zd2NaREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCisvV25jVVF5aXJLY0YyRTlSNjBJQTluOG5zMm1XVkRwRERpRkQyeXRiSmd5NHZzV29XTXdEbC9CUWVHUWRLdUUKRXd2SFBzYi84RGFBT1M1S2VjY3A5Nk9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZFMDJGK09XeDBXUXMwOHJ1OUNZbEVmZUhaZGRNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRHdQNHdXTHhReDJGL08vNmoyaDRpWQpHRWppZjh6RS9PSkVmdnBLL1RNQkhBSWdWTGx0ZHZLMFkrenRCWmc2WEQraStxdDdPYTlFQm9qdndXQ2djMUxSCkc2VT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 3, "Hostname": "localhost", - "Port": 8800 + "Port": 8999 }, { "Pid": { - "ID": "9a9f8068c4541b3f6f147b927a2ab69a89b3050ba8a1ce8053fec2b6bf00818f" + "ID": "f77ba9ed568fd35cb539c63c90795cdf1904966f0f6e239c0d3752d6f41fda95" }, - "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFaU5kdmR1TlAvUk8rWE9EaWl1eU1FQTNwbllybApkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFhIcVdNUHllSytDUERDTFhYYkExSXJRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", - "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRQ2FsMHBQeUM2SHJDQW8vM3pobHEwREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmlOZHZkdU5QL1JPK1hPRGlpdXlNRUEzcG5ZcmxkVDNTR2ozR1ZCL2lHNy9BS0QyNlkybCtNQlZzcWlNNERvRFgKSHFXTVB5ZUsrQ1BEQ0xYWGJBMUlyYU9Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGREQ0UWtmUkd1dFJQcldheDBpQkVXclVLcFVNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE5sTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUZ0Mmk3SldkSkNzL3ZNemtoc2dOK1RVMVErREZ4UWhmVzR4CkNGRkdET2o2QWlFQWhyZmJ0b0JTOFRRWWwyeXRmS1VMNDlJRlptOFVOWFZuSHY0b0tWU1dwYlk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "KeyPEM": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFMWZoemptR1hhQjZlTG1TWTFTSG55RG5OYWs5SQpwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3RRYWJ0d1ZoaXRPbG40WWFIQjhWaWVRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", + "CertPem": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyakNDQVZTZ0F3SUJBZ0lRVlpyZnBZTzB0bzhuOWQ2eHlPaDdVVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPVEV4TURFek0xb1lEekl3TmpVeE1USTRNVEV3TVRNegpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCjFmaHpqbUdYYUI2ZUxtU1kxU0hueURuTmFrOUlwWFRvMHBPQ0dzbytuWGFnQTlINy8zbXN4aHRXRnNpMzlhY3QKUWFidHdWaGl0T2xuNFlhSEI4VmllYU9CaVRDQmhqQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZGZFB4eHhKRHRiVFdxeXhGRzNFSzl3ZHpQSlpNQ1VHQTFVZEVRUWVNQnlDQ1d4dlkyRnNhRzl6ZElJSmJHOWoKWVd4b2IzTjBod1IvQUFBQk1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRRG1DRmg5akJIdENPM0NSenFPbEVLOApXU0lkTVJxVWp3K3h3MFpFc0JlVHNBSWdGVXl3SW02b3JPMEk2RmRXRHFJWEdndEo2OXFlVHgrblJDZkxldi9HCnV3Zz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", "CommunicationIndex": 4, "Hostname": "localhost", - "Port": 8802 + "Port": 9000 } ] }, - "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxVENDQVh1Z0F3SUJBZ0lRWnh6R3lNY2F3eUNyaUZ5R0htblJDREFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1EY3dNVEV5TkRRME5Wb1lEekl3TmpVd056TXhNVEkwTkRRMQpXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCmhBQm5LaG4waFc0cEp6ZlVuaXQ1UFJYZ1h4aUtSeC80WDFHRnArOTcybmtoVVFmQ3ZDZFp0U3Zlb0lmaHNOVGMKc21EREd6VDY1azlHc1F3K290U3ZXS09Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZNV3hmQ2xBOUFwUCtwb2ZVK1FBbUlLOFcxYytNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRaWFYzTFRBeUxtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFENWhKbDU0QkJYRlp1NldKd0dFZi9Qd3czZXYvYTJoUFNYCngvN245MzVRUFFJZ05aV1dKQk9hQXJtU0xQbVdRNE1xQWRlbHo5ZEhtSjFWS3hxOWE5SFZFaGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "PrivateKey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ0lkTWxpZkROT1hiaDdwT0QKc21OeTFkSlVUQ3BURnhTdFVpcnp5amQrdGNlaFJBTkNBQVNFQUdjcUdmU0ZiaWtuTjlTZUszazlGZUJmR0lwSApIL2hmVVlXbjczdmFlU0ZSQjhLOEoxbTFLOTZnaCtHdzFOeXlZTU1iTlBybVQwYXhERDZpMUs5WQotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", + "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJyekNDQVZXZ0F3SUJBZ0lSQU9OblVSTEQydmJVUXRSZzI5REs4cTh3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamt4TVRBeE16TmFHQTh5TURZMU1URXlPREV4TURFegpNMW93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJDNytlQzljdmYyd1N0SFZ6cnJmdU9KQ0V2a1U1Q1NtTnBNN2N4MkRyS05NWEZLRVVQV2RKM2g2dmE3dHgxdXAKa3lMQTIvc2U1Nys4ZlFTSVE2MUdVaytqZ1lrd2dZWXdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXdubUlxUlV4YmV6aVBZMG1KWk00bTU3dmhjREFsQmdOVkhSRUVIakFjZ2dsc2IyTmhiR2h2YzNTQ0NXeHYKWTJGc2FHOXpkSWNFZndBQUFUQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpQk56ZVBWSjBHU2ZXNjVjK011RDltaAphbWF6d01xL0Ezb3hQNHZWVDZ3alZnSWhBTG14SEY2OThDUEVPMnhXVE9aQWdOQ2NXSk9wbll2OWQ2enNDcndRCkV0STYKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", + "PrivateKey": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ2gybVdYWGxMaVUrKzJnNEMKYVdZRlVaUUdodmlHalpROTd2THNQQ1htR0t5aFJBTkNBQVF1L25ndlhMMzlzRXJSMWM2NjM3amlRaEw1Rk9RawpwamFUTzNNZGc2eWpURnhTaEZEMW5TZDRlcjJ1N2NkYnFaTWl3TnY3SHVlL3ZIMEVpRU90UmxKUAotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", "Threshold": 2, - "TSSSecrets": "M38DAQEKVFNTU2VjcmV0cwH/gAABAgEGQ29uZmlnAf+CAAEKVHJhY2tpbmdJRAH/hgAAAG3/gQMBAQZDb25maWcB/4IAAQYBAklEAQwAAQlUaHJlc2hvbGQBBAABDFByaXZhdGVTaGFyZQEQAAEJUHVibGljS2V5ARAAAQhDaGFpbktleQEKAAESVmVyaWZpY2F0aW9uU2hhcmVzAf+EAAAACv+DBgEC/4gAAAAO/4kEAQL/igABDAEQAABT/4UDAQEKVHJhY2tpbmdJRAH/hgABBAEIUHJvdG9jb2wBBgABBkRpZ2VzdAEKAAEMUGFydGllc1N0YXRlAQoAAQ1BdXhpbGlhcnlEYXRhAQoAAABp/4ABAUAzZDdkZWY0NTMzMWUwOTY0MDNhNWFlMGE4OTYyODZjYzY3NzEyNWNlZmNkZDM0ODBkZWI2NmM1ZjIwODMwNmYyAQQBFipjdXJ2ZS5TZWNwMjU2azFTY2FsYXL/iwYBAv+OAAAARv+MIgAgJFtyKlIJu0e0igmUKHunUTBWAuNuM/RdFr75LLbiMn8BFSpjdXJ2ZS5TZWNwMjU2azFQb2ludP+PBgEC/5IAAAD+Ak//kCMAIQN0D12Lwg9elnLG6IZraRwZUuERZIueCha2DLM3QJ7beQL+AfqleEA1YTlhYTdjYmMxOTBiZTExYTZhZmQ4ZGMwYjcwMDBkNDMwNTNjMjRiNDE4MWEyODcwMTkxZGQ5YjMyMDZjMWVjWCECIlweu8KApFN9Q7ePbSRyKMM87Sgb4FKY24z8SiAkS+V4QDkxZWY0MmVlZGI5NTc0MThmYTc5M2YwYTIwZmU0OGZiZjExMTVkNjYzOTdjNmVlYmVmNGM2MTliMTdjNjYyZGVYIQIQhL38LOUzlM/elhf1u10/T53hHffeOU+f1bVE6CzponhAOWE5ZjgwNjhjNDU0MWIzZjZmMTQ3YjkyN2EyYWI2OWE4OWIzMDUwYmE4YTFjZTgwNTNmZWMyYjZiZjAwODE4ZlghAohAOh2KNt3cQvAUEW8vVVNpIk2FdnOWsuGJMdG64ow6eEAyNWQ4YTE5MDhlNjU5MzkxZTQ3MTc3ZDY4ZDdmOGY4MDc2NTBiOWNmNGRjMTc0ZjVkOWJiMDczNDhlMjBjOGJkWCEDa9nSckzZ5eXLOXnVDMahsu2GOn/M9oi7G+Hx/9vNh6J4QDNkN2RlZjQ1MzMxZTA5NjQwM2E1YWUwYTg5NjI4NmNjNjc3MTI1Y2VmY2RkMzQ4MGRlYjY2YzVmMjA4MzA2ZjJYIQNM13l6srnSniWP4oXZye3XCz3a3YMrit8pC7/qNtaQagABAQIBIGyiLH37Z8fPRNFJ51vD79YrI07inGR1dk/Ob+V+SzTbAQEfAAA=", + "TSSSecrets": "pWxGcm9zdENvbmZpZ3OmYklEeEA4MDhiMGM4M2FjMmI2ZDBhMTEwNTc2ZjUwZmU5NDk5ZGU2NDUzM2Q1YzdmYzE4ZGQ5MmI0ZTkwNDcwMjNiMjgxaVRocmVzaG9sZAJsUHJpdmF0ZVNoYXJlWCC42qxoR77lkMk0wOj/AJln2tytRUMPbeMMQCBWY0D2p2lQdWJsaWNLZXlYIQMgmwxSOlsnUF7sl+bW0JGnzoRk75Qz13gnrGR0us2Dd2hDaGFpbktlefZyVmVyaWZpY2F0aW9uU2hhcmVzWQH6pXhAZjc3YmE5ZWQ1NjhmZDM1Y2I1MzljNjNjOTA3OTVjZGYxOTA0OTY2ZjBmNmUyMzljMGQzNzUyZDZmNDFmZGE5NVghAh41RIQTK/QZTI+Jb0EdC42McyUuC+/hYIZH0NhP5i6AeEAyZTIxOTQxNDkxYmQzN2VkYmQ0YzY2YTYwOGZhNWI4ZDAzOTQwNTE3MGIyNzgyYTJhNmM3ZDU4ZGY4NzEwM2U2WCECJt/gBNJO3HvmyyjfGMborzu6GcG9Iyv9rhfnfp6Tthh4QDgwOGIwYzgzYWMyYjZkMGExMTA1NzZmNTBmZTk0OTlkZTY0NTMzZDVjN2ZjMThkZDkyYjRlOTA0NzAyM2IyODFYIQP+uIyUs+5WduBup775V/I9t24DMZ74Ptf82f4xhKi0aHhAYTk5ZTVkNjQyNTE2NDQyZTY3MjcxMDlhYjE5ZGUwMTI1ODNkOWQzZjRlY2UxZmQxN2U5MmNiMGZjMjYxYTk2YVghAsV0rw9WQD8GxfImnpWwmG2xClUl5hOiQozu1T+m3AuqeEBkZWEwNjE3ZDI1MDk0MTY1OGMzZWM4MWM0NzZjYjkxNDkwOTgwZGYzMzMxYzA1Y2JiNDIzZGI0MzI1ODgwYzI1WCEDz++IVwKk0o/HBx7n0Z+VuSq9XaGCfP+RDm/40Ugp59VsRWNkc2FDb25maWdzWRRRqWJJRHhAODA4YjBjODNhYzJiNmQwYTExMDU3NmY1MGZlOTQ5OWRlNjQ1MzNkNWM3ZmMxOGRkOTJiNGU5MDQ3MDIzYjI4MWlUaHJlc2hvbGQCZUVDRFNBWCDWNONerLcNGFPypnux2ei9rSYM4bJekXheKk/JV6nzEGdFbEdhbWFsWCCRVrsdv3YpqGfklv2EWjWPSzA+n2EuT3RJaIRS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", "LoadDistributionKey": "" } \ No newline at end of file diff --git a/node/pkg/node/node_test.go b/node/pkg/node/node_test.go index 7a1fad3e2e..4d7c355598 100644 --- a/node/pkg/node/node_test.go +++ b/node/pkg/node/node_test.go @@ -51,6 +51,7 @@ import ( nodev1 "github.com/certusone/wormhole/node/pkg/proto/node/v1" eth_common "github.com/ethereum/go-ethereum/common" + tsscommon "github.com/xlabs/tss-common" ) const LOCAL_RPC_PORTRANGE_START = 10000 @@ -267,7 +268,7 @@ func mockGuardianRunnable(t testing.TB, gs []*mockGuardian, mockGuardianIndex ui GuardianOptionAlternatePublisher([]byte{}, []string{}), // disable alternate publisher GuardianOptionProcessor(networkID), - GuardianOptionTSSNetwork(fmt.Sprintf("[::]:%d", cfg.tssNetworkPort)), + GuardianOptionTSSNetwork(), // Keep this last so that all of its dependencies are met. GuardianOptionP2P(gs[mockGuardianIndex].p2pKey, networkID, bootstrapPeers, nodeName, informOnNewVAAs, false, cfg.p2pPort, "", 0, "", "", false, []string{}, []string{}, []string{}), @@ -942,7 +943,7 @@ func pollApiAndInspectVaa(t *testing.T, ctx context.Context, msg *common.Message if !testCase.prePopulateVAA { // if the VAA is pre-populated with a dummy, then this is expected to fail var verificationPublic vaa.PublicKeys = gsAddrList if testCase.tssVaaVersionChecks { - verificationPublic, err = gs[0].tssEngine.GetPublicKey() + verificationPublic, err = gs[0].tssEngine.GetPublicKey(tsscommon.ProtocolFROSTSign) assert.NoError(t, err) } diff --git a/node/pkg/node/options.go b/node/pkg/node/options.go index e73c1dbb09..6d908f4eb9 100644 --- a/node/pkg/node/options.go +++ b/node/pkg/node/options.go @@ -662,15 +662,13 @@ func GuardianOptionProcessor(networkId string) *GuardianOption { }} } -func GuardianOptionTSSNetwork( - socketPath string, -) *GuardianOption { +func GuardianOptionTSSNetwork() *GuardianOption { serviceName := "tsscomm" return &GuardianOption{ name: serviceName, dependencies: []string{"processor"}, // TODO: I think it is dependant on it, since the TSS passes its signatures to the processor. f: func(_ context.Context, logger *zap.Logger, g *G) error { - srvr, err := tsscomm.NewServer(socketPath, logger.Named(serviceName), g.tssEngine) + srvr, err := tsscomm.NewServer(logger.Named(serviceName), g.tssEngine) if err != nil { return fmt.Errorf("failed to create tsscomm server: %w", err) } diff --git a/node/pkg/processor/observation.go b/node/pkg/processor/observation.go index f7ba1174cc..456accce26 100644 --- a/node/pkg/processor/observation.go +++ b/node/pkg/processor/observation.go @@ -7,6 +7,8 @@ import ( "time" node_common "github.com/certusone/wormhole/node/pkg/common" + tsscommon "github.com/xlabs/tss-common" + "github.com/certusone/wormhole/node/pkg/db" "github.com/mr-tron/base58" "github.com/prometheus/client_golang/prometheus" @@ -340,7 +342,7 @@ func (p *Processor) handleInboundSignedVAAWithQuorum(m *gossipv1.SignedVAAWithQu var verificationPublic vaa.PublicKeys = keys if v.Version == vaa.TSSVaaVersion { - verificationPublic, err = p.thresholdSigner.GetPublicKey() + verificationPublic, err = p.thresholdSigner.GetPublicKey(tsscommon.ProtocolFROSTSign) if err != nil { p.logger.Warn("dropping SignedVAAWithQuorum message since we failed to get public key for TSS VAA", zap.String("message_id", v.MessageID()), diff --git a/node/pkg/tss/api.go b/node/pkg/tss/api.go index b316755fd1..85bce9c18f 100644 --- a/node/pkg/tss/api.go +++ b/node/pkg/tss/api.go @@ -61,8 +61,10 @@ type Signer interface { BeginAsyncThresholdSigningProtocol(vaaDigest []byte, chainID vaa.ChainID, vaaconsistency uint8) error ProducedSignature() <-chan *common.SignatureData - GetPublicKey() (curve.Point, error) - GetEthAddress() (ethcommon.Address, error) + // Since signatures may be produced for different protocols (FROST, CMP), + // we need to be able to query the public key and the address for each protocol. + GetPublicKey(common.ProtocolType) (curve.Point, error) + GetEthAddress(common.ProtocolType) (ethcommon.Address, error) // tells the maximal duration one might wait on a signature to be produced // (realisticly, it should be produced within a few seconds). diff --git a/node/pkg/tss/cnfgs.go b/node/pkg/tss/cnfgs.go index b6d174b7c8..ebe6c515f4 100644 --- a/node/pkg/tss/cnfgs.go +++ b/node/pkg/tss/cnfgs.go @@ -5,27 +5,20 @@ import ( "crypto/ecdsa" "crypto/tls" "crypto/x509" - "encoding/gob" "encoding/json" "fmt" "os" "github.com/certusone/wormhole/node/pkg/tss/internal" ethcommon "github.com/ethereum/go-ethereum/common" + "github.com/fxamacker/cbor/v2" "github.com/xlabs/multi-party-sig/pkg/math/curve" + "github.com/xlabs/multi-party-sig/protocols/cmp" "github.com/xlabs/multi-party-sig/protocols/frost" common "github.com/xlabs/tss-common" "github.com/xlabs/tss-lib/v2/party" ) -func init() { - // gob registrations for possible curve.Scalar/curve.Point implementations. - // gob has trouble unmarshalling interface types without a one to one mapping to a concrete type. - gob.Register(&curve.Secp256k1Scalar{}) - gob.Register(&curve.Secp256k1Point{}) - gob.Register(&party.TSSSecrets{}) -} - func (s *GuardianStorage) unmarshalFromJSON(storageData []byte) error { if err := json.Unmarshal(storageData, &s); err != nil { return err @@ -51,26 +44,74 @@ func (s *GuardianStorage) attemptLoadTssSecrets() error { return nil } - buff := bytes.NewBuffer(s.TSSSecrets) - dec := gob.NewDecoder(buff) + cnf, err := UnmarshalTssSecrets(s.TSSSecrets) + if err != nil { + return err + } - cnf := &party.TSSSecrets{ - Config: frost.EmptyConfig(curve.Secp256k1{}), + if err := s.storeFrostConf(cnf); err != nil { + return err + } + + if err := s.storeCmpConf(cnf); err != nil { + return err + } + + return nil +} + +func (st *GuardianStorage) storeCmpConf(cnf *party.TSSSecrets) error { + if cnf == nil { + return fmt.Errorf("TSSSecrets is nil") + } + + if len(st.Configurations.EcdsaChains) == 0 { + return nil // we do not need to load cmp config since there are no chains that use ecdsa. + } + + // also validates conf != nil. + if !cnf.EcdsaConfigs.ValidateBasic() { + return fmt.Errorf("invalid ecdsa configs in stored TSSSecrets") + } + + st.ecdsaconf = cnf.EcdsaConfigs + + return nil +} + +func (s *GuardianStorage) storeFrostConf(cnf *party.TSSSecrets) error { + if cnf == nil { + return fmt.Errorf("TSSSecrets is nil") } - if err := dec.Decode(cnf); err != nil { - return fmt.Errorf("error unmarshalling TSSSecrets: %v", err) + // also validates conf != nil. + if !cnf.FrostConfigs.ValidateBasic() { + return fmt.Errorf("invalid frost configs in stored TSSSecrets") } - if len(cnf.VerificationShares.Points) != len(s.IdentitiesKeep.Identities) { + if len(cnf.FrostConfigs.VerificationShares.Points) != len(s.IdentitiesKeep.Identities) { return fmt.Errorf("number of verification shares does not match number of guardians") } - s.frostconf = cnf.Config + s.frostconf = cnf.FrostConfigs return nil } +func UnmarshalTssSecrets(TSSsecrets []byte) (*party.TSSSecrets, error) { + cnf := &party.TSSSecrets{ + FrostConfigs: frost.EmptyConfig(curve.Secp256k1{}), + EcdsaConfigs: cmp.EmptyConfig(curve.Secp256k1{}), + TrackingID: &common.TrackingID{}, + } + + if err := cbor.Unmarshal(TSSsecrets, cnf); err != nil { + return nil, fmt.Errorf("error unmarshalling TSSSecrets: %v", err) + } + + return cnf, nil +} + func (s *GuardianStorage) load(storagePath string) error { if s == nil { return fmt.Errorf("GuardianStorage is nil") diff --git a/node/pkg/tss/comm/runnable.go b/node/pkg/tss/comm/runnable.go index f26aae1393..17dd297624 100644 --- a/node/pkg/tss/comm/runnable.go +++ b/node/pkg/tss/comm/runnable.go @@ -4,8 +4,10 @@ import ( "context" "crypto/tls" "crypto/x509" + "errors" "fmt" "net" + "strconv" tsscommv1 "github.com/certusone/wormhole/node/pkg/proto/tsscomm/v1" "github.com/certusone/wormhole/node/pkg/tss" @@ -27,7 +29,41 @@ type DirectLink interface { WaitForConnections(ctx context.Context) error } -func NewServer(socketPath string, logger *zap.Logger, tssMessenger tss.ReliableMessenger) (DirectLink, error) { +func NewServer(logger *zap.Logger, tssMessenger tss.ReliableMessenger) (DirectLink, error) { + cert := tssMessenger.GetCertificate() + if cert == nil { + return nil, errors.New("tssMessenger returned nil certificate") + } + + selfID, err := tssMessenger.FetchIdentity(cert.Leaf) + if err != nil { + return nil, fmt.Errorf("failed to fetch self identity from tssMessenger: %w", err) + } + + port := selfID.Port + if port == 0 { + p, err := strconv.Atoi(tss.DefaultPort) + if err != nil { + return nil, fmt.Errorf("failed to parse default port: %w", err) + } + + port = p + } + + return newServer(fmt.Sprintf("[::]:%d", port), logger, tssMessenger) +} + +func newServer(socketPath string, logger *zap.Logger, tssMessenger tss.ReliableMessenger) (DirectLink, error) { + if socketPath == "" { + return nil, errors.New("can't create DirectLink server: socketPath is empty") + } + if logger == nil { + return nil, errors.New("can't create DirectLink server: logger is nil") + } + if tssMessenger == nil { + return nil, errors.New("can't create DirectLink server: tssMessenger is nil") + } + peers := tssMessenger.GetPeers() partyIds := make([]*tss.Identity, len(peers)) peerToCert := make(map[string]*x509.Certificate, len(peers)) diff --git a/node/pkg/tss/comm/server_test.go b/node/pkg/tss/comm/server_test.go index c4945f9fd5..58cf7a077a 100644 --- a/node/pkg/tss/comm/server_test.go +++ b/node/pkg/tss/comm/server_test.go @@ -50,6 +50,7 @@ func (m *mockTssMessageHandler) FetchIdentity(*x509.Certificate) (*tss.Identity, func (m *mockTssMessageHandler) ProducedOutputMessages() <-chan tss.Sendable { return m.chn } + func (m *mockTssMessageHandler) HandleIncomingTssMessage(msg tss.Incoming) { fmt.Println("received message from", msg.GetSource()) } @@ -85,7 +86,7 @@ func TestTLSConnectAndRedial(t *testing.T) { en, err := _loadGuardians(2) a.NoError(err) - tmpSrvr, err := NewServer(workingServerSock, supervisor.Logger(ctx), &mockTssMessageHandler{ + tmpSrvr, err := newServer(workingServerSock, supervisor.Logger(ctx), &mockTssMessageHandler{ chn: nil, selfCert: en[0].GetCertificate(), // connect to no one. @@ -117,7 +118,7 @@ func TestTLSConnectAndRedial(t *testing.T) { a.NoError(err) msgChan := make(chan tss.Sendable) - srvr, err := NewServer("localhost:5930", supervisor.Logger(ctx), &mockTssMessageHandler{ + srvr, err := newServer("localhost:5930", supervisor.Logger(ctx), &mockTssMessageHandler{ chn: msgChan, selfCert: en[1].GetCertificate(), peersToConnectTo: []*x509.Certificate{serverCert}, // will ask to fetch each peer (and return the below peerId) @@ -167,7 +168,7 @@ func TestRelentlessReconnections(t *testing.T) { a.NoError(err) msgChan := make(chan tss.Sendable) - srvr, err := NewServer("localhost:5930", supervisor.Logger(ctx), &mockTssMessageHandler{ + srvr, err := newServer("localhost:5930", supervisor.Logger(ctx), &mockTssMessageHandler{ chn: msgChan, selfCert: en[1].GetCertificate(), peersToConnectTo: []*x509.Certificate{serverCert}, // will ask to fetch each peer (and return the below peerId) @@ -184,7 +185,7 @@ func TestRelentlessReconnections(t *testing.T) { // setting up server dailer and sender srv.run() - tmpSrvr, err := NewServer(workingServerSock, supervisor.Logger(ctx), &mockTssMessageHandler{ + tmpSrvr, err := newServer(workingServerSock, supervisor.Logger(ctx), &mockTssMessageHandler{ chn: nil, selfCert: en[0].GetCertificate(), // connect to no one. @@ -259,7 +260,7 @@ func TestNonBlockedBroadcast(t *testing.T) { donechns := make([]chan struct{}, 2) // set servers up. for i := 0; i < 2; i++ { - tmpSrvr, err := NewServer(workingServers[i], supervisor.Logger(ctx), &mockTssMessageHandler{ + tmpSrvr, err := newServer(workingServers[i], supervisor.Logger(ctx), &mockTssMessageHandler{ chn: nil, selfCert: en[i].GetCertificate(), peersToConnectTo: en[0].GetPeers(), // Give the peer a certificate. @@ -309,7 +310,7 @@ func TestNonBlockedBroadcast(t *testing.T) { en[2].GuardianStorage.SetInnerFields() msgChan := make(chan tss.Sendable) - srvr, err := NewServer("localhost:5930", supervisor.Logger(ctx), &tssMockJustForMessageGeneration{ + srvr, err := newServer("localhost:5930", supervisor.Logger(ctx), &tssMockJustForMessageGeneration{ ReliableMessenger: en[2], chn: msgChan, }) @@ -529,7 +530,7 @@ func TestNotAcceptNonCAs(t *testing.T) { defer cancel() ctx = testutils.MakeSupervisorContext(ctx) - tmp, err := NewServer(workingServerSock, supervisor.Logger(ctx), &mockTssMessageHandler{ + tmp, err := newServer(workingServerSock, supervisor.Logger(ctx), &mockTssMessageHandler{ chn: nil, selfCert: en[0].GetCertificate(), // connect to no one. @@ -620,7 +621,7 @@ func TestDialWithDefaultPort(t *testing.T) { listenerServerPath := "localhost:" + tss.DefaultPort // set up server that only listent and aren't able to connect to anyone. - listenerServer, err := NewServer(listenerServerPath, supervisor.Logger(ctx), &mockTssMessageHandler{ + listenerServer, err := newServer(listenerServerPath, supervisor.Logger(ctx), &mockTssMessageHandler{ chn: nil, selfCert: listenerEngine.GetCertificate(), // the listening server will expect this cert to connect with. @@ -665,7 +666,7 @@ func TestDialWithDefaultPort(t *testing.T) { a.NoError(communicatingEngine.GuardianStorage.SetInnerFields()) msgChan := make(chan tss.Sendable) - communicator, err := NewServer("localhost:5930", supervisor.Logger(ctx), &tssMockJustForMessageGeneration{ + communicator, err := newServer("localhost:5930", supervisor.Logger(ctx), &tssMockJustForMessageGeneration{ ReliableMessenger: communicatingEngine, chn: msgChan, }) @@ -750,7 +751,7 @@ func TestDialWithDefaultPortDeliverCorrectSrc(t *testing.T) { senderEngine.GuardianStorage.SetInnerFields() incomingDataChan := make(chan tss.Incoming) - listenerServer, err := NewServer(streamReceiverPath, supervisor.Logger(ctx), + listenerServer, err := newServer(streamReceiverPath, supervisor.Logger(ctx), &mockJustHandleIncomingMessage{ ReliableMessenger: streamReceiverEngine, receivedData: incomingDataChan, @@ -772,7 +773,7 @@ func TestDialWithDefaultPortDeliverCorrectSrc(t *testing.T) { go gserver.Serve(l) msgChan := make(chan tss.Sendable) - sender, err := NewServer("nonsensePort", supervisor.Logger(ctx), &tssMockJustForMessageGeneration{ + sender, err := newServer("nonsensePort", supervisor.Logger(ctx), &tssMockJustForMessageGeneration{ ReliableMessenger: senderEngine, chn: msgChan, }) @@ -844,7 +845,7 @@ func TestConnectingToServers(t *testing.T) { e.GuardianStorage.SetInnerFields() e.Start(ctx) - s, err := NewServer(e.GuardianStorage.Self.NetworkName(), supervisor.Logger(ctx), &mockProduceOutputMessages{ + s, err := newServer(e.GuardianStorage.Self.NetworkName(), supervisor.Logger(ctx), &mockProduceOutputMessages{ mockJustHandleIncomingMessage: mockJustHandleIncomingMessage{ ReliableMessenger: e, receivedData: incomingMsgChn[i], @@ -891,7 +892,7 @@ func TestDetectConnectionsDone(t *testing.T) { en, err := _loadGuardians(2) a.NoError(err) - tmpSrvr, err := NewServer(workingServerSock, supervisor.Logger(ctx), &mockTssMessageHandler{ + tmpSrvr, err := newServer(workingServerSock, supervisor.Logger(ctx), &mockTssMessageHandler{ chn: nil, selfCert: en[0].GetCertificate(), // connect to no one. @@ -923,7 +924,7 @@ func TestDetectConnectionsDone(t *testing.T) { a.NoError(err) msgChan := make(chan tss.Sendable) - srvr, err := NewServer("localhost:5930", supervisor.Logger(ctx), &mockTssMessageHandler{ + srvr, err := newServer("localhost:5930", supervisor.Logger(ctx), &mockTssMessageHandler{ chn: msgChan, selfCert: en[1].GetCertificate(), peersToConnectTo: []*x509.Certificate{serverCert}, // will ask to fetch each peer (and return the below peerId) @@ -961,3 +962,40 @@ func TestDetectConnectionsDone(t *testing.T) { case <-tstServer.done: } } + +func TestSocketPathCreation(t *testing.T) { + a := require.New(t) + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + defer cancel() + ctx = testutils.MakeSupervisorContext(ctx) + + en, err := _loadGuardians(2) + a.NoError(err) + + en[0].Self.Port = 1233456 + en[0].GuardianStorage.Identities[en[0].Self.CommunicationIndex].Port = 1233456 + + tmpSrvr, err := NewServer(supervisor.Logger(ctx), en[0]) + a.NoError(err) + + a.Equal(fmt.Sprintf("[::]:%d", en[0].Self.Port), tmpSrvr.(*server).socketPath) + + // now checking correct behavior when port is 0 + en[1].Self.Port = 0 + en[1].GuardianStorage.Identities[en[1].Self.CommunicationIndex].Port = 0 + tmpSrvr2, err := NewServer(supervisor.Logger(ctx), en[1]) + a.NoError(err) + a.Equal(fmt.Sprintf("[::]:%s", tss.DefaultPort), tmpSrvr2.(*server).socketPath) + + // For coverage completness we Invoke Run and close the server. + + go tmpSrvr2.Run(ctx) + time.Sleep(time.Second * 1) + + cancel() + select { + case <-ctx.Done(): + case <-time.After(time.Second * 2): + t.Fatal("server run did not stop after context cancel") + } +} diff --git a/node/pkg/tss/fault_tolerance.go b/node/pkg/tss/fault_tolerance.go index 74c418feac..ff66c4ce80 100644 --- a/node/pkg/tss/fault_tolerance.go +++ b/node/pkg/tss/fault_tolerance.go @@ -9,6 +9,8 @@ import ( "go.uber.org/zap" ) +// TODO: Consider removing this mechanism. Not used anymore, and adds considerable complexity. + // This file represents tracking mechanism for signatures, their trackingID, and who is currently working on them. // It provide the Engine with information, for instance whether if the guardian saw the digest already. // diff --git a/node/pkg/tss/implementation.go b/node/pkg/tss/implementation.go index 3b8307cee3..ba15a2d446 100644 --- a/node/pkg/tss/implementation.go +++ b/node/pkg/tss/implementation.go @@ -19,6 +19,7 @@ import ( "github.com/wormhole-foundation/wormhole/sdk/vaa" frosteth "github.com/xlabs/multi-party-sig/pkg/eth" "github.com/xlabs/multi-party-sig/pkg/math/curve" + "github.com/xlabs/multi-party-sig/protocols/cmp" "github.com/xlabs/multi-party-sig/protocols/frost" common "github.com/xlabs/tss-common" "github.com/xlabs/tss-lib/v2/party" @@ -76,6 +77,9 @@ type Configurations struct { // LeaderIdentity is used by the TSS engine protocol to determine who is responsible for telling // the other guardians about a new VAAv1. LeaderIdentity PEM // The public key of the leader in PEM format. + + // The list of chains that use ECDSA signatures. + EcdsaChains []vaa.ChainID } // GuardianStorage is a struct that holds the data needed for a guardian to participate in the TSS protocol @@ -99,6 +103,7 @@ type GuardianStorage struct { // all secret keys should be generated with specific value. TSSSecrets []byte frostconf *frost.Config + ecdsaconf *cmp.Config LoadDistributionKey []byte @@ -167,7 +172,15 @@ func (t *Engine) beginTSSSign(vaaDigest []byte, chainID vaa.ChainID, consistency d := party.Digest{} copy(d[:], vaaDigest) - if err := t.prepareThenAnounceNewDigest(d, chainID, consistencyLvl, mt); err != nil { + sigtask := party.SigningTask{ + Digest: d, + // indicating the reviving guardian will be given a chance to join the protocol. + Faulties: t.getExcludedFromCommittee(mt), + AuxiliaryData: chainIDToBytes(chainID), + ProtocolType: t.getProtocolForChain(chainID), + } + + if err := t.prepareThenAnounceNewDigest(sigtask, consistencyLvl, mt); err != nil { return err } @@ -182,13 +195,12 @@ func (t *Engine) beginTSSSign(vaaDigest []byte, chainID vaa.ChainID, consistency zap.Uint8("consistency", consistencyLvl), zap.Bool("isFromVaav1", mt.isFromVaav1), zap.Int("numMatchingTrackIDS", len(sigPrepInfo.alreadyStartedSigningTrackingIDs)), + zap.String("signingProtocol", sigtask.ProtocolType.ToString()), ) t.createSignatureMetrics(vaaDigest, chainID) - sigTask := makeSigningRequest(d, t.getExcludedFromCommittee(mt), chainID) - - info, err := t.fp.GetSigningInfo(sigTask) + info, err := t.fp.GetSigningInfo(sigtask) if err != nil { return fmt.Errorf("couldnt generate signing task: %w", err) } @@ -198,7 +210,7 @@ func (t *Engine) beginTSSSign(vaaDigest []byte, chainID vaa.ChainID, consistency } // TODO: cosider not recomputing the info, and just used it from `t.fp.GetSigningInfo(sigTask)` - info, err = t.fp.AsyncRequestNewSignature(sigTask) + info, err = t.fp.AsyncRequestNewSignature(sigtask) if err != nil { return err @@ -310,13 +322,8 @@ func (t *Engine) getSigPrepInfo(chainID vaa.ChainID, d party.Digest) (sigPrepara } // prepareThenAnounceNewDigest updates the inner state of the engine before announcing to others about a new digest seen. -func (t *Engine) prepareThenAnounceNewDigest(d party.Digest, chainID vaa.ChainID, consistencyLvl uint8, mt signingMeta) error { - signinginfo, err := t.fp.GetSigningInfo(party.SigningTask{ - Digest: d, - Faulties: []*common.PartyID{}, // no faulties - AuxiliaryData: chainIDToBytes(chainID), - }) - +func (t *Engine) prepareThenAnounceNewDigest(sigtask party.SigningTask, consistencyLvl uint8, mt signingMeta) error { + signinginfo, err := t.fp.GetSigningInfo(sigtask) if err != nil { return fmt.Errorf("couldnt generate signing task: %w", err) } @@ -335,29 +342,25 @@ func (t *Engine) prepareThenAnounceNewDigest(d party.Digest, chainID vaa.ChainID return nil } -func makeSigningRequest(d party.Digest, faulties []*common.PartyID, chainID vaa.ChainID) party.SigningTask { - return party.SigningTask{ - Digest: d, - // indicating the reviving guardian will be given a chance to join the protocol. - Faulties: faulties, - AuxiliaryData: chainIDToBytes(chainID), - } -} -func NewKeyGenerator(storage *GuardianStorage) (KeyGenerator, error) { - relTSS, err := NewReliableTSS(storage) - if err != nil { - return nil, fmt.Errorf("failed to create reliable TSS: %w", err) +func (t *Engine) getProtocolForChain(chainID vaa.ChainID) common.ProtocolType { + for _, ecdsaChain := range t.GuardianStorage.EcdsaChains { + if ecdsaChain == chainID { + return common.ProtocolECDSASign + } } - engine, ok := relTSS.(*Engine) - if !ok { // shouldn't happen, but just in case. - return nil, fmt.Errorf("reliable TSS does not implement KeyGenerator interface") - } + return common.ProtocolFROSTSign +} - return engine, nil +func NewKeyGenerator(storage *GuardianStorage) (KeyGenerator, error) { + return newEngine(storage) } func NewReliableTSS(storage *GuardianStorage) (ReliableTSS, error) { + return newEngine(storage) +} + +func newEngine(storage *GuardianStorage) (*Engine, error) { if storage == nil { return nil, fmt.Errorf("the guardian's tss storage is nil") } @@ -380,6 +383,7 @@ func NewReliableTSS(storage *GuardianStorage) (ReliableTSS, error) { fpParams := &party.Parameters{ FrostSecrets: storage.frostconf, + EcdsaSecrets: storage.ecdsaconf, PartyIDs: storage.GetPartyIDs(), Self: storage.Self.Pid, @@ -472,8 +476,8 @@ func (t *Engine) Start(ctx context.Context) error { return nil } -func (t *Engine) GetPublicKey() (curve.Point, error) { - pk, err := t.fp.GetPublic() +func (t *Engine) GetPublicKey(prot common.ProtocolType) (curve.Point, error) { + pk, err := t.fp.GetPublic(prot) if err != nil { return nil, fmt.Errorf("failed to get public key from full party: %w", err) } @@ -481,8 +485,8 @@ func (t *Engine) GetPublicKey() (curve.Point, error) { return pk, nil } -func (t *Engine) GetEthAddress() (ethcommon.Address, error) { - pubkey, err := t.fp.GetPublic() +func (t *Engine) GetEthAddress(prot common.ProtocolType) (ethcommon.Address, error) { + pubkey, err := t.fp.GetPublic(prot) if err != nil { return ethcommon.Address{}, fmt.Errorf("failed to get public key from full party: %w", err) } @@ -910,8 +914,8 @@ func (t *Engine) handleUnicastTSS(v *tsscommv1.Unicast_Tss, src *Identity) error return err } - if isBroadcastMsg(fpmsg) { - return fmt.Errorf("received broadcast type message in unicast: %v", fpmsg) + if !isKnownUnicastType(fpmsg) { + return fmt.Errorf("unknown unicast message type received: %T", fpmsg.Content()) } err = t.validateUnicastDoesntExist(fpmsg) diff --git a/node/pkg/tss/implementation_test.go b/node/pkg/tss/implementation_test.go index bccd1542db..675857ea71 100644 --- a/node/pkg/tss/implementation_test.go +++ b/node/pkg/tss/implementation_test.go @@ -26,6 +26,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/wormhole-foundation/wormhole/sdk/vaa" "github.com/xlabs/multi-party-sig/pkg/round" + "github.com/xlabs/multi-party-sig/protocols/cmp" "github.com/xlabs/multi-party-sig/protocols/frost" "github.com/xlabs/multi-party-sig/protocols/frost/sign" common "github.com/xlabs/tss-common" @@ -865,7 +866,8 @@ func TestNoFaultsFlow(t *testing.T) { for _, engine := range engines { tmp := make([]byte, 32) copy(tmp, dgst[:]) - engine.BeginAsyncThresholdSigningProtocol(tmp, cID, reportableConsistancyLevel) + err := engine.BeginAsyncThresholdSigningProtocol(tmp, cID, reportableConsistancyLevel) + a.NoError(err) } if ctxExpiredFirst(ctx, dnchn) { @@ -1013,6 +1015,7 @@ func TestNoFaultsFlow(t *testing.T) { Digest: dgst, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID), + ProtocolType: common.ProtocolFROSTSign, }) for _, engine := range engines { @@ -1140,6 +1143,59 @@ func TestNoFaultsFlow(t *testing.T) { a.True(committeeHostnames[id.Hostname], "message from non-committee member: %s", id.Hostname) } }) + + t.Run("ECDSA signature", func(t *testing.T) { + // SLOW TEST. + sigProducedCntr.Reset() + a := assert.New(t) + engines, err := loadGuardians(5, "tss5") + a.NoError(err) + + dgst := party.Digest{1, 2, 3, 4, 5, 6, 7, 8, 9} + + ctx, cancel := context.WithTimeout(testutils.MakeSupervisorContext(context.Background()), time.Second*50) + defer cancel() + + cID := vaa.ChainID(1) + for i, e := range engines { + e.GuardianStorage.EcdsaChains = []vaa.ChainID{cID} + a.NoError(e.attemptLoadTssSecrets()) // ensure ecdsa is loaded. + a.NotNil(e.GuardianStorage.ecdsaconf) + + // recreate engine to ensure ecdsa config is used. + engines[i], err = newEngine(&e.GuardianStorage) + a.NoError(err) + } + + fmt.Println("starting engines.") + for _, engine := range engines { + a.NoError(engine.Start(ctx)) + } + + fmt.Println("msgHandler settup:") + dnchn := msgHandler(ctx, engines, 1) + + fmt.Println("engines started, requesting sigs") + + m := dto.Metric{} + + // all engines are started, now we can begin the protocol. + for _, engine := range engines { + tmp := make([]byte, 32) + copy(tmp, dgst[:]) + err := engine.BeginAsyncThresholdSigningProtocol(tmp, cID, reportableConsistancyLevel) + a.NoError(err) + } + + if ctxExpiredFirst(ctx, dnchn) { + a.FailNow("context expired") + } + + time.Sleep(time.Millisecond * 500) // ensuring all other engines have finished and not just one of them. + + sigProducedCntr.WithLabelValues(cID.String()).Write(&m) + a.Equal(engines[0].Threshold+1, int(m.Counter.GetValue())) + }) } // Creates a vaa with 2t+1 sigantures (not n-out-of-n signatures). @@ -1219,6 +1275,7 @@ func TestFT(t *testing.T) { Digest: [32]byte{byte(i + 1)}, Faulties: nil, AuxiliaryData: chainIDToBytes(chainId), + ProtocolType: common.ProtocolFROSTSign, } } @@ -1283,6 +1340,7 @@ func TestFT(t *testing.T) { Digest: party.Digest{1, 2, 3, 4, 5, 6, 7, 8, 9}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID), + ProtocolType: common.ProtocolFROSTSign, } engines, err := loadGuardians(5, "tss5") @@ -1346,7 +1404,7 @@ func TestMessagesWithBadRounds(t *testing.T) { } err = e2.handleUnicast(m) - a.ErrorContains(err, "received broadcast type message in unicast") + a.ErrorContains(err, "unknown unicast message type received") } }) @@ -1529,19 +1587,7 @@ func msgHandler(ctx context.Context, engines []*Engine, numDiffSigsExpected int) } unicast(m, chns, engine) case sig := <-engine.ProducedSignature(): - sg, err := frost.Secp256k1SignatureTranslate(sig) - if err != nil { - panic("failed to translate signature:" + err.Error()) - } - - pk, err := engine.GetPublicKey() - if err != nil { - panic("failed to get public key:" + err.Error()) - } - - if err := sg.Verify(pk, sig.M); err != nil { - panic("failed to verify signature:" + err.Error()) - } + mustVerify(sig, engine) lck.Lock() nmsigs[sig.TrackingId.ToString()] = struct{}{} @@ -1573,6 +1619,46 @@ func msgHandler(ctx context.Context, engines []*Engine, numDiffSigsExpected int) return signalDone } +func mustVerify(sig *common.SignatureData, engine *Engine) { + if sig.TrackingId.Protocol == uint32(common.ProtocolFROSTSign.ToInt()) { + mustVerifyFrost(sig, engine) + } else { + mustVerifyCMP(sig, engine) + } +} + +func mustVerifyCMP(sig *common.SignatureData, engine *Engine) { + sg, err := cmp.Secp256k1SignatureTranslate(sig) + if err != nil { + panic("failed to translate cmp signature:" + err.Error()) + } + + pk, err := engine.GetPublicKey(common.ProtocolECDSASign) + if err != nil { + panic("failed to get cmp publickey:" + err.Error()) + } + + if !sg.Verify(pk, sig.M) { + panic("failed to verify cmp signature:" + err.Error()) + } +} + +func mustVerifyFrost(sig *common.SignatureData, engine *Engine) { + sg, err := frost.Secp256k1SignatureTranslate(sig) + if err != nil { + panic("failed to translate frost signature:" + err.Error()) + } + + pk, err := engine.GetPublicKey(common.ProtocolFROSTSign) + if err != nil { + panic("failed to get frost public key:" + err.Error()) + } + + if err := sg.Verify(pk, sig.M); err != nil { + panic("failed to verify frost signature:" + err.Error()) + } +} + func unicast(m Sendable, chns map[string]chan msgg, engine *Engine) { pids := m.GetDestinations() for _, id := range pids { @@ -1675,8 +1761,8 @@ func TestSigCounter(t *testing.T) { cID := vaa.ChainID(0) tsks := []party.SigningTask{ - party.SigningTask{Digest: party.Digest{1}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID)}, - party.SigningTask{Digest: party.Digest{2}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID)}, + party.SigningTask{Digest: party.Digest{1}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID), ProtocolType: common.ProtocolFROSTSign}, + party.SigningTask{Digest: party.Digest{2}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID), ProtocolType: common.ProtocolFROSTSign}, } engines := load5GuardiansSetupForBroadcastChecks(a) e1 := getSigningGuardian(a, engines, tsks...) @@ -1715,7 +1801,7 @@ func TestSigCounter(t *testing.T) { // Tests might fail due to change of the GuardianStorage files cID := vaa.ChainID(0) tsks := []party.SigningTask{ - party.SigningTask{Digest: party.Digest{1}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID)}, + party.SigningTask{Digest: party.Digest{1}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID), ProtocolType: common.ProtocolFROSTSign}, } engines := load5GuardiansSetupForBroadcastChecks(a) e1 := getSigningGuardian(a, engines, tsks...) @@ -1762,7 +1848,7 @@ func TestSigCounter(t *testing.T) { // Tests might fail due to change of the GuardianStorage files cID := vaa.ChainID(0) tsks := []party.SigningTask{ - party.SigningTask{Digest: party.Digest{1}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID)}, + party.SigningTask{Digest: party.Digest{1}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID), ProtocolType: common.ProtocolFROSTSign}, } engines := load5GuardiansSetupForBroadcastChecks(a) e1 := getSigningGuardian(a, engines, tsks...) @@ -1811,8 +1897,8 @@ func TestSigCounter(t *testing.T) { cID := vaa.ChainID(0) tsks := []party.SigningTask{ - party.SigningTask{Digest: party.Digest{1}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID)}, - party.SigningTask{Digest: party.Digest{2}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID)}, + party.SigningTask{Digest: party.Digest{1}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID), ProtocolType: common.ProtocolFROSTSign}, + party.SigningTask{Digest: party.Digest{2}, Faulties: []*common.PartyID{}, AuxiliaryData: chainIDToBytes(cID), ProtocolType: common.ProtocolFROSTSign}, } engines := load5GuardiansSetupForBroadcastChecks(a) e1 := getSigningGuardian(a, engines, tsks...) @@ -1920,49 +2006,52 @@ func TestTrackingIDSizeIsOkay(t *testing.T) { func TestDKG(t *testing.T) { a := assert.New(t) - engines, err := loadGuardians(5, "tss5") - a.NoError(err) + for _, prot := range []common.ProtocolType{common.ProtocolFROSTDKG} { + engines, err := loadGuardians(5, "tss5") + a.NoError(err) - for _, e := range engines { // Checks things work when no frost config is set. - e.GuardianStorage.frostconf = nil - } + for _, e := range engines { // Checks things work when no frost config is set. + e.GuardianStorage.frostconf = nil + } - supctx := testutils.MakeSupervisorContext(context.Background()) - ctx, cancel := context.WithTimeout(supctx, time.Minute*1) - defer cancel() + supctx := testutils.MakeSupervisorContext(context.Background()) + ctx, cancel := context.WithTimeout(supctx, time.Minute*1) + defer cancel() - for _, engine := range engines { - a.NoError(engine.Start(ctx)) - } + for _, engine := range engines { + a.NoError(engine.Start(ctx)) + } - _ = msgHandler(ctx, engines, 1) + _ = msgHandler(ctx, engines, 1) - promises := make([]chan *party.TSSSecrets, len(engines)) - for _, engine := range engines { - chn, err := engine.StartDKG(party.DkgTask{ - Threshold: 3, - Seed: party.Digest{}, - }) - a.NoError(err) + promises := make([]chan *party.TSSSecrets, len(engines)) + for _, engine := range engines { + chn, err := engine.StartDKG(party.DkgTask{ + Threshold: 3, + Seed: party.Digest{}, + ProtocolType: prot, + }) + a.NoError(err) - promises[engine.Self.CommunicationIndex] = chn - } - fmt.Println("dkg started, waiting for configs...") + promises[engine.Self.CommunicationIndex] = chn + } + fmt.Println("dkg started, waiting for configs...") - res := make([]*frost.Config, len(engines)) - for _, v := range engines { - select { - case <-ctx.Done(): - a.FailNow("context expired before DKG finished") - case cfg := <-promises[v.Self.CommunicationIndex]: - fmt.Println("received config for", v.Self.CommunicationIndex) - res[v.Self.CommunicationIndex] = cfg.Config + res := make([]*frost.Config, len(engines)) + for _, v := range engines { + select { + case <-ctx.Done(): + a.FailNow("context expired before DKG finished") + case cfg := <-promises[v.Self.CommunicationIndex]: + fmt.Println("received config for", v.Self.CommunicationIndex) + res[v.Self.CommunicationIndex] = cfg.FrostConfigs + } } - } - fmt.Println("DKG finished, configs:") + fmt.Println("DKG finished, configs:") - fmt.Println("") + fmt.Println("") + } } func TestHandleFPWarning_IntegrationStyle_UsesEngineBootstrap(t *testing.T) { diff --git a/node/pkg/tss/internal/cmd/dkg/server.go b/node/pkg/tss/internal/cmd/dkg/server.go index 2fa4aceb9d..d5ed2f5606 100644 --- a/node/pkg/tss/internal/cmd/dkg/server.go +++ b/node/pkg/tss/internal/cmd/dkg/server.go @@ -4,10 +4,10 @@ import ( "bytes" "context" "crypto/sha256" - "encoding/gob" "encoding/hex" "encoding/json" "flag" + "fmt" "os" "path" "strconv" @@ -18,12 +18,19 @@ import ( engine "github.com/certusone/wormhole/node/pkg/tss" "github.com/certusone/wormhole/node/pkg/tss/comm" "github.com/certusone/wormhole/node/pkg/tss/internal/cmd" + "github.com/fxamacker/cbor/v2" "github.com/xlabs/multi-party-sig/protocols/frost/sign" + common "github.com/xlabs/tss-common" "github.com/xlabs/tss-lib/v2/party" "go.uber.org/zap" ) -var cnfgPath = flag.String("cnfg", "", "path to config file in json format used to run the protocol") +var ( + cnfgPath = flag.String("cnfg", "", "path to config file in json format used to run the protocol") + existingPath = flag.String("secrets", "", "path to existing secrets.json. Used to ensure the result of DKG contains any existing keys for other protocols.") + protocolMsg = fmt.Sprintf("the TSS protocol type to use ( '%s' | '%s')", common.ProtocolFROSTDKG, common.ProtocolECDSADKG) + protocol = flag.String("protocol", "", protocolMsg) +) var logger *zap.Logger @@ -35,14 +42,14 @@ func main() { logger = supervisor.Logger(ctx) logger.Info("Loading KeyGenerator and GuardianStorage for DKG...") - cnfgs := loadConfigsFromFlags() + cnfgs, prot := loadConfigsFromFlags() keygen, gst := keygeneratorSetup(cnfgs) keygen.Start(ctx) logger.Info("Setting up server...") - srvr := createServer(gst, keygen) + srvr := createServer(keygen) go func() { if err := srvr.Run(ctx); err != nil { logger.Fatal("Server stopped", zap.Error(err)) @@ -61,16 +68,31 @@ func main() { logger.Info("Connections established, starting DKG...") - run(ctx, keygen, gst, cnfgs) + run(ctx, runParams{ + keygen: keygen, + gst: gst, + cnfgs: cnfgs, + prot: prot, + existingPath: *existingPath, + }) +} + +type runParams struct { + keygen engine.KeyGenerator + gst *engine.GuardianStorage + cnfgs *cmd.SetupConfigs + prot common.ProtocolType + existingPath string } -func run(ctx context.Context, keygen engine.KeyGenerator, gst *engine.GuardianStorage, cnfgs *cmd.SetupConfigs) { +func run(ctx context.Context, prms runParams) { for i := range 10 { // The loop should converge after 2~3 iterations. logger.Info("Starting new DKG session", zap.Int("session", i)) - resChn, err := keygen.StartDKG(party.DkgTask{ - Threshold: gst.Threshold, - Seed: sha256.Sum256([]byte("dkg seed:" + strconv.Itoa(i))), + resChn, err := prms.keygen.StartDKG(party.DkgTask{ + Threshold: prms.gst.Threshold, + Seed: sha256.Sum256([]byte("dkg seed:" + strconv.Itoa(i))), + ProtocolType: prms.prot, }) if err != nil { @@ -90,51 +112,42 @@ func run(ctx context.Context, keygen engine.KeyGenerator, gst *engine.GuardianSt continue } - crv := tssConfigs.PublicKey.Curve() - lg := logger.With(zap.String("TrackingID", tssConfigs.TrackingID.ToString())) lg.Info("completed a DKG session") - pkMarshal, err := crv.MarshalPoint(tssConfigs.PublicKey.Clone()) - if err != nil { - lg.Fatal("failed to marshal public key", zap.Error(err)) - } - - lg.Info("verifying resulting PK is valid for TSS usage", - zap.String("pk", hex.EncodeToString(pkMarshal)), - ) + if prms.prot == common.ProtocolFROSTDKG && !validOutputForFrostUsage(tssConfigs, lg) { + lg.Warn("resulting TSSSecrets is not valid for Frost usage, retrying DKG...") - lg.Info("verifying randomly chosen PK is valid for smart-contract usage") - if !sign.PublicKeyValidForContract(tssConfigs.PublicKey) { continue } - buff := bytes.NewBuffer(nil) - enc := gob.NewEncoder(buff) + attemptMergingTssSecretsToOld(lg, prms, tssConfigs) - if err := enc.Encode(tssConfigs); err != nil { + // Marshal the resulting TSSSecrets into the GuardianStorage. + bts, err := cbor.Marshal(tssConfigs) + if err != nil { lg.Fatal("failed to marshal frost configuration", zap.Error(err)) } - gst.TSSSecrets = buff.Bytes() - if err := gst.SetInnerFields(); err != nil { + prms.gst.TSSSecrets = bts + if err := prms.gst.SetInnerFields(); err != nil { lg.Fatal("failed to set inner fields of the GuardianStorage", zap.Error(err)) } lg.Info("GuardianStorage updated with TSS secrets. Storing result into file", zap.Int("guardianIndex", i)) - toStore, err := json.MarshalIndent(gst, "", " ") + toStore, err := json.MarshalIndent(prms.gst, "", " ") if err != nil { lg.Fatal("failed to marshal GuardianStorage", zap.Error(err)) } // create path of dirs using cnfgs.StorageLocation: - if err := os.MkdirAll(cnfgs.StorageLocation, 0700); err != nil { + if err := os.MkdirAll(prms.cnfgs.StorageLocation, 0700); err != nil { lg.Fatal("failed to create storage directory", zap.Error(err)) } - fname := path.Join(cnfgs.StorageLocation, "secrets.json") + fname := path.Join(prms.cnfgs.StorageLocation, "secrets.json") lg.Info("Writing GuardianStorage to file", zap.String("file", fname)) if err := os.WriteFile(fname, toStore, 0600); err != nil { @@ -149,13 +162,50 @@ func run(ctx context.Context, keygen engine.KeyGenerator, gst *engine.GuardianSt logger.Fatal("failed to complete DKG after 10 attempts, please check the logs for more details") } -func createServer(gst *engine.GuardianStorage, keygen engine.KeyGenerator) comm.DirectLink { - socketpath := "[::]:" + strconv.Itoa(gst.Self.Port) - if gst.Self.Port == 0 { - socketpath = "[::]:" + engine.DefaultPort +// attemptMergingTssSecretsToOld tries to load existing TSSSecrets from an old GuardianStorage file +// and merge them into the new TSSSecrets generated by the DKG process. +// This is useful to preserve existing keys for other protocols when only one protocol's keys are being generated. +func attemptMergingTssSecretsToOld(lg *zap.Logger, prms runParams, tssConfigs *party.TSSSecrets) { + if prms.existingPath == "" { + return + } + lg.Info("loading existing GuardianStorage from file", zap.String("file", *existingPath)) + tmp, err := engine.NewGuardianStorageFromFile(*existingPath) + if err != nil { + lg.Error("Failed to load existing GuardianStorage from file. Continuing to save the result into a new GuardianStorage", zap.Error(err)) + return } - srvr, err := comm.NewServer(socketpath, logger, keygen) + loaded, err := engine.UnmarshalTssSecrets(tmp.TSSSecrets) + if err != nil { + lg.Error("Failed to unmarshal existing TSSSecrets from GuardianStorage. Continuing to save the result into a new GuardianStorage", zap.Error(err)) + return + } + + // Merge the existing secrets into the new TSSSecrets. Thus we preserve any existing keys for other protocols. + if prms.prot == common.ProtocolFROSTDKG { + tssConfigs.EcdsaConfigs = loaded.EcdsaConfigs + } else if prms.prot == common.ProtocolECDSADKG { + tssConfigs.FrostConfigs = loaded.FrostConfigs + } + + lg.Info("merged existing TSSSecrets into the new TSSSecrets") +} + +func validOutputForFrostUsage(tssConfigs *party.TSSSecrets, lg *zap.Logger) bool { + crv := tssConfigs.FrostConfigs.PublicKey.Curve() + pk := tssConfigs.FrostConfigs.PublicKey.Clone() + pkMarshal, err := crv.MarshalPoint(pk) + if err != nil { + lg.Fatal("failed to marshal public key", zap.Error(err)) + } + + lg.Info("verifying randomly chosen PK is valid for smart-contract usage", zap.String("pk", hex.EncodeToString(pkMarshal))) + return sign.PublicKeyValidForContract(pk) +} + +func createServer(keygen engine.KeyGenerator) comm.DirectLink { + srvr, err := comm.NewServer(logger, keygen) if err != nil { logger.Fatal("failed to create a new server", zap.Error(err)) } @@ -211,10 +261,10 @@ func keygeneratorSetup(cnfgs *cmd.SetupConfigs) (engine.KeyGenerator, *engine.Gu return keygen, gst } -func loadConfigsFromFlags() *cmd.SetupConfigs { +func loadConfigsFromFlags() (*cmd.SetupConfigs, common.ProtocolType) { flag.Parse() - if *cnfgPath == "" { + if *cnfgPath == "" || *protocol == "" { flag.PrintDefaults() logger.Fatal("config path is empty, please provide a valid path to a config file") @@ -233,5 +283,9 @@ func loadConfigsFromFlags() *cmd.SetupConfigs { logger.Fatal("failed to unmarshal config file", zap.Error(err)) } - return cnfg + if *protocol != common.ProtocolECDSADKG.ToString() && *protocol != common.ProtocolFROSTDKG.ToString() { + logger.Fatal(fmt.Sprintf("protocol must be either '%s' or '%s'", common.ProtocolFROSTDKG.ToString(), common.ProtocolECDSADKG.ToString())) + } + + return cnfg, common.ProtocolType(*protocol) } diff --git a/node/pkg/tss/internal/cmd/lkg/lkg.json b/node/pkg/tss/internal/cmd/lkg/lkg.json new file mode 100644 index 0000000000..19365893c2 --- /dev/null +++ b/node/pkg/tss/internal/cmd/lkg/lkg.json @@ -0,0 +1,52 @@ +{ + "NumParticipants": 5, + "WantedThreshold": 3, + "Self": { + "Hostname": "", + "TlsX509": null, + "Port": 0 + }, + "SelfSecret": null, + "StorageLocation": "", + "Peers": [ + { + "Hostname": "t-gcp-threshsignnet-asia-01.gcp.testnet.xlabs.xyz", + "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVgyZ0F3SUJBZ0lSQU1WOHhnYS8vOEVqMHE4Z0ovcjZzM0F3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamd4TVRBME5UaGFHQTh5TURZMU1URXlOekV4TURRMQpPRm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJFZ21SSnVRS3lBMFNxQzhlSmRGWXhLUUh4N1JKL2QwcW9PY2tTM3JMUzFVLzE5R0x3bS8zOVVsSmdZZzRVWEcKQnEzTlI3RjN5SnFVeDVjS3k2SGFjdFdqZ2JFd2dhNHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCVFN6VS85T1RYY3BqbnA5VHJFZThjQXNqeDNVekJOQmdOVkhSRUVSakJFZ2pGMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV0Z6YVdFdE1ERXVaMk53TG5SbGMzUnVaWFF1ZUd4aFluTXVlSGw2Z2dsc2IyTmhiR2h2YzNTSApCSDhBQUFFd0NnWUlLb1pJemowRUF3SURTQUF3UlFJaEFPZDdaVlNNUzFQOFZlR3BEY2VmdTlYdHFzV2I1VzJ6CmdwTlBMTjZBZXg0ZkFpQU9ZWDJsL005V0ZkMUFsWS9hbVJwWEl0VXduTU12NmdvcWRDT3BNN2UvS3c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "Port": 8998 + }, + { + "Hostname": "t-gcp-threshsignnet-usw-01.gcp.testnet.xlabs.xyz", + "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxakNDQVh1Z0F3SUJBZ0lRU1h1dnNFajc4VHZYMFlPdFBXbllEakFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPREV4TURRMU9Gb1lEekl3TmpVeE1USTNNVEV3TkRVNApXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFClRtc1RGdXpPTXVaTnJmN2c0d2JPV09OU3V4c2hGNlYzQ0YvUUxnVkVRY09adzhjSklxaWNnczBPQS9JMEdCNFYKUHpZTGxKVnNaSTh1NkNnY2grZ2dhNk9Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZOUGZqdDg3ejFhZktEOTB1eHdYMkNlMXF5dVVNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRkWE4zTFRBeExtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0Ewa0FNRVlDSVFDVkwxZVJ1c3Y3ZEgyNjdSbTlQdHlWTXBmR3VrSUhZVWJjClhXKzJhSGd4K3dJaEFKL3ZwaTdJOE5JSFJleithb0xWWkFQaUtkOGZ5MUdZOTIzQml6bmZwVmxKCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "Port": 8998 + }, + { + "Hostname": "t-gcp-threshsignnet-use-01.gcp.testnet.xlabs.xyz", + "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxekNDQVh5Z0F3SUJBZ0lSQUlmQnVZb1dhWGVOSDEyUVVjTm5IUkl3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamd4TVRBME5UaGFHQTh5TURZMU1URXlOekV4TURRMQpPRm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJDbjNRVkZZRUxRYm1mYzhZbThlQ2xoVGRGcTI5eTU5Z1hzK2xEOVhlcEFuSS80SE9wS0tLTmZJZWVFVHpYVGEKRksyNzZnNGdKa01pM251YXBWVUV2a3lqZ2JBd2dhMHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCVE55VmIvVWhlOFQxREVWZG8vSjg0dlN3Nk1zakJNQmdOVkhSRUVSVEJEZ2pCMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMWFZ6WlMwd01TNW5ZM0F1ZEdWemRHNWxkQzU0YkdGaWN5NTRlWHFDQ1d4dlkyRnNhRzl6ZEljRQpmd0FBQVRBS0JnZ3Foa2pPUFFRREFnTkpBREJHQWlFQWhtcHJoaUZ0SVQyd0VtTDZoVkZzaHE1ditaa2hhWXdNCk5Cdmh2Q2lESXpvQ0lRQzFZM1RPMjVQaUhvQW9zbDdJbUk5NmVmRktXaytzd3QrTVg5bm9TVERyRnc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "Port": 8998 + }, + { + "Hostname": "t-gcp-threshsignnet-euc-01.gcp.testnet.xlabs.xyz", + "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxRENDQVh1Z0F3SUJBZ0lRYzBHVGcrUzRUNDlTRlBadWIrZVhOVEFLQmdncWhrak9QUVFEQWpBU01SQXcKRGdZRFZRUUtFd2QwYzNOamIyMXRNQ0FYRFRJMU1UQXlPREV4TURRMU9Gb1lEekl3TmpVeE1USTNNVEV3TkRVNApXakFTTVJBd0RnWURWUVFLRXdkMGMzTmpiMjF0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFCm1OSmNHQkVWbGNoSm4vcGRTMzVBYnVZWmprYzJSbjYwcWJlbDdSNDNRWTF6ck1KQzJ5UHhEcnExT0lJQnZSbmEKWGwxd3FlOFFGejc1SkZKZTNQK2hqcU9Cc0RDQnJUQU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZdwpGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFCkZFNWlwSlpMMkdHdFN2N2F6TGh3a3RvTll6UVhNRXdHQTFVZEVRUkZNRU9DTUhRdFoyTndMWFJvY21WemFITnAKWjI1dVpYUXRaWFZqTFRBeExtZGpjQzUwWlhOMGJtVjBMbmhzWVdKekxuaDVlb0lKYkc5allXeG9iM04waHdSLwpBQUFCTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUZMZFA1cElxdWZIWStWbXo0T0JpMzMvQ05qZmxBZ2hQRlg5CkttZ1hmTElEQWlBbm0rcGpQNFc2aVA5elI1dGk3QU9ydDZ1S0tUaE1lU2FhWVVFckMwaWprZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "Port": 8998 + }, + { + "Hostname": "t-gcp-threshsignnet-euw-01.gcp.testnet.xlabs.xyz", + "TlsX509": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxakNDQVh5Z0F3SUJBZ0lSQU9pQ1FWZnFRTzFwaWtwZzcrdkg5MTR3Q2dZSUtvWkl6ajBFQXdJd0VqRVEKTUE0R0ExVUVDaE1IZEhOelkyOXRiVEFnRncweU5URXdNamd4TVRBME5UaGFHQTh5TURZMU1URXlOekV4TURRMQpPRm93RWpFUU1BNEdBMVVFQ2hNSGRITnpZMjl0YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBCkJHSGpFZGRjemRKeHNkYUdpVkszaHh6cmlNUHBqd0NuLzVwcWpsdDJ4NjExaDFOYzVucjVrMjkrdmdjQXRZT0wKOVNxVHdGT1FtNUFtVFNCQjBWdE5QcitqZ2JBd2dhMHdEZ1lEVlIwUEFRSC9CQVFEQWdLRU1CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCUXNFNklKTzRTSHM2OGkvaTEyemdxVU5VOWM1akJNQmdOVkhSRUVSVEJEZ2pCMExXZGpjQzEwYUhKbGMyaHoKYVdkdWJtVjBMV1YxZHkwd01TNW5ZM0F1ZEdWemRHNWxkQzU0YkdGaWN5NTRlWHFDQ1d4dlkyRnNhRzl6ZEljRQpmd0FBQVRBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlFQXpHL3ZXUHdFLzJ6SGlmWDBmNEkzdFJtc3pXUGlXc2N5CjVOQnYxZi9GUm5VQ0lGcEVxSFh6VEkxQmJiZ1Fjd2FwbWdBUFRUejl2bFZvQncvSEIwMXVVUUVNCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "Port": 8998 + } + ], + "Secrets": [ + "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ1BRSWN4QVBFT1lJZEdJVXkKWnRjZzYxM3JCTFU4MTNWZGQ5anN3M2x3N0RxaFJBTkNBQVJJSmtTYmtDc2dORXFndkhpWFJXTVNrQjhlMFNmMwpkS3FEbkpFdDZ5MHRWUDlmUmk4SnY5L1ZKU1lHSU9GRnhnYXR6VWV4ZDhpYWxNZVhDc3VoMm5MVgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", + "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ1JxcEVlN211ZDJ0MVVYZ3YKM2lkam5mdlFFZnhOWmxaMjZFdmRjZGF6WWdLaFJBTkNBQVJPYXhNVzdNNHk1azJ0L3VEakJzNVk0MUs3R3lFWApwWGNJWDlBdUJVUkJ3NW5EeHdraXFKeUN6UTREOGpRWUhoVS9OZ3VVbFd4a2p5N29LQnlINkNCcgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", + "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ2dEVDhaZEtmbUt3UG1GWEEKZGxCWTh6L2FxaU5WVGhHaCt2WEVpVEc5ditPaFJBTkNBQVFwOTBGUldCQzBHNW4zUEdKdkhncFlVM1JhdHZjdQpmWUY3UHBRL1YzcVFKeVArQnpxU2lpalh5SG5oRTgxMDJoU3R1K29PSUNaREl0NTdtcVZWQkw1TQotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", + "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ2hZTjJqV1ZobUl4clUwUU4KWjlSYm9SY2xjcXh6ZEN1TE44VUVIVjE4citDaFJBTkNBQVNZMGx3WUVSV1Z5RW1mK2wxTGZrQnU1aG1PUnpaRwpmclNwdDZYdEhqZEJqWE9zd2tMYkkvRU91clU0Z2dHOUdkcGVYWENwN3hBWFB2a2tVbDdjLzZHTwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==", + "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ1JTUVRuMlhoYnozcHFuUlgKb09VRk9FOEJRU21yNnoxS0lUMmJ3K3NqWVJPaFJBTkNBQVJoNHhIWFhNM1NjYkhXaG9sU3Q0Y2M2NGpENlk4QQpwLythYW81YmRzZXRkWWRUWE9aNitaTnZmcjRIQUxXRGkvVXFrOEJUa0p1UUprMGdRZEZiVFQ2LwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==" + ], + "SaveLocation": [ + "asia-01", + "usw-01", + "use-01", + "euc-01", + "euw-01" + ] +} \ No newline at end of file diff --git a/node/pkg/tss/internal/cmd/lkg/local_key_generation.go b/node/pkg/tss/internal/cmd/lkg/local_key_generation.go index 0137e63a1c..8def960d63 100644 --- a/node/pkg/tss/internal/cmd/lkg/local_key_generation.go +++ b/node/pkg/tss/internal/cmd/lkg/local_key_generation.go @@ -5,9 +5,7 @@ package main import ( - "bytes" "crypto/rand" - "encoding/gob" "encoding/json" "flag" "fmt" @@ -16,11 +14,13 @@ import ( engine "github.com/certusone/wormhole/node/pkg/tss" "github.com/certusone/wormhole/node/pkg/tss/internal/cmd" + "github.com/fxamacker/cbor/v2" "github.com/xlabs/multi-party-sig/pkg/math/curve" "github.com/xlabs/multi-party-sig/pkg/math/polynomial" "github.com/xlabs/multi-party-sig/pkg/math/sample" "github.com/xlabs/multi-party-sig/pkg/party" "github.com/xlabs/multi-party-sig/protocols/frost" + "github.com/xlabs/multi-party-sig/protocols/frost/sign" ) var cnfgPath = flag.String("cnfg", "", "path to config file in json format used to run the protocol") @@ -62,7 +62,8 @@ type dkgPlayer struct { self *engine.Identity ids engine.IdentitiesKeep - selfCert []byte + selfCert []byte + certKeyPEM []byte // same for all guardians // generated here. loadDistributionKey []byte @@ -90,9 +91,8 @@ func Run(cnfg *cmd.SetupConfigs) { // this function simulates the results of running a DKG protocol. func simulateDKG(all []*dkgPlayer, threshold int) { group := curve.Secp256k1{} - secret := sample.Scalar(rand.Reader, group) - f := polynomial.NewPolynomial(group, threshold, secret) - publicKey := secret.ActOnBase() + + publicKey, f := makefrostKey(group, threshold) privateShares := make(map[party.ID]curve.Scalar, len(all)) for _, p := range all { @@ -124,10 +124,8 @@ func simulateDKG(all []*dkgPlayer, threshold int) { VerificationShares: party.NewPointMap(verificationShares), } - buff := bytes.NewBuffer(nil) - enc := gob.NewEncoder(buff) - - if err := enc.Encode(cnf); err != nil { + bts, err := cbor.Marshal(cnf) + if err != nil { panic(fmt.Sprintf("failed to marshal frost config for guardian %d: %v", i, err)) } @@ -135,12 +133,12 @@ func simulateDKG(all []*dkgPlayer, threshold int) { Configurations: engine.Configurations{}, Self: p.self, TlsX509: p.selfCert, - PrivateKey: nil, // each guardian stores this by themselves. + PrivateKey: p.certKeyPEM, IdentitiesKeep: p.ids, Threshold: threshold, // SavedSecretParameters: , LoadDistributionKey: p.loadDistributionKey, - TSSSecrets: buff.Bytes(), + TSSSecrets: bts, } } @@ -156,19 +154,32 @@ func simulateDKG(all []*dkgPlayer, threshold int) { panic("") } - if err := os.MkdirAll(all[i].whereToStore, 0600); err != nil { + if err := os.MkdirAll(all[i].whereToStore, 0700); err != nil { panic("Failed to create directory: " + err.Error()) } fname := path.Join(all[i].whereToStore, "secrets.json") - if err := os.WriteFile(fname, bts, 0777); err != nil { + if err := os.WriteFile(fname, bts, 0600); err != nil { panic("Failed to write to disk: " + err.Error()) } } } +func makefrostKey(group curve.Secp256k1, threshold int) (curve.Point, *polynomial.Polynomial) { + for range 128 { + secret := sample.Scalar(rand.Reader, group) + f := polynomial.NewPolynomial(group, threshold, secret) + publicKey := secret.ActOnBase() + if sign.PublicKeyValidForContract(publicKey) { + return publicKey, f + } + } + + panic("could not generate a valid frost key after 128 attempts") +} + func setupPlayers(cnfg *cmd.SetupConfigs) ([]*dkgPlayer, error) { if err := cnfg.Validate(); err != nil { return nil, err @@ -203,12 +214,13 @@ func setupPlayers(cnfg *cmd.SetupConfigs) ([]*dkgPlayer, error) { // peerContext := tss.NewPeerContext(sortedPids) - gspecific := mp[string(id.Pid.GetID())] + gspecific := mp[string(id.KeyPEM)] p := &dkgPlayer{ self: id, whereToStore: cnfg.SaveLocation[index], selfCert: gspecific.TlsX509, + certKeyPEM: cnfg.Secrets[index], loadDistributionKey: tmp, ids: engine.IdentitiesKeep{ diff --git a/node/pkg/tss/internal/cmd/scripts_test.go b/node/pkg/tss/internal/cmd/scripts_test.go index d71881b2f7..03884bf27a 100644 --- a/node/pkg/tss/internal/cmd/scripts_test.go +++ b/node/pkg/tss/internal/cmd/scripts_test.go @@ -13,13 +13,16 @@ import ( "os" "os/exec" "path" + "path/filepath" "runtime" + "strconv" "strings" "testing" "time" engine "github.com/certusone/wormhole/node/pkg/tss" "github.com/certusone/wormhole/node/pkg/tss/internal" + common "github.com/xlabs/tss-common" ) // create these from scrath, then store it into a single file. @@ -54,59 +57,65 @@ var hostnames = []string{ const saveFile = "./lkg/lkg.json" const specificKeysFolder = "5-servers" -type LKGConfig SetupConfigs +var prepareForLocalDKG = false -func TestMain(t *testing.T) { - t.Skip("skipping main test, use specific tests instead") - - t.Run("CreateLKGConfigs", createLKGConfigs) +type dkgTest struct { + hostnames []string + saveFolder string + protocol common.ProtocolType + loadExisting bool // load existing secrets.json to merge (assumes generated using createDKGConfigs) + forLocalDKG bool + storeIntoInternalTestData bool +} - t.Run("shoveKeysToPosition", shoveKeys) +func getCurrentFilePath(t *testing.T) string { + _, filename, _, ok := runtime.Caller(0) + if !ok { + t.Fatal("Unable to get the current test file path") + } - t.Run("storeGuardiansForTest", storeTestGuardians) + // The path returned by runtime.Caller might be relative. + // We use filepath.Abs to ensure we get the absolute path. + absPath, err := filepath.Abs(filename) + if err != nil { + t.Fatalf("Unable to get the absolute path: %v", err) + } - t.Run("scpSecretsToServers", sendToServers) + // remove the filename to get the directory + return filepath.Dir(absPath) } -func storeTestGuardians(t *testing.T) { - cnfg := loadConfigs(t) - - mainFolder := "tss5" - resultDir := path.Join("..", "..", "..", "internal", "testutils", "testdata", mainFolder) - cleanResultFolder(t, resultDir) +func TestMain(t *testing.T) { + t.Skip("skipping main test, use specific tests instead") - // if err := os.MkdirAll(_path, 0755); err != nil { - // t.Fatalf("failed to create directory: %v", err) + tt := dkgTest{ + hostnames: hostnames, + saveFolder: path.Join("dkg"), + forLocalDKG: true, + } + t.Run("CreateDKGConfigs", tt.createDKGConfigs) + + tt = dkgTest{ + hostnames: hostnames, + protocol: common.ProtocolECDSADKG, + // for ease of debug, not using full path. + saveFolder: path.Join(getCurrentFilePath(t), "dkg"), // workingdir + loadExisting: true, + forLocalDKG: true, + storeIntoInternalTestData: true, // ensure we update the internal testdata after running DKG + } + t.Run("RunDKG", tt.RunDKG) + + // tt = dkgTest{ + // hostnames: hostnames, + // // for ease of debug, not using full path. + // saveFolder: path.Join(getCurrentFilePath(t), "lkg"), // workingdir + // forLocalDKG: false, + // storeIntoInternalTestData: false, // } - for i := range cnfg.Peers { - // guardian := cnfg.Peers[i] - saveLocation := cnfg.SaveLocation[i] - if saveLocation == "" { - t.Fatalf("guardian %d has empty WhereToSaveSecrets", i) - } - - _path := path.Join("setkey", "keys", specificKeysFolder, saveLocation) - lkgpath := path.Join(_path, "secrets.json") + // t.Run("CreateLKGConfigs", tt.createLKGConfigs) - //read the file into a GuardianStorage struct - gst, err := engine.NewGuardianStorageFromFile(lkgpath) - if err != nil { - t.Fatalf("failed to read guardian storage from file: %v", err) - } - - fileIndex := gst.Self.CommunicationIndex - fmt.Println("guardian index:", fileIndex) - - bts, err := json.MarshalIndent(gst, "", " ") - if err != nil { - t.Fatalf("failed to marshal guardian storage: %v", err) - } - guardianFileName := fmt.Sprintf("guardian%d.json", fileIndex) - guardianFilePath := path.Join(resultDir, guardianFileName) - if err := os.WriteFile(guardianFilePath, bts, 0644); err != nil { - t.Fatalf("failed to write guardian storage to file: %v", err) - } - } + // t.Run("scpSecretsToServers", sendToServers) } func cleanResultFolder(t *testing.T, resultDir string) { @@ -201,76 +210,66 @@ func sendToServers(t *testing.T) { fmt.Println("done sending files") } -func loadConfigs(t *testing.T) LKGConfig { +func loadConfigs(t *testing.T) SetupConfigs { bts, err := os.ReadFile(saveFile) if err != nil { t.Fatalf("failed to read file: %v", err) } - var cnfg LKGConfig + var cnfg SetupConfigs if err := json.Unmarshal(bts, &cnfg); err != nil { t.Fatalf("failed to unmarshal config: %v", err) } return cnfg } -func shoveKeys(t *testing.T) { - cnfg := loadConfigs(t) - // TODO - // var secretkeypath = flag.String("key", "", "path to the secret key PEM file") - // var lkgSecrets = flag.String("lkg", "", "path to the LKG secrets json file") +func (d dkgTest) createLKGConfigs(t *testing.T) { + cnfg := d.createLKG(t) - for i := range cnfg.Peers { - - saveLocation := cnfg.SaveLocation[i] - if saveLocation == "" { - t.Fatalf("guardian %d has empty WhereToSaveSecrets", i) - } + // store + bts, err := json.MarshalIndent(cnfg, "", " ") + if err != nil { + t.Fatalf("failed to marshal config: %v", err) + } - _path := path.Join(".", "setkey", "keys", specificKeysFolder, saveLocation) + if err := os.WriteFile(path.Join(d.saveFolder, "lkg.json"), bts, 0644); err != nil { + t.Fatalf("failed to write file: %v", err) + } +} - secretKey := cnfg.Secrets[i] - keypath := path.Join(_path, "key.pem") - if err := os.WriteFile( - keypath, - secretKey, - 0644, - ); err != nil { - t.Fatalf("failed to write file: %v", err) +func (d dkgTest) createDKGConfigs(t *testing.T) { + mainCnf := d.createLKG(t) + + for i := range d.hostnames { + output := fmt.Sprintf("guardian%d", i) + cnfg := SetupConfigs{ + NumParticipants: mainCnf.NumParticipants, + WantedThreshold: mainCnf.WantedThreshold, + Self: mainCnf.Peers[i], + SelfSecret: mainCnf.Secrets[i], + StorageLocation: output, + Peers: mainCnf.Peers, } - lkgpath := path.Join(_path, "secrets.json") - - args := []string{ - "run", "./setkey", - "--key=" + keypath, - "--lkg=" + lkgpath, + bts, err := json.MarshalIndent(cnfg, "", " ") + if err != nil { + t.Fatalf("failed to marshal config: %v", err) } - cmd := exec.Command("go", args...) - - // Link the binary's stdout/stderr to your Go program's output - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr + if err := os.MkdirAll(d.saveFolder, 0777); err != nil { + t.Fatalf("failed to create directory: %v", err) + } - if err := cmd.Run(); err != nil { - t.Fatalf("failed to run command: %v", err) + savepath := path.Join(d.saveFolder, strconv.Itoa(i)+".json") + if err := os.WriteFile(savepath, bts, 0644); err != nil { + t.Fatalf("failed to write file: %v", err) } } - - // setkey.Main([]string{ - // "-key", "../lkg/lkg.json", - // "-lkg", saveFile, - // }) } -func createLKGConfigs(t *testing.T) { - if _, err := os.Stat(saveFile); err == nil { - t.Fatalf("lkg.json already exists in lkg dir") - } else if !os.IsNotExist(err) { - t.Fatalf("unexpected error: %v", err) - } +func (d dkgTest) createLKG(t *testing.T) SetupConfigs { + hostnames := d.hostnames - cnfg := LKGConfig{ + mainCnf := SetupConfigs{ NumParticipants: len(hostnames), WantedThreshold: 2*(len(hostnames)/3) + 1, Peers: make([]Identifier, len(hostnames)), @@ -279,22 +278,118 @@ func createLKGConfigs(t *testing.T) { } for i, hostname := range hostnames { + port := 8998 + if d.forLocalDKG { + port += i + hostname = "localhost" + mainCnf.SaveLocation[i] = fmt.Sprintf("guardian%d", i) + } else { + mainCnf.SaveLocation[i] = extractRegion(hostname) + } sk, cert := createTLSCert(hostname) - cnfg.Peers[i] = Identifier{ + mainCnf.Peers[i] = Identifier{ Hostname: hostname, TlsX509: cert, + Port: port, } - cnfg.SaveLocation[i] = extractRegion(hostname) - cnfg.Secrets[i] = internal.PrivateKeyToPem(sk) + + mainCnf.Secrets[i] = internal.PrivateKeyToPem(sk) } + return mainCnf +} - bts, err := json.MarshalIndent(cnfg, "", " ") +func (d dkgTest) RunDKG(t *testing.T) { + errs := make(chan error, len(d.hostnames)) + + initialWd, err := os.Getwd() if err != nil { - t.Fatalf("failed to marshal config: %v", err) + t.Fatalf("failed to get working directory: %v", err) + } + defer func() { + if err := os.Chdir(initialWd); err != nil { + t.Fatalf("failed to restore working directory: %v", err) + } + }() + + if err := os.Chdir(d.saveFolder); err != nil { + t.Fatalf("failed to change working directory: %v", err) } - if err := os.WriteFile(saveFile, bts, 0644); err != nil { - t.Fatalf("failed to write file: %v", err) + for i := range d.hostnames { + serverPath := "server.go" + configPath := strconv.Itoa(i) + ".json" + // call go run ./dkg -cnfg -protocol + + args := []string{ + "run", + serverPath, + "-cnfg", configPath, + "-protocol", d.protocol.ToString(), + } + + if d.loadExisting { + args = append(args, "-secrets", path.Join(d.saveFolder, "guardian"+strconv.Itoa(i), "secrets.json")) + } + + // in parallel + cmd := exec.Command("go", args...) + + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + + if err := cmd.Start(); err != nil { + t.Fatalf("failed to start command: %v", err) + } + + fmt.Println("running command:", cmd.String()) + + go func(cmd *exec.Cmd, index int) { + // Wait for command to finish and send error (if any) back to the main goroutine. + if err := cmd.Wait(); err != nil { + errs <- fmt.Errorf("command %d failed: %v", index, err) + return + } + errs <- nil + }(cmd, i) + } + + fmt.Println("all commands started, waiting for results...") + time.Sleep(time.Second) + // collect results and fail from the test goroutine if any command failed + for i := 0; i < len(d.hostnames); i++ { + if err := <-errs; err != nil { + t.Fatalf("failed running dkg: %v", err) + } + } + + if !d.storeIntoInternalTestData { + return + } + // store the guardians into internal/testutils/testdata/dkg5 + mainFolder := "tss5" + resultDir := path.Join("..", "..", "..", "..", "internal", "testutils", "testdata", mainFolder) + cleanResultFolder(t, resultDir) + + for i := range d.hostnames { + saveLocation := fmt.Sprintf("guardian%d", i) + _path := path.Join(d.saveFolder, saveLocation, "secrets.json") + + //read the file into a GuardianStorage struct + gst, err := engine.NewGuardianStorageFromFile(_path) + if err != nil { + t.Fatalf("failed to read guardian storage from file: %v", err) + } + + // store into result dir: + filename := fmt.Sprintf("guardian%d.json", i) + filepath := path.Join(resultDir, filename) + bts, err := json.MarshalIndent(gst, "", " ") + if err != nil { + t.Fatalf("failed to marshal guardian storage: %v", err) + } + if err := os.WriteFile(filepath, bts, 0644); err != nil { + t.Fatalf("failed to write guardian storage to file: %v", err) + } } } diff --git a/node/pkg/tss/parse.go b/node/pkg/tss/parse.go index 5b3a0c11f3..cdf64d07f1 100644 --- a/node/pkg/tss/parse.go +++ b/node/pkg/tss/parse.go @@ -36,8 +36,8 @@ func (t *Engine) parseBroadcast(m Incoming) (broadcastMessage, error) { return nil, err } - if !isBroadcastMsg(p) { - return nil, fmt.Errorf("non-broadcast message received in broadcast router: %T. sender: %s", p, m.GetSource().Hostname) + if !isKnownBroadcastType(p) { + return nil, fmt.Errorf("unknown broadcast message received: %T. sender: %s", p.Content(), m.GetSource().NetworkName()) } parsed := &parsedTssContent{p, ""} diff --git a/node/pkg/tss/util.go b/node/pkg/tss/util.go index 247b3dec69..fd4299f18c 100644 --- a/node/pkg/tss/util.go +++ b/node/pkg/tss/util.go @@ -10,8 +10,10 @@ import ( tsscommv1 "github.com/certusone/wormhole/node/pkg/proto/tsscomm/v1" "github.com/wormhole-foundation/wormhole/sdk/vaa" - "github.com/xlabs/multi-party-sig/protocols/frost/keygen" - "github.com/xlabs/multi-party-sig/protocols/frost/sign" + cmpdkg "github.com/xlabs/multi-party-sig/protocols/cmp/keygen" + cmpsign "github.com/xlabs/multi-party-sig/protocols/cmp/sign" + frostdkg "github.com/xlabs/multi-party-sig/protocols/frost/keygen" + frostsign "github.com/xlabs/multi-party-sig/protocols/frost/sign" common "github.com/xlabs/tss-common" "github.com/xlabs/tss-lib/v2/party" "go.uber.org/zap" @@ -253,12 +255,16 @@ const ( round1Message signingRound = "round1" round2Message signingRound = "round2" round3Message signingRound = "round3" + round4Message signingRound = "round4" + round5Message signingRound = "round5" ) var _intToRoundArr = []signingRound{ round1Message, round2Message, round3Message, + round4Message, + round5Message, } func intToRound(i int) signingRound { @@ -286,15 +292,28 @@ func getRound(m common.ParsedMessage) (signingRound, error) { return _intToRoundArr[m.Content().RoundNumber()-1], nil } -func isBroadcastMsg(m common.ParsedMessage) bool { +// ensures content of a known broadcast type. +func isKnownBroadcastType(m common.ParsedMessage) bool { switch m.Content().(type) { - case *sign.Broadcast2: + case *frostsign.Broadcast2, *frostsign.Broadcast3: return true - case *sign.Broadcast3: + case *frostdkg.Broadcast2, *frostdkg.Broadcast3: return true - case *keygen.Broadcast2: + + case *cmpsign.Broadcast2, *cmpsign.Broadcast3, *cmpsign.Broadcast4, *cmpsign.Broadcast5: + return true + case *cmpdkg.Broadcast2, *cmpdkg.Broadcast3, *cmpdkg.Broadcast4, *cmpdkg.Broadcast5: + return true + default: + return false + } +} + +func isKnownUnicastType(m common.ParsedMessage) bool { + switch m.Content().(type) { + case *cmpsign.Message2, *cmpsign.Message3, *cmpsign.Message4: return true - case *keygen.Broadcast3: + case *frostdkg.Message3, *cmpdkg.Message4: return true default: return false