commit 4f7a0681643da1422bbd3a865ae1cb59adeab902
parent 70972e2bf8cb2b8a33c1ae03419673e36236ea90
Author: lash <dev@holbrook.no>
Date: Sat, 19 Feb 2022 20:27:02 +0000
Merge branch 'master' into lash/statictoken
Diffstat:
10 files changed, 99 insertions(+), 55 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -5,3 +5,4 @@ build/
gmon.out
*.egg-info
.venv/
+.idea
+\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
@@ -1,26 +1,67 @@
stages:
- test
+ - run-coverage
- slither-analyzer
+
+variables:
+ PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
+
+cache:
+ paths:
+ - .cache/pip
+ - venv/
+
+before_script:
+ - python -V # Print out python version for debugging
+ - pip install virtualenv
+ - virtualenv venv
+ - source venv/bin/activate
+
test:
- image: registry.gitlab.com/grassrootseconomics/cic-base-images/ci-solc-py-alpine:latest
- cache:
- - key:
- files:
- - requirements.txt
- - test_requirements.txt
- paths:
- - /root/.cache/pip
+ image: registry.gitlab.com/grassrootseconomics/cic-base-images/ci-solc-python:latest
script:
- - cd python
- - pip install --extra-index-url https://pip.grassrootseconomics.net:8433 -r test_requirements.txt
- - pip install --extra-index-url https://pip.grassrootseconomics.net:8433 -r test_requirements.txt
- - bash run_tests.sh
+ # build abi
+ - 'echo "Running Solc Version: $(solc --version)"'
+ - cd solidity
+ - solc --evm-version=byzantium GiftableToken.sol --abi | awk 'NR>3' > GiftableToken.abi.json
+ # build bin
+ - solc GiftableToken.sol --bin | awk 'NR>3' > GiftableToken.bin &&
+ truncate -s "$((`stat -t -c "%s" GiftableToken.bin`-1))" GiftableToken.bin
+ # install test dependencies
+ - cd ../python
+ - export PYTHONPATH=.
+ - pip install --extra-index-url https://pip.grassrootseconomics.net
+ --extra-index-url https://gitlab.com/api/v4/projects/27624814/packages/pypi/simple
+ -r requirements.txt -r test_requirements.txt
+ # run tests
+ - bash run_tests.sh
+run-coverage:
+ stage: test
+ image: registry.gitlab.com/grassrootseconomics/cic-base-images/ci-solc-python:latest
+ script:
+ - cd python
+ - export PYTHONPATH=.
+ - pip install --extra-index-url https://pip.grassrootseconomics.net
+ --extra-index-url https://gitlab.com/api/v4/projects/27624814/packages/pypi/simple
+ -r requirements.txt -r test_requirements.txt
+ - pip install pytest pytest-cov
+ - coverage run -m pytest
+ - coverage html
+ - coverage report --fail-under=90
+
+ coverage: '/^TOTAL.+?(\d+\%)$/'
+ artifacts:
+ reports:
+ cobertura: python/htmlcov/index.html
-slither-analize:
- image: registry.gitlab.com/grassrootseconomics/cic-base-images/ci-solc-py-alpine:latest
+slither-analyzer:
+ image: registry.gitlab.com/grassrootseconomics/cic-base-images/ci-solc-python:latest
+ allow_failure: true
script:
- - pip install slither-analyzer
- - slither solidity/
+ - cd solidity
+ - slither GiftableToken.sol
+ - slither GiftableToken.sol --print human-summary
+
diff --git a/Dockerfile b/Dockerfile
@@ -1,33 +0,0 @@
-FROM ethereum/solc:0.6.12
-
-FROM python:3.8.6-alpine
-
-COPY --from=0 /usr/bin/solc /usr/bin/solc
-
-RUN apk update &&\
- apk add gcc bash musl-dev libffi-dev openssl-dev autoconf automake build-base \
- libtool pkgconfig python3-dev cargo
-
-WORKDIR /usr/src
-
-# Try to keep everything above here re-usable!
-
-COPY ./solidity/ /usr/src/giftable_erc20_token/solidity/
-COPY ./python/ /usr/src/giftable_erc20_token/python/
-
-RUN chmod +x ./python/run_tests.sh
-
-RUN cd giftable_erc20_token/solidity && \
- solc GiftableToken.sol --abi | awk 'NR>3' > GiftableToken.abi.json
-
-RUN cd giftable_erc20_token/solidity && \
- solc GiftableToken.sol --bin | awk 'NR>3' > GiftableToken.bin && \
- truncate -s "$((`stat -t -c "%s" GiftableToken.bin`-1))" GiftableToken.bin
-
-RUN cd giftable_erc20_token/python && \
- pip install --extra-index-url https://pip.grassrootseconomics.net:8433 .
-
-RUN pip install slither-analyzer
-
-# To deploy:
-# giftable-token-deploy --contracts-dir giftable_erc20_token/solidity/ <amount>
diff --git a/README.md b/README.md
@@ -0,0 +1,25 @@
+# ETH-ERC20 Solidity Contract
+
+
+### solidity
+
+To generate bytecode and tests install solc 8.x.x and run the solc bits below or execute the following:
+
+```
+docker run -v `pwd`:/src registry.gitlab.com/grassrootseconomics/cic-base-images/ci-solc-python:latest solc --evm-version=byzantium solidity/GiftableToken.sol --abi
+```
+
+```
+docker run -v `pwd`:/src registry.gitlab.com/grassrootseconomics/cic-base-images/ci-solc-python:latest solc GiftableToken.sol --bin | awk 'NR>3' > GiftableToken.bin
+```
+
+### python unit tests
+
+```
+pip install --extra-index-url https://gitlab.com/api/v4/projects/27624814/packages/pypi/simple \
+--extra-index-url https://pip.grassrootseconomics.net \
+-r requirements.txt -r test_requirements.txt
+
+bash python/run_tests.sh
+
+```
diff --git a/python/.coverage b/python/.coverage
Binary files differ.
diff --git a/python/.coveragerc b/python/.coveragerc
@@ -0,0 +1,7 @@
+[run]
+branch = True
+[report]
+omit = .venv/*
+ **/runnable/*.py
+[html]
+
diff --git a/python/giftable_erc20_token/factory.py b/python/giftable_erc20_token/factory.py
@@ -94,4 +94,4 @@ class GiftableToken(TxFactory):
tx = self.template(sender_address, contract_address, use_nonce=True)
tx = self.set_code(tx, data)
tx = self.finalize(tx, tx_format)
- return tx
+ return tx
+\ No newline at end of file
diff --git a/python/run_tests.sh b/python/run_tests.sh
diff --git a/python/tests/test_erc20_interface.py b/python/tests/test_erc20_interface.py
@@ -12,6 +12,7 @@ from chainlib.eth.tx import (
receipt,
)
from chainlib.eth.address import to_checksum_address
+from hexathon import strip_0x
# local imports
from giftable_erc20_token import GiftableToken
@@ -102,7 +103,7 @@ class TestToken(EthTesterCase):
o = transaction(tx_hash)
r = self.rpc.do(o)
data = c.parse_transfer_request(r['data'])
- self.assertEqual(data[0], self.accounts[1])
+ self.assertEqual(data[0], strip_0x(self.accounts[1]))
self.assertEqual(data[1], 1000)
@@ -124,7 +125,7 @@ class TestToken(EthTesterCase):
o = transaction(tx_hash)
r = self.rpc.do(o)
data = c.parse_approve_request(r['data'])
- self.assertEqual(data[0], self.accounts[1])
+ self.assertEqual(data[0], strip_0x(self.accounts[1]))
self.assertEqual(data[1], 1000)
nonce_oracle = RPCNonceOracle(self.accounts[1], conn=self.conn)
@@ -138,8 +139,8 @@ class TestToken(EthTesterCase):
o = transaction(tx_hash)
r = self.rpc.do(o)
data = c.parse_transfer_from_request(r['data'])
- self.assertEqual(data[0], self.accounts[0])
- self.assertEqual(data[1], self.accounts[2])
+ self.assertEqual(data[0], strip_0x(self.accounts[0]))
+ self.assertEqual(data[1], strip_0x(self.accounts[2]))
self.assertEqual(data[2], 1001)
(tx_hash, o) = c.transfer_from(self.address, self.accounts[1], self.accounts[0], self.accounts[2], 1000)
diff --git a/solidity/GiftableToken.sol b/solidity/GiftableToken.sol
@@ -1,4 +1,4 @@
-pragma solidity >0.6.11;
+pragma solidity >=0.6.11;
// SPDX-License-Identifier: GPL-3.0-or-later
// File-Version: 2