Skip to content

Commit 8a5b02e

Browse files
authored
Merge pull request #319 from hyperledger/quorum-nodiscover
Add --nodiscover to Quorum command line
2 parents 56ebc8f + e1707ea commit 8a5b02e

File tree

6 files changed

+51
-41
lines changed

6 files changed

+51
-41
lines changed

.gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,7 @@ dist/
2121
*.iml
2222
.idea/
2323
docs/command_docs
24-
coverage.txt
24+
coverage.txt
25+
.vscode
26+
!.vscode/launch.json
27+
!.vscode/settings.json

internal/blockchain/ethereum/ethsigner/config.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package ethsigner
1919
import (
2020
"os"
2121

22-
"gopkg.in/yaml.v2"
22+
"gopkg.in/yaml.v3"
2323
)
2424

2525
type FileWalletFilenamesConfig struct {

internal/blockchain/ethereum/quorum/quorum.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,15 @@ import (
2222
"os"
2323
"path/filepath"
2424

25+
"github.com/hyperledger/firefly-cli/internal/blockchain/ethereum/tessera"
2526
"github.com/hyperledger/firefly-cli/internal/docker"
2627
"github.com/hyperledger/firefly-cli/pkg/types"
2728
"github.com/hyperledger/firefly-common/pkg/fftypes"
2829
)
2930

31+
var DockerEntrypoint = "docker-entrypoint.sh"
32+
var QuorumPort = "8545"
33+
3034
func CreateQuorumEntrypoint(ctx context.Context, outputDirectory, consensus, stackName string, memberIndex, chainID, blockPeriodInSeconds int, privateTransactionManager fftypes.FFEnum) error {
3135
discoveryCmd := "BOOTNODE_CMD=\"\""
3236
connectTimeout := 15
@@ -47,7 +51,7 @@ ADDITIONAL_ARGS="${ADDITIONAL_ARGS:-} --ptm.timeout 5 --ptm.url ${TESSERA_URL}:$
4751
echo -n "Checking tessera is up ... "
4852
curl --connect-timeout %[4]d --max-time %[4]d --retry 5 --retry-connrefused --retry-delay 0 --retry-max-time 60 --silent --fail "${TESSERA_UPCHECK_URL}"
4953
echo ""
50-
`, memberIndex, TmTpPort, TmQ2tPort, connectTimeout, stackName)
54+
`, memberIndex, tessera.TmTpPort, tessera.TmQ2tPort, connectTimeout, stackName)
5155
}
5256

