Skip to content

Commit d07f88c

Browse files
committed
Updated README.md adding instructions to reproduce running example
1 parent c50fb43 commit d07f88c

File tree

3 files changed

+54
-2
lines changed

3 files changed

+54
-2
lines changed

README.md

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,29 @@ The main class is [GoLiSA](go-lisa/src/main/java/it/unive/golisa/GoLiSA.java) an
3030

3131
`-i C:\Users\MyAccount\codeA.go -ci "contractA" "otherchannel" -i C:\Users\MyAccount\codeB.go -ci "contractB" "mychannel" -o C:\Users\MyAccount\output -f hyperledger-fabric -a cchi -xc`
3232

33-
## Publications
33+
34+
## GoLiSA Publications
35+
- Luca Olivieri: <i>Static Detection of Cross-Channel Invocation Issues in Hyperledger Fabric</i>, in Proceedings of The 36th IEEE International Symposium on Software Reliability Engineering , 2025
36+
- Luca Olivieri, David Beste, Luca Negrini, Lea Schönherr, Antonio Emanuele Cinà and Pietro Ferrara <i>Code Generation of Smart Contracts with LLMs: A Case Study on Hyperledger Fabric</i>, in Proceedings of The 36th IEEE International Symposium on Software Reliability Engineering , 2025
3437
- Luca Olivieri, Luca Negrini, Vincenzo Arceri, Pietro Ferrara, Agostino Cortesi: <i>Detection of Read-Write Issues in Hyperledger Fabric Smart Contracts</i>, in Proceedings of The 40th ACM/SIGAPP Symposium On Applied Computing (SAC), 2025 ([link](https://doi.org/10.1145/3672608.3707721))
3538
- Luca Olivieri, Luca Negrini, Vincenzo Arceri, Pietro Ferrara, Agostino Cortesi, Fausto Spoto: <i>Static Detection of Untrusted Cross-Contract Invocations in Go Smart Contracts</i> in Proceedings of The 40th ACM/SIGAPP Symposium On Applied Computing (SAC), 2025 ([link](https://doi.org/10.1145/3672608.3707728))
3639
- Luca Olivieri, Luca Negrini, Vincenzo Arceri, Badar Chachar, Pietro Ferrara, Agostino Cortesi: <i>Detection of Phantom Reads in Hyperledger Fabric</i>, in IEEE Access, vol. 12, pp. 80687-80697, 2024 ([link]([10.1109/ACCESS.2024.3410019](http://doi.org/10.1109/ACCESS.2024.3410019)))
3740
- Luca Olivieri, Luca Negrini, Vincenzo Arceri, Fabio Tagliaferro, Pietro Ferrara, Agostino Cortesi, Fausto Spoto: <i>Information Flow Analysis for Detecting Non-Determinism in Blockchain</i>. ECOOP 2023: 23:1-23:25 ([link](https://drops.dagstuhl.de/opus/volltexte/2023/18216/))
3841
- Luca Olivieri, Fabio Tagliaferro, Vincenzo Arceri, Marco Ruaro, Luca Negrini, Agostino Cortesi, Pietro Ferrara, Fausto Spoto, Enrico Talin:
3942
<i>Ensuring determinism in blockchain software with GoLiSA: an industrial experience report</i>. SOAP@PLDI 2022: 23-29 ([link](https://dl.acm.org/doi/10.1145/3520313.3534658))
4043

41-
## How to build the project ##
44+
## How to build the project
4245
GoLiSA comes as a Gradle 8.0 project. For development with Eclipse, please install the [Gradle IDE Pack](https://marketplace.eclipse.org/content/gradle-ide-pack) plugin from the Eclipse marketplace, and make sure to import the project into the workspace as a Gradle project.
46+
47+
## Experimental Evaluations
48+
The code in this branch allows to reproduce the results provided in <i>Static Detection of Cross-Channel Invocation Issues in Hyperledger Fabric</i>, in Proceedings of The 36th IEEE International Symposium on Software Reliability Engineering , 2025.
49+
Please look at the specific artifacts or branches cited in the corresponding research papers to reproduce other experimental evaluations and results.
50+
51+
### How to run the experiments of sample set (few minutes)
52+
53+
The sample set folder is located in `sample-set` and it contains samples of chaincodes proposed in the running example of the paper.
54+
55+
After the build of GoLiSA, it is possible to execute the analysis to this set directly running the following command:
56+
```
57+
./go-lisa/bin/go-lisa -i "sample-set/code1.go" -ci "Contract1" "channel-B" -i "sample-set/code2.go" -ci "Contract2" "channel-A" -a "cchi" -f "hyperledger-fabric" -xc -o "results/samples"
58+
```

sample-set/code1.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"github.com/hyperledger/fabric-chaincode-go/shim"
6+
"github.com/hyperledger/fabric-protos-go/peer"
7+
)
8+
9+
type Contract1 struct {
10+
}
11+
12+
func (s *Contract1) Invoke(stub shim.ChaincodeStubInterface) peer.Response {
13+
// ...
14+
contractName := "Contract2"
15+
channelName := "channel-A"
16+
resp := stub.InvokeChaincode(contractName, []byte(""),channelName)
17+
// ...
18+
return shim.Success([]byte("OK"))
19+
}

sample-set/code2.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package main
2+
3+
import (
4+
"bytes"
5+
"github.com/hyperledger/fabric/core/chaincode/shim"
6+
sc "github.com/hyperledger/fabric/protos/peer"
7+
)
8+
9+
type Contract2 struct {
10+
}
11+
12+
func (s *Contract2) Invoke(APIstub shim.ChaincodeStubInterface) sc.Response {
13+
// ...
14+
err := APIstub.PutState("key1", []byte("Bob"))
15+
// ...
16+
return shim.Success([]byte("OK"))
17+
}

0 commit comments

Comments
 (0)