104 lines
4.5 KiB
Markdown
104 lines
4.5 KiB
Markdown
|
# NeoFS smart-contract
|
||
|
|
||
|
This smart-contract controls list of NeoFS Inner Ring nodes and provides
|
||
|
methods to deposit and withdraw assets. These assets are used as a payment and
|
||
|
a reward for data storage.
|
||
|
|
||
|
|
||
|
## Getting Started
|
||
|
|
||
|
This repository contains:
|
||
|
|
||
|
- NeoFS smart-contract written in Go
|
||
|
- Unit tests for the smart-contract
|
||
|
|
||
|
### Prerequisites
|
||
|
|
||
|
To compile smart-contract you need:
|
||
|
|
||
|
- [neo-go](https://github.com/nspcc-dev/neo-go) >= 0.74.0
|
||
|
|
||
|
|
||
|
To run tests you need:
|
||
|
|
||
|
- [go](https://golang.org/dl/) >= 1.12
|
||
|
|
||
|
## Compiling
|
||
|
|
||
|
To compile smart contract run `make build` command. Compiled contract
|
||
|
`neofs_contract.avm` will be placed in the same directory.
|
||
|
|
||
|
```
|
||
|
$ make build
|
||
|
neo-go contract compile -i neofs_contract.go
|
||
|
02a600c56b6a007bc46a517bc468164e656f2e52756e74696d652e476574547269676765726165880d9e640700006c756668164e656f2e53746f726167652e476574436f6e74657874616a527bc46a00c376064465706c6f798764c7016a52c30d496e6e657252696e674c6973747c657c0d6a537bc46a5
|
||
|
3c3c000a0642f0019636f6e747261637420616c7265616479206465706c6f796564680f4e656f2e52756e74696d652e4c6f67f06a51c3c06a547bc46a54c35297009e6448003270726f76696465207061697273206f6620696e6e65722072696e67206164647265737320616e64207075626c6963206b65
|
||
|
...
|
||
|
c46a00c36a59c37c6592fd6476006a52c36a5ac36a59c3ad6469006a58c38b6a587bc4006a5b7bc46a5bc36a57c3c09f6444006a57c36a5bc3c36a59c387642b00156475706c6963617465207075626c6963206b657973680f4e656f2e52756e74696d652e4c6f67f06a5bc38b6a5b7bc462b7ff6a57c36
|
||
|
a59c3787cc86a577bc46a53c30161936a537bc46234ff6a58c36a56c3a2640700516c75661e6e6f7420656e6f756768207665726966696564207369676e617475726573680f4e656f2e52756e74696d652e4c6f6761006c7566
|
||
|
$ ls neofs_contract.avm
|
||
|
neofs_contract.avm
|
||
|
```
|
||
|
|
||
|
You can specify path to the `neo-go` binary with `NEOGO` environment variable:
|
||
|
|
||
|
```
|
||
|
$ NEOGO=/home/user/neo-go/bin/neo-go make build
|
||
|
```
|
||
|
|
||
|
## Running the tests
|
||
|
|
||
|
`neofs_contract_test.go` file contains tests for most of the provided methods.
|
||
|
It compiles smart-contract and uses instance of the NeoVM to run
|
||
|
code.
|
||
|
|
||
|
To test smart contract run `make tests` command.
|
||
|
|
||
|
```
|
||
|
$ make tests
|
||
|
go mod vendor
|
||
|
go test -mod=vendor -v -race github.com/nspcc-dev/neofs-contract
|
||
|
=== RUN TestContract
|
||
|
TestContract: neofs_contract_test.go:360: provide pairs of inner ring address and public key
|
||
|
TestContract: neofs_contract_test.go:360: contract already deployed
|
||
|
=== RUN TestContract/InnerRingAddress
|
||
|
TestContract: neofs_contract_test.go:360: target element has been removed
|
||
|
=== RUN TestContract/Deposit
|
||
|
TestContract: neofs_contract_test.go:360: funds have been transfered
|
||
|
=== RUN TestContract/Withdraw
|
||
|
=== RUN TestContract/Withdraw/Double_Withdraw
|
||
|
TestContract: neofs_contract_test.go:360: verification check has already been used
|
||
|
=== RUN TestContract/InnerRingCandidateAdd
|
||
|
=== RUN TestContract/InnerRingCandidateAdd/Double_InnerRingCandidateAdd
|
||
|
TestContract: neofs_contract_test.go:360: is already in list
|
||
|
=== RUN TestContract/InnerRingCandidateRemove
|
||
|
=== RUN TestContract/InnerRingCandidateRemove/Remove_unknown_candidate
|
||
|
TestContract: neofs_contract_test.go:360: target element has not been removed
|
||
|
TestContract: neofs_contract_test.go:360: target element has not been removed
|
||
|
=== RUN TestContract/InnerRingUpdate
|
||
|
TestContract/InnerRingUpdate: neofs_contract_test.go:174: implement getIRExcludeCheque without neofs-node dependency
|
||
|
--- PASS: TestContract (0.43s)
|
||
|
--- PASS: TestContract/InnerRingAddress (0.00s)
|
||
|
--- PASS: TestContract/Deposit (0.00s)
|
||
|
--- PASS: TestContract/Withdraw (0.01s)
|
||
|
--- PASS: TestContract/Withdraw/Double_Withdraw (0.00s)
|
||
|
--- PASS: TestContract/InnerRingCandidateAdd (0.00s)
|
||
|
--- PASS: TestContract/InnerRingCandidateAdd/Double_InnerRingCandidateAdd (0.00s)
|
||
|
--- PASS: TestContract/InnerRingCandidateRemove (0.00s)
|
||
|
--- PASS: TestContract/InnerRingCandidateRemove/Remove_unknown_candidate (0.00s)
|
||
|
--- SKIP: TestContract/InnerRingUpdate (0.00s)
|
||
|
PASS
|
||
|
ok github.com/nspcc-dev/neofs-contract 0.453s
|
||
|
```
|
||
|
|
||
|
### Skipped tests
|
||
|
|
||
|
Some tests might be skipped for now. These tests used `neofs-node`
|
||
|
structures, that are not publicly available yet, e.g. cheque for
|
||
|
`InnerRingUpdate` call.
|
||
|
|
||
|
## License
|
||
|
|
||
|
This project is licensed under the GPLv3 License - see the
|
||
|
[LICENSE.md](LICENSE.md) file for details
|