3232 applicationTemplateHashParam string
3333 factoryAddressParam string
3434 executionParametersFileParam string
35+ prtFactoryAddressParam string
36+ deploymentTypePRT bool
3537)
3638
3739var applicationCmd = & cobra.Command {
@@ -52,7 +54,8 @@ Supported Environment Variables:
5254 CARTESI_BLOCKCHAIN_HTTP_ENDPOINT Blockchain HTTP endpoint
5355 CARTESI_CONTRACTS_INPUT_BOX_ADDRESS Input Box contract address
5456 CARTESI_CONTRACTS_APPLICATION_FACTORY_ADDRESS Application Factory address
55- CARTESI_CONTRACTS_SELF_HOSTED_APPLICATION_FACTORY_ADDRESS Self Hosted Application Factory address` ,
57+ CARTESI_CONTRACTS_SELF_HOSTED_APPLICATION_FACTORY_ADDRESS Self Hosted Application Factory address
58+ CARTESI_CONTRACTS_PRT_FACTORY_ADDRESS PRT Factory address` ,
5659}
5760
5861const applicationExamples = `
@@ -62,20 +65,25 @@ const applicationExamples = `
6265# deploy an application contract using an existing consensus, then register the application
6366 - cli deploy application echo-dapp applications/echo-dapp/ --consensus=0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
6467
68+ # deploy an application contract with a PRT consensus, then register the application
69+ - cli deploy application echo-dapp applications/echo-dapp/ --prt
70+
6571# deploy but don't register into the database
6672 - cli deploy application echo-dapp applications/echo-dapp/ --register=false
6773
6874# deploy and register into the database, but disabled
6975 - cli deploy application echo-dapp applications/echo-dapp/ --enable=false
7076
71- # deploy an application without a machine template path (both application-name and template-path may be ommited in this case)
77+ # deploy an application without a machine template path (both application-name and template-path may be omitted in this case)
7278 - cli deploy application --template-hash=0x0000000000000000000000000000000000000000000000000000000000000000 --register=false`
7379
7480func init () {
7581 applicationCmd .Flags ().StringVarP (& applicationConsensusAddressParam , "consensus" , "c" , "" ,
7682 "Consensus address. A new authority consensus will be created if this field is left empty." )
7783 applicationCmd .Flags ().StringVarP (& factoryAddressParam , "factory" , "f" , "" ,
7884 "Application factory address. Default value is retrieved from configuration." )
85+ applicationCmd .Flags ().StringVarP (& prtFactoryAddressParam , "prt-factory" , "" , "" ,
86+ "PRT Application factory address. Default value is retrieved from configuration." )
7987 applicationCmd .Flags ().StringVarP (& applicationOwnerAddressParam , "application-owner" , "o" , "" ,
8088 "Application owner address. If not defined, it will be derived from the auth method." )
8189 applicationCmd .Flags ().StringVarP (& applicationDataAvailabilityParam , "data-availability" , "d" , "" ,
@@ -90,6 +98,8 @@ func init() {
9098 "Start processing the application, requires 'register=true'." )
9199 applicationCmd .Flags ().StringVarP (& authorityOwnerAddressParam , "authority-owner" , "O" , "" ,
92100 "Authority Owner address. If not defined, it will be derived from the auth method." )
101+ applicationCmd .Flags ().BoolVarP (& deploymentTypePRT , "prt" , "" , false ,
102+ "Deploy a PRT application." )
93103
94104 origHelpFunc := applicationCmd .HelpFunc ()
95105 applicationCmd .SetHelpFunc (func (command * cobra.Command , strings []string ) {
@@ -146,7 +156,9 @@ func runDeployApplication(cmd *cobra.Command, args []string) {
146156 }
147157
148158 var deployment ethutil.IApplicationDeployment
149- if deploySelfhosted := ! cmd .Flags ().Changed ("consensus" ); deploySelfhosted {
159+ if deploymentTypePRT {
160+ deployment , err = buildPrtApplicationDeployment (ctx , cmd , args , client , txOpts )
161+ } else if deploySelfhosted := ! cmd .Flags ().Changed ("consensus" ); deploySelfhosted {
150162 deployment , err = buildSelfhostedApplicationDeployment (ctx , cmd , args , client , txOpts )
151163 } else {
152164 deployment , err = buildApplicationOnlyDeployment (ctx , cmd , args , client , txOpts )
@@ -235,6 +247,15 @@ func runDeployApplication(cmd *cobra.Command, args []string) {
235247 application .EpochLength = res .Deployment .EpochLength
236248 application .DataAvailability = res .Deployment .DataAvailability
237249 application .IInputBoxBlock = res .Deployment .IInputBoxBlock
250+
251+ case * ethutil.PRTApplicationDeploymentResult :
252+ application .IApplicationAddress = res .ApplicationResult .ApplicationAddress
253+ application .IConsensusAddress = res .ApplicationResult .Deployment .Consensus
254+ application .IInputBoxAddress = res .ApplicationResult .Deployment .InputBoxAddress
255+ application .TemplateHash = res .ApplicationResult .Deployment .TemplateHash
256+ application .EpochLength = res .ApplicationResult .Deployment .EpochLength
257+ application .DataAvailability = res .ApplicationResult .Deployment .DataAvailability
258+ application .IInputBoxBlock = res .ApplicationResult .Deployment .IInputBoxBlock
238259 default :
239260 panic ("unimplemented deployment type\n " )
240261 }
@@ -382,7 +403,7 @@ func buildSelfhostedApplicationDeployment(
382403 return request , nil
383404}
384405
385- func buildApplicationOnlyDeployment (
406+ func buildApplicationOnlyDeploymentWithoutConsensus (
386407 ctx context.Context ,
387408 cmd * cobra.Command ,
388409 args []string ,
@@ -404,11 +425,6 @@ func buildApplicationOnlyDeployment(
404425 return nil , fmt .Errorf ("error on parameter factory: %w" , err )
405426 }
406427
407- request .Consensus , err = parseHexAddress (applicationConsensusAddressParam )
408- if err != nil {
409- return nil , fmt .Errorf ("error on parameter consensus: %w" , err )
410- }
411-
412428 if ! cmd .Flags ().Changed ("template-hash" ) {
413429 if len (args ) >= 2 { // args[1] is mandatory if `template-hash` was absent
414430 request .TemplateHash , err = readHash (args [1 ])
@@ -470,6 +486,60 @@ func buildApplicationOnlyDeployment(
470486 return request , nil
471487}
472488
489+ func buildApplicationOnlyDeployment (
490+ ctx context.Context ,
491+ cmd * cobra.Command ,
492+ args []string ,
493+ client * ethclient.Client ,
494+ txOpts * bind.TransactOpts ,
495+ ) (
496+ * ethutil.ApplicationDeployment ,
497+ error ,
498+ ) {
499+ request , err := buildApplicationOnlyDeploymentWithoutConsensus (ctx , cmd , args , client , txOpts )
500+
501+ request .Consensus , err = parseHexAddress (applicationConsensusAddressParam )
502+ if err != nil {
503+ return nil , fmt .Errorf ("error on parameter consensus: %w" , err )
504+ }
505+
506+ request .Consensus , request .EpochLength , err = customConsensus (client , applicationConsensusAddressParam )
507+ if err != nil {
508+ return nil , fmt .Errorf ("error on parameter consensus: %w" , err )
509+ }
510+
511+ return request , nil
512+ }
513+
514+ func buildPrtApplicationDeployment (
515+ ctx context.Context ,
516+ cmd * cobra.Command ,
517+ args []string ,
518+ client * ethclient.Client ,
519+ txOpts * bind.TransactOpts ,
520+ ) (
521+ * ethutil.PRTApplicationDeployment ,
522+ error ,
523+ ) {
524+ var err error
525+ request := & ethutil.PRTApplicationDeployment {}
526+ if ! cmd .Flags ().Changed ("prt-factory" ) {
527+ request .FactoryAddress , err = config .GetContractsPrtFactoryAddress ()
528+ } else {
529+ request .FactoryAddress , err = parseHexAddress (factoryAddressParam )
530+ }
531+ if err != nil {
532+ return nil , fmt .Errorf ("error on parameter factory: %w" , err )
533+ }
534+
535+ request .Application , err = buildApplicationOnlyDeploymentWithoutConsensus (ctx , cmd , args , client , txOpts )
536+ if err != nil {
537+ return nil , fmt .Errorf ("error on application: %w" , err )
538+ }
539+
540+ return request , nil
541+ }
542+
473543// read the hash value from the cartesi machine hash file
474544func readHash (machineDir string ) (common.Hash , error ) {
475545 zero := common.Hash {}
0 commit comments