# Neo 3 privnet service

A single-node Neo3 privnet deployment running on
[neo-go](https://github.com/nspcc-dev/neo-go).

Contracts deployed:
- NeoFS [mainnet contract](https://github.com/nspcc-dev/neofs-contract)

## .env settings

### CHAIN_URL="https://fs.neo.org/dist/chain.gz"

URL to get main chain dump. Used on artifact get stage.

### CHAIN_PATH

Path to get main chain dump. If set, overrides `CHAIN_URL`.

### NEOGO_VERSION=0.91.1-pre-389-g71216865

Version on NeoGo container to use in both main privnet and sidechain.

## Main Privnet GAS

There is a wallet with GAS for both main privnet and side chain in
`wallets/wallet.json`.

```
$ neo-go wallet nep5 balance --token GAS \
    -w wallets/wallet.json \
    --addr NTrezR3C4X8aMLVg7vozt5wguyNfFhwuFx \
    -r http://main_chain.neofs.devenv:30333

TokenHash: 668e0c1f9d7b70a99dd9e06eadd4c784d641afbc
    Amount : 9987.92281340
    Updated: 13908
```

If you need GAS to deploy contracts on main privnet or create NeoFS account by
making deposits on NeoFS mainnet contract, you can transfer GAS from that
wallet.

Create new wallet

```
$ neo-go wallet init -a -w wallets/neofs1.json

Enter the name of the account > neofs1
Enter passphrase >
Confirm passphrase >

{
    "version": "3.0",
    "accounts": [
        {
            "address": "NXnzw3J9VvKXjM1BPAJK4QUpTtEQu4TpU6",
...
wallet successfully created, file location is wallets/neofs1.json
```

Transfer some GAS there
```
$ neo-go wallet nep5 transfer --privnet -w wallets/wallet.json \
    --from NTrezR3C4X8aMLVg7vozt5wguyNfFhwuFx \
    --to NXnzw3J9VvKXjM1BPAJK4QUpTtEQu4TpU6 \
    --amount 50 --token GAS \
    --rpc-endpoint http://main_chain.neofs.devenv:30333
```

Check it's there
```
$ neo-go wallet nep5 balance --token GAS \
    -w wallets/neofs1.json \
    --addr NXnzw3J9VvKXjM1BPAJK4QUpTtEQu4TpU6 \
    -r http://main_chain.neofs.devenv:30333

TokenHash: 668e0c1f9d7b70a99dd9e06eadd4c784d641afbc
    Amount : 50
    Updated: 14689
```

## Claim GAS from NEO on CN

If there is no enough GAS on `wallets/wallet.json` account, you can claim some
GAS from CN node's wallet from `services/chain/node-wallet.json` and then
transfer it. Wallet password can be found in
`services/chain/protocol.privnet.yml` file.

```
$ neo-go wallet claim -w services/chain/node-wallet.json \
    -a NVNvVRW5Q5naSx2k2iZm7xRgtRNGuZppAK \
    -r http://main_chain.neofs.devenv:30333

Password >
70e09bbd55846dcc7cee23905b737c63e5a80d32e387bce108bc6db8e641fb90
```

Then you can transfer GAS the same way as it was done in previous section.

```
neo-go wallet nep5 transfer --privnet -w services/chain/node-wallet.json \
    --from NVNvVRW5Q5naSx2k2iZm7xRgtRNGuZppAK \
    --to NXnzw3J9VvKXjM1BPAJK4QUpTtEQu4TpU6 \
    --amount 500 --token GAS \
    --rpc-endpoint http://main_chain.neofs.devenv:30333
```

## NeoFS GAS deposit

NeoFS identifies users by their Neo wallet key pair. To start using NeoFS in
devenv you need to transfer some GAS from Main privnet account to NeoFS main
contract's account by calling the `deposit` method.

First you need to get your account's LE encoded ScriptHash

```
$ neo-go util convert NXnzw3J9VvKXjM1BPAJK4QUpTtEQu4TpU6

Address to BE ScriptHash	82500e2e7de441e1b7378146ad91474f30fa1a0b
Address to LE ScriptHash	0b1afa304f4791ad468137b7e141e47d2e0e5082
Address to Base64 (BE)		glAOLn3kQeG3N4FGrZFHTzD6Ggs=
Address to Base64 (LE)		Cxr6ME9Hka1GgTe34UHkfS4OUII=
String to Hex				4e586e7a77334a3956764b586a4d314250414a4b3451557054744551753454705536
String to Base64			TlhuenczSjlWdktYak0xQlBBSks0UVVwVHRFUXU0VHBVNg==
```

And call the `deposit` method:
```
$ neo-go  contract invokefunction -w wallets/neofs1.json \
    -a NXnzw3J9VvKXjM1BPAJK4QUpTtEQu4TpU6 \
    -r http://main_chain.neofs.devenv:30333 \
    5f490fbd8010fd716754073ee960067d28549b7d \
    deposit 0b1afa304f4791ad468137b7e141e47d2e0e5082 \
    int:50 bytes: -- 0b1afa304f4791ad468137b7e141e47d2e0e5082

Enter account NXnzw3J9VvKXjM1BPAJK4QUpTtEQu4TpU6 password >
Sent invocation transaction 50e25f8e85c3b52dbd99381104cbe8056dad1a6e8809e8bf0e5d0a2527f55932
```