# sol-proxy

> A tool for making any Solidity contract into a proxy contract, per EIP 1822.

Latest version **0.1.2** (published 2019-09-19) · GPL-3.0 license · 0 weekly downloads

## Install

```sh
npm install sol-proxy
pnpm add sol-proxy
yarn add sol-proxy
bun add sol-proxy
```

Provides the command `sol-proxy`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.2 |
| Published | 2019-09-19 |
| First published | 2019-09-19 |
| Weekly downloads | 0 |
| License | GPL-3.0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 8 |
| Unpacked size | 377.8 KB |
| Known vulnerabilities | 0 (+4 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 4 |
| Author | pi0neerpat |
| Maintainers | pi0neerpat |

## Links

- npm: https://www.npmjs.com/package/sol-proxy
- Repository: https://github.com/pi0neerpat/sol-proxy
- Homepage: https://github.com/pi0neerpat/sol-proxy#readme
- Issues: https://github.com/pi0neerpat/sol-proxy/issues
- npm.io page: https://npm.io/package/sol-proxy

## Dependencies (8)

- [npm](https://npm.io/package/npm.md) ^5.7.1
- [solpp](https://npm.io/package/solpp.md) ^0.10.2
- [yargs](https://npm.io/package/yargs.md) ^11.0.0
- [colors](https://npm.io/package/colors.md) ^1.2.1
- [prettier](https://npm.io/package/prettier.md) ^1.18.2
- [c3-linearization](https://npm.io/package/c3-linearization.md) ^0.2.0
- [solidity-parser-antlr](https://npm.io/package/solidity-parser-antlr.md) ^0.2.8
- [prettier-plugin-solidity](https://npm.io/package/prettier-plugin-solidity.md) ^1.0.0-alpha.32

## Recent versions

- 0.1.2 (latest) — 2019-09-19
- 0.1.1 — 2019-09-19
- 0.1.0 — 2019-09-19

## README

# Solidity Proxy Creator (sol-proxy)

![npm version](https://img.shields.io/npm/v/sol-proxy.svg)

A tool (currently in alpha) for turning any Solidity contract into a proxy contract, per [EIP 1822](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1822.md).

> This tool wouldn't have been possible without [Frederico Bond](https://github.com/federicobond), creator of [Solidity Parser ANTLR](https://github.com/federicobond/solidity-parser-antlr) and [Solidity Inspector (soli)](https://github.com/federicobond/soli). Fun fact: [many other projects](https://www.npmjs.com/browse/depended/solidity-parser-antlr) rely on Solidity Parser, including Solidity-coverage, OpenZeppelin CLI, Prettier Plugin for Solidity, and many more smart contract visualization/inspection utilities... that's pretty neat!

## Getting Started

Install it via npm:

```shell
npm install -g sol-proxy
```

## Usage

### 1. Create `Storage.sol`

The `create` command generates `Storage.sol` which contains all the contract variables.

```shell
sol-proxy create contracts/MyContract.sol
```

>note: if you've already run this command, you will need to remove the `Storage.sol` import and the Storage inheritance in your contract. You will add this back at the end.

### 2. Variable Ordering

:warning: Ensure the variables have not been re-ordered from a previously deployed version of the contract. Failure to maintain variable ordering can permanently corrupt your deployed contract.

Simply adjust the variables until they are in the correct order, with any **new variables added at the end**.

:eyes: Get a few friends to double-check this.

### 3. Cleanup

1. Remove duplicate `pragma` declarations.
2. Add necessary import statements.
3. All structs should be removed from `Storage.sol`. If any of these structs are needed in `Storage.sol`, they must also be removed from their original contract and placed into a separate `Structs.sol`. If needed, import `Structs.sol` into `Storage.sol` and other dependent contracts.
4. Add an import and inheritance for `Storage.sol` and `Proxiable.sol` to your contract.

```solidity
pragma solidity ^0.5.8;

import {Storage} from "./Storage.sol";
import {Proxiable} from "./Proxiable.sol";

contract MyToken is Storage, Proxiable {
  //...
```

Refer to [EIP 1822](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1822.md) to get a better understanding of using this Proxy.

## License

GPL-3.0

---
_Source: https://npm.io/package/sol-proxy · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