5357
blockPeriod := blockPeriodInSeconds
@@ -94,7 +98,7 @@ ADDITIONAL_ARGS=${ADDITIONAL_ARGS:-}
9498
echo "bootnode discovery command :: $BOOTNODE_CMD"
9599
IP_ADDR=$(cat /etc/hosts | tail -n 1 | awk '{print $1}')
96100
97-
exec geth --datadir /data --nat extip:$IP_ADDR --syncmode 'full' --revertreason --port 30311 --http --http.addr "0.0.0.0" --http.corsdomain="*" -http.port %[4]s --http.vhosts "*" --http.api admin,personal,eth,net,web3,txpool,miner,debug,$QUORUM_API --networkid %[5]d --miner.gasprice 0 --password /data/password --mine --allow-insecure-unlock --verbosity 4 $CONSENSUS_ARGS $BOOTNODE_CMD $ADDITIONAL_ARGS`, consensus, tesseraCmd, discoveryCmd, QuorumPort, chainID, blockPeriod, blockPeriodInMs)
101+
exec geth --datadir /data --nat extip:$IP_ADDR --syncmode 'full' --revertreason --port 30311 --http --http.addr "0.0.0.0" --http.corsdomain="*" -http.port %[4]s --http.vhosts "*" --http.api admin,personal,eth,net,web3,txpool,miner,debug,$QUORUM_API --networkid %[5]d --miner.gasprice 0 --password /data/password --mine --allow-insecure-unlock --nodiscover --verbosity 4 $CONSENSUS_ARGS $BOOTNODE_CMD $ADDITIONAL_ARGS`, consensus, tesseraCmd, discoveryCmd, QuorumPort, chainID, blockPeriod, blockPeriodInMs)
98102
filename := filepath.Join(outputDirectory, DockerEntrypoint)
99103
if err := os.MkdirAll(outputDirectory, 0755); err != nil {
100104
return err

internal/blockchain/ethereum/quorum/quorum_provider.go

+38-34
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/hyperledger/firefly-cli/internal/blockchain/ethereum/connector"
3232
"github.com/hyperledger/firefly-cli/internal/blockchain/ethereum/connector/ethconnect"
3333
"github.com/hyperledger/firefly-cli/internal/blockchain/ethereum/connector/evmconnect"
34+
"github.com/hyperledger/firefly-cli/internal/blockchain/ethereum/tessera"
3435
"github.com/hyperledger/firefly-cli/internal/docker"
3536
"github.com/hyperledger/firefly-cli/internal/log"
3637
"github.com/hyperledger/firefly-cli/pkg/types"
@@ -78,10 +79,10 @@ func (p *QuorumProvider) WriteConfig(options *types.InitOptions) error {
7879
}
7980

8081
// Generate tessera docker-entrypoint for each member
81-
if !p.stack.PrivateTransactionManager.Equals(types.PrivateTransactionManagerNone) {
82+
if p.stack.PrivateTransactionManager.Equals(types.PrivateTransactionManagerTessera) {
8283
l.Info(fmt.Sprintf("generating tessera docker-entrypoint file for member %d", i))
8384
tesseraEntrypointOutputDirectory := filepath.Join(initDir, "tessera", fmt.Sprintf("tessera_%d", i))
84-
if err := CreateTesseraEntrypoint(p.ctx, tesseraEntrypointOutputDirectory, p.stack.Name, len(p.stack.Members)); err != nil {
85+
if err := tessera.CreateTesseraEntrypoint(p.ctx, tesseraEntrypointOutputDirectory, p.stack.Name, len(p.stack.Members)); err != nil {
8586
return err
8687
}
8788
}
@@ -143,7 +144,7 @@ func (p *QuorumProvider) FirstTimeSetup() error {
143144
return err
144145
}
145146

146-
if !p.stack.PrivateTransactionManager.Equals(types.PrivateTransactionManagerNone) {
147+
if p.stack.PrivateTransactionManager.Equals(types.PrivateTransactionManagerTessera) {
147148
// Copy member specific tessera key files
148149
if err := p.dockerMgr.MkdirInVolume(p.ctx, tesseraVolumeNameMember, rootDir); err != nil {
149150
return err
@@ -153,14 +154,14 @@ func (p *QuorumProvider) FirstTimeSetup() error {
153154
return err
154155
}
155156
// Copy tessera docker-entrypoint file
156-
tmEntrypointPath := filepath.Join(tesseraDir, fmt.Sprintf("tessera_%d", i), DockerEntrypoint)
157+
tmEntrypointPath := filepath.Join(tesseraDir, fmt.Sprintf("tessera_%d", i), tessera.DockerEntrypoint)
157158
if err := p.dockerMgr.CopyFileToVolume(p.ctx, tesseraVolumeNameMember, tmEntrypointPath, rootDir); err != nil {
158159
return err
159160
}
160161
}
161162

162163
// Copy quorum docker-entrypoint file
163-
quorumEntrypointPath := filepath.Join(blockchainDir, fmt.Sprintf("quorum_%d", i), DockerEntrypoint)
164+
quorumEntrypointPath := filepath.Join(blockchainDir, fmt.Sprintf("quorum_%d", i), tessera.DockerEntrypoint)
164165
if err := p.dockerMgr.CopyFileToVolume(p.ctx, quorumVolumeNameMember, quorumEntrypointPath, rootDir); err != nil {
165166
return err
166167
}
@@ -236,43 +237,46 @@ func (p *QuorumProvider) DeployFireFlyContract() (*types.ContractDeploymentResul
236237
return p.connector.DeployContract(contract, "FireFly", p.stack.Members[0], nil)
237238
}
238239

240+
func (p *QuorumProvider) buildTesseraServiceDefinition(memberIdx int) *docker.ServiceDefinition {
241+
return &docker.ServiceDefinition{
242+
ServiceName: fmt.Sprintf("tessera_%d", memberIdx),
243+
Service: &docker.Service{
244+
Image: tesseraImage,
245+
ContainerName: fmt.Sprintf("%s_member%dtessera", p.stack.Name, memberIdx),
246+
Volumes: []string{fmt.Sprintf("tessera_%d:/data", memberIdx)},
247+
Logging: docker.StandardLogOptions,
248+
Ports: []string{fmt.Sprintf("%d:%s", p.stack.ExposedPtmPort+(memberIdx*ExposedBlockchainPortMultiplier), tessera.TmTpPort)}, // defaults 4100, 4110, 4120, 4130
249+
Environment: p.stack.EnvironmentVars,
250+
EntryPoint: []string{"/bin/sh", "-c", "/data/docker-entrypoint.sh"},
251+
Deploy: map[string]interface{}{"restart_policy": map[string]interface{}{"condition": "on-failure", "max_attempts": int64(3)}},
252+
HealthCheck: &docker.HealthCheck{
253+
Test: []string{
254+
"CMD",
255+
"curl",
256+
"--fail",
257+
fmt.Sprintf("http://localhost:%s/upcheck", tessera.TmTpPort),
258+
},
259+
Interval: "15s", // 6000 requests in a day
260+
Retries: 30,
261+
},
262+
},
263+
VolumeNames: []string{fmt.Sprintf("tessera_%d", memberIdx)},
264+
}
265+
}
266+
239267
func (p *QuorumProvider) GetDockerServiceDefinitions() []*docker.ServiceDefinition {
240268
memberCount := len(p.stack.Members)
241269
serviceDefinitionsCount := memberCount
242-
if !p.stack.PrivateTransactionManager.Equals(types.PrivateTransactionManagerNone) {
270+
if p.stack.PrivateTransactionManager.Equals(types.PrivateTransactionManagerTessera) {
243271
serviceDefinitionsCount *= 2
244272
}
245273
serviceDefinitions := make([]*docker.ServiceDefinition, serviceDefinitionsCount)
246274
connectorDependents := map[string]string{}
247275
for i := 0; i < memberCount; i++ {
248276
var quorumDependsOn map[string]map[string]string
249-
if !p.stack.PrivateTransactionManager.Equals(types.PrivateTransactionManagerNone) {
277+
if p.stack.PrivateTransactionManager.Equals(types.PrivateTransactionManagerTessera) {
250278
quorumDependsOn = map[string]map[string]string{fmt.Sprintf("tessera_%d", i): {"condition": "service_healthy"}}
251-
serviceDefinitions[i+memberCount] = &docker.ServiceDefinition{
252-
ServiceName: fmt.Sprintf("tessera_%d", i),
253-
Service: &docker.Service{
254-
Image: tesseraImage,
255-
ContainerName: fmt.Sprintf("%s_member%dtessera", p.stack.Name, i),
256-
Volumes: []string{fmt.Sprintf("tessera_%d:/data", i)},
257-
Logging: docker.StandardLogOptions,
258-
Ports: []string{fmt.Sprintf("%d:%s", p.stack.ExposedPtmPort+(i*ExposedBlockchainPortMultiplier), TmTpPort)}, // defaults 4100, 4110, 4120, 4130
259-
Environment: p.stack.EnvironmentVars,
260-
EntryPoint: []string{"/bin/sh", "-c", "/data/docker-entrypoint.sh"},
261-
Deploy: map[string]interface{}{"restart_policy": map[string]interface{}{"condition": "on-failure", "max_attempts": int64(3)}},
262-
HealthCheck: &docker.HealthCheck{
263-
Test: []string{
264-
"CMD",
265-
"curl",
266-
"--fail",
267-
fmt.Sprintf("http://localhost:%s/upcheck", TmTpPort),
268-
},
269-
Interval: "15s", // 6000 requests in a day
270-
Retries: 30,
271-
},
272-
},
273-
VolumeNames: []string{fmt.Sprintf("tessera_%d", i)},
274-
}
275-
279+
serviceDefinitions[i+memberCount] = p.buildTesseraServiceDefinition(i)
276280
// No arm64 images for Tessera
277281
if runtime.GOARCH == "arm64" {
278282
serviceDefinitions[i+memberCount].Service.Platform = "linux/amd64"
@@ -377,9 +381,9 @@ func (p *QuorumProvider) CreateAccount(args []string) (interface{}, error) {
377381

378382
// Tessera is an optional add-on to the quorum blockchain node provider
379383
var tesseraPubKey, tesseraKeysPath string
380-
if !p.stack.PrivateTransactionManager.Equals(types.PrivateTransactionManagerNone) {
384+
if p.stack.PrivateTransactionManager.Equals(types.PrivateTransactionManagerTessera) {
381385
tesseraKeysOutputDirectory := filepath.Join(directory, "tessera", fmt.Sprintf("tessera_%s", memberIndex), "keystore")
382-
_, tesseraPubKey, tesseraKeysPath, err = CreateTesseraKeys(p.ctx, tesseraImage, tesseraKeysOutputDirectory, "", "tm")
386+
_, tesseraPubKey, tesseraKeysPath, err = tessera.CreateTesseraKeys(p.ctx, tesseraImage, tesseraKeysOutputDirectory, "", "tm")
383387
if err != nil {
384388
return nil, err
385389
}

internal/blockchain/ethereum/quorum/private_transaction_manager.go internal/blockchain/ethereum/tessera/tessera.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
// See the License for the specific language governing permissions and
1515
// limitations under the License.
1616

17-
package quorum
17+
package tessera
1818

1919
import (
2020
"context"
@@ -32,7 +32,6 @@ var DockerEntrypoint = "docker-entrypoint.sh"
3232
var TmQ2tPort = "9101"
3333
var TmTpPort = "9080"
3434
var TmP2pPort = "9000"
35-
var QuorumPort = "8545"
3635

3736
type PrivateKeyData struct {
3837
Bytes string `json:"bytes"`

internal/blockchain/ethereum/quorum/private_transaction_manager_test.go internal/blockchain/ethereum/tessera/tessera_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package quorum
1+
package tessera
22

33
import (
44
"context"

0 commit comments

Comments
 (0)