Repository files navigation

TuiChain: Blockchain

Build status

Repository for the blockchain component of the TuiChain application.

For users

Brief intro to the TuiChain blockchain architecture

An instance of the entire on-chain TuiChain infrastructure is composed of:

  • a controller contract,
  • a market contract, and
  • any number of loan contracts.

The idea for the final application is to have a single instance of this contract infrastructure deployed in the Ethereum mainnet. In practice we will use local chains for testing and development and also the public testnets.

Initially, only the controller and market contracts exist. Every time a loan is created, a loan contract is deployed. The market contracts and all loan contracts are reachable from the controller contract, which ties the whole thing together.

Visit the wiki, for more information about the design models which sustain the implementation.

How to use this repo

This whole repo is a Python package named tuichain_ethereum. First install npm and then install the Python package using pip with a local or remote path to the repo, e.g.:

  • pip install my-repos/blockchain, or
  • pip install https://github.com/TuiChain/blockchain/archive/main.zip

Then just import tuichain_ethereum. All exported symbols are documented in the code. Synopsis of provided types:

  • Basic Ethereum-related types:

    • Address - the address of an Ethereum account or contract
    • PrivateKey - the private key of an Ethereum account
    • Transaction[T] - a handle to an Ethereum transaction
  • Simple TuiChain-specific types:

    • SellPosition - represents a market sell position
    • LoanIdentifier - uniquely identifies a loan
    • LoanPhase(Enum) - enumeration of the possible phases of a loan
    • LoanState - holds the mutable part of a loan's state
  • Types providing access to the on-chain infrastructure:

    • Controller - represents an instance of the controller contract
    • Market - represents an instance of the market contract
    • Loans - represents a collection of instances of the loan contract
    • Loan - represents an instance of the loan contract
  • Helper types for building transactions to be signed and submitted by users:

    • MarketUserTransactionBuilder - to build transactions interacting with market contracts
    • LoanUserTransactionBuilder - to build transactions interacting with loan contracts

A tuichain_ethereum.test module is also provided and exposes a DaiMockContract type, which implements an ERC-20 mock Dai contract useful for testing.

Deploy an instance of TuiChain's Ethereum infrastructure with Controller.deploy() or connect to an existing controller contract with Controller() and go from there.

For developers

Repo structure

Python code is under tuichain_ethereum/. Python tests are under test/.

Directory truffle/ is a Truffle setup. Contracts are under truffle/contracts/. Mock contracts for tests are under truffle/contracts/mocks/. Actual JavaScript and Solidity tests are under truffle/test/.

The Python setup uses the Truffle setup to compile the contracts and include the relevant output in the Python package installation. Thus to install this package you must have npm installed.

Development setup

To work on the contracts, go to truffle/ and use:

  • npm install to install the Truffle setup dependencies;
  • npm run truffle compile to compile the contracts;
  • npm run prettier to reformat all code;
  • npm test to run all linters and tests.

To develop the Python layer, create a virtualenv and install the Python package in "editable" mode with the [test] extras, e.g.:

  • cd my-repos/blockchain
  • virtualenv venv
  • source venv/bin/activate
  • pip install pip==20.2.3
  • pip install --use-feature=2020-resolver -e .[test]

You can then run the tests from the repo root with tox, which runs mypy and black in a clean environment and then uses pytest to run the actual tests. You can also just run pytest test to skip the mypy and black steps and speed up things, but this can lead to unreproducible test results. Note that you will have to reinstall the Python package in the virtualenv whenever the Solidity contracts are modified:

  • pip uninstall -y tuichain_ethereum
  • pip install --use-feature=2020-resolver -e .[test]

Configuration files for PyCharm are also provided:

  • Open the repo in PyCharm and configure an interpreter named "tuichain_ethereum" that uses the virtualenv.
  • The PyCharm project has a "tox" run configuration to run the tests.
  • The PyCharm project also has a "pytest" run configuration to run just the pytest part of the tests directly in the project's interpreter;
  • Optionally install plugin "mypy" (by Roberto Leinardi) to integrate mypy with PyCharm.
  • Optionally install plugin "File Watchers" to have black run after every file save.

GitHub Actions

The GitHub Actions setup runs all aforementioned tests on every push and pull request.

About

Blockchain component for the TuiChain platform

Resources

Stars

1 star

Watchers

2 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

TuiChain: Blockchain

Build status

Repository for the blockchain component of the TuiChain application.

For users

Brief intro to the TuiChain blockchain architecture

An instance of the entire on-chain TuiChain infrastructure is composed of:

  • a controller contract,
  • a market contract, and
  • any number of loan contracts.

The idea for the final application is to have a single instance of this contract infrastructure deployed in the Ethereum mainnet. In practice we will use local chains for testing and development and also the public testnets.

Initially, only the controller and market contracts exist. Every time a loan is created, a loan contract is deployed. The market contracts and all loan contracts are reachable from the controller contract, which ties the whole thing together.

Visit the wiki, for more information about the design models which sustain the implementation.

How to use this repo

This whole repo is a Python package named tuichain_ethereum. First install npm and then install the Python package using pip with a local or remote path to the repo, e.g.:

  • pip install my-repos/blockchain, or
  • pip install https://github.com/TuiChain/blockchain/archive/main.zip

Then just import tuichain_ethereum. All exported symbols are documented in the code. Synopsis of provided types:

  • Basic Ethereum-related types:

    • Address - the address of an Ethereum account or contract
    • PrivateKey - the private key of an Ethereum account
    • Transaction[T] - a handle to an Ethereum transaction
  • Simple TuiChain-specific types:

    • SellPosition - represents a market sell position
    • LoanIdentifier - uniquely identifies a loan
    • LoanPhase(Enum) - enumeration of the possible phases of a loan
    • LoanState - holds the mutable part of a loan's state
  • Types providing access to the on-chain infrastructure:

    • Controller - represents an instance of the controller contract
    • Market - represents an instance of the market contract
    • Loans - represents a collection of instances of the loan contract
    • Loan - represents an instance of the loan contract
  • Helper types for building transactions to be signed and submitted by users:

    • MarketUserTransactionBuilder - to build transactions interacting with market contracts
    • LoanUserTransactionBuilder - to build transactions interacting with loan contracts

A tuichain_ethereum.test module is also provided and exposes a DaiMockContract type, which implements an ERC-20 mock Dai contract useful for testing.

Deploy an instance of TuiChain's Ethereum infrastructure with Controller.deploy() or connect to an existing controller contract with Controller() and go from there.

For developers

Repo structure

Python code is under tuichain_ethereum/. Python tests are under test/.

Directory truffle/ is a Truffle setup. Contracts are under truffle/contracts/. Mock contracts for tests are under truffle/contracts/mocks/. Actual JavaScript and Solidity tests are under truffle/test/.

The Python setup uses the Truffle setup to compile the contracts and include the relevant output in the Python package installation. Thus to install this package you must have npm installed.

Development setup

To work on the contracts, go to truffle/ and use:

  • npm install to install the Truffle setup dependencies;
  • npm run truffle compile to compile the contracts;
  • npm run prettier to reformat all code;
  • npm test to run all linters and tests.

To develop the Python layer, create a virtualenv and install the Python package in "editable" mode with the [test] extras, e.g.:

  • cd my-repos/blockchain
  • virtualenv venv
  • source venv/bin/activate
  • pip install pip==20.2.3
  • pip install --use-feature=2020-resolver -e .[test]

You can then run the tests from the repo root with tox, which runs mypy and black in a clean environment and then uses pytest to run the actual tests. You can also just run pytest test to skip the mypy and black steps and speed up things, but this can lead to unreproducible test results. Note that you will have to reinstall the Python package in the virtualenv whenever the Solidity contracts are modified:

  • pip uninstall -y tuichain_ethereum
  • pip install --use-feature=2020-resolver -e .[test]

Configuration files for PyCharm are also provided:

  • Open the repo in PyCharm and configure an interpreter named "tuichain_ethereum" that uses the virtualenv.
  • The PyCharm project has a "tox" run configuration to run the tests.
  • The PyCharm project also has a "pytest" run configuration to run just the pytest part of the tests directly in the project's interpreter;
  • Optionally install plugin "mypy" (by Roberto Leinardi) to integrate mypy with PyCharm.
  • Optionally install plugin "File Watchers" to have black run after every file save.

GitHub Actions

The GitHub Actions setup runs all aforementioned tests on every push and pull request.

About

Blockchain component for the TuiChain platform

Resources

Stars

1 star

Watchers

2 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TuiChain: Blockchain

Build status

Repository for the blockchain component of the TuiChain application.

For users

Brief intro to the TuiChain blockchain architecture

An instance of the entire on-chain TuiChain infrastructure is composed of:

  • a controller contract,
  • a market contract, and
  • any number of loan contracts.

The idea for the final application is to have a single instance of this contract infrastructure deployed in the Ethereum mainnet. In practice we will use local chains for testing and development and also the public testnets.

Initially, only the controller and market contracts exist. Every time a loan is created, a loan contract is deployed. The market contracts and all loan contracts are reachable from the controller contract, which ties the whole thing together.

Visit the wiki, for more information about the design models which sustain the implementation.

How to use this repo

This whole repo is a Python package named tuichain_ethereum. First install npm and then install the Python package using pip with a local or remote path to the repo, e.g.:

  • pip install my-repos/blockchain, or
  • pip install https://github.com/TuiChain/blockchain/archive/main.zip

Then just import tuichain_ethereum. All exported symbols are documented in the code. Synopsis of provided types:

  • Basic Ethereum-related types:

    • Address - the address of an Ethereum account or contract
    • PrivateKey - the private key of an Ethereum account
    • Transaction[T] - a handle to an Ethereum transaction
  • Simple TuiChain-specific types:

    • SellPosition - represents a market sell position
    • LoanIdentifier - uniquely identifies a loan
    • LoanPhase(Enum) - enumeration of the possible phases of a loan
    • LoanState - holds the mutable part of a loan's state
  • Types providing access to the on-chain infrastructure:

    • Controller - represents an instance of the controller contract
    • Market - represents an instance of the market contract
    • Loans - represents a collection of instances of the loan contract
    • Loan - represents an instance of the loan contract
  • Helper types for building transactions to be signed and submitted by users:

    • MarketUserTransactionBuilder - to build transactions interacting with market contracts
    • LoanUserTransactionBuilder - to build transactions interacting with loan contracts

A tuichain_ethereum.test module is also provided and exposes a DaiMockContract type, which implements an ERC-20 mock Dai contract useful for testing.

Deploy an instance of TuiChain's Ethereum infrastructure with Controller.deploy() or connect to an existing controller contract with Controller() and go from there.

For developers

Repo structure

Python code is under tuichain_ethereum/. Python tests are under test/.

Directory truffle/ is a Truffle setup. Contracts are under truffle/contracts/. Mock contracts for tests are under truffle/contracts/mocks/. Actual JavaScript and Solidity tests are under truffle/test/.

The Python setup uses the Truffle setup to compile the contracts and include the relevant output in the Python package installation. Thus to install this package you must have npm installed.

Development setup

To work on the contracts, go to truffle/ and use:

  • npm install to install the Truffle setup dependencies;
  • npm run truffle compile to compile the contracts;
  • npm run prettier to reformat all code;
  • npm test to run all linters and tests.

To develop the Python layer, create a virtualenv and install the Python package in "editable" mode with the [test] extras, e.g.:

  • cd my-repos/blockchain
  • virtualenv venv
  • source venv/bin/activate
  • pip install pip==20.2.3
  • pip install --use-feature=2020-resolver -e .[test]

You can then run the tests from the repo root with tox, which runs mypy and black in a clean environment and then uses pytest to run the actual tests. You can also just run pytest test to skip the mypy and black steps and speed up things, but this can lead to unreproducible test results. Note that you will have to reinstall the Python package in the virtualenv whenever the Solidity contracts are modified:

  • pip uninstall -y tuichain_ethereum
  • pip install --use-feature=2020-resolver -e .[test]

Configuration files for PyCharm are also provided:

  • Open the repo in PyCharm and configure an interpreter named "tuichain_ethereum" that uses the virtualenv.
  • The PyCharm project has a "tox" run configuration to run the tests.
  • The PyCharm project also has a "pytest" run configuration to run just the pytest part of the tests directly in the project's interpreter;
  • Optionally install plugin "mypy" (by Roberto Leinardi) to integrate mypy with PyCharm.
  • Optionally install plugin "File Watchers" to have black run after every file save.

GitHub Actions

The GitHub Actions setup runs all aforementioned tests on every push and pull request.

About

Blockchain component for the TuiChain platform

Resources

Stars

1 star

Watchers

2 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TuiChain: Blockchain

Build status

Repository for the blockchain component of the TuiChain application.

For users

Brief intro to the TuiChain blockchain architecture

An instance of the entire on-chain TuiChain infrastructure is composed of:

  • a controller contract,
  • a market contract, and
  • any number of loan contracts.

The idea for the final application is to have a single instance of this contract infrastructure deployed in the Ethereum mainnet. In practice we will use local chains for testing and development and also the public testnets.

Initially, only the controller and market contracts exist. Every time a loan is created, a loan contract is deployed. The market contracts and all loan contracts are reachable from the controller contract, which ties the whole thing together.

Visit the wiki, for more information about the design models which sustain the implementation.

How to use this repo

This whole repo is a Python package named tuichain_ethereum. First install npm and then install the Python package using pip with a local or remote path to the repo, e.g.:

  • pip install my-repos/blockchain, or
  • pip install https://github.com/TuiChain/blockchain/archive/main.zip

Then just import tuichain_ethereum. All exported symbols are documented in the code. Synopsis of provided types:

  • Basic Ethereum-related types:

    • Address - the address of an Ethereum account or contract
    • PrivateKey - the private key of an Ethereum account
    • Transaction[T] - a handle to an Ethereum transaction
  • Simple TuiChain-specific types:

    • SellPosition - represents a market sell position
    • LoanIdentifier - uniquely identifies a loan
    • LoanPhase(Enum) - enumeration of the possible phases of a loan
    • LoanState - holds the mutable part of a loan's state
  • Types providing access to the on-chain infrastructure:

    • Controller - represents an instance of the controller contract
    • Market - represents an instance of the market contract
    • Loans - represents a collection of instances of the loan contract
    • Loan - represents an instance of the loan contract
  • Helper types for building transactions to be signed and submitted by users:

    • MarketUserTransactionBuilder - to build transactions interacting with market contracts
    • LoanUserTransactionBuilder - to build transactions interacting with loan contracts

A tuichain_ethereum.test module is also provided and exposes a DaiMockContract type, which implements an ERC-20 mock Dai contract useful for testing.

Deploy an instance of TuiChain's Ethereum infrastructure with Controller.deploy() or connect to an existing controller contract with Controller() and go from there.

For developers

Repo structure

Python code is under tuichain_ethereum/. Python tests are under test/.

Directory truffle/ is a Truffle setup. Contracts are under truffle/contracts/. Mock contracts for tests are under truffle/contracts/mocks/. Actual JavaScript and Solidity tests are under truffle/test/.

The Python setup uses the Truffle setup to compile the contracts and include the relevant output in the Python package installation. Thus to install this package you must have npm installed.

Development setup

To work on the contracts, go to truffle/ and use:

  • npm install to install the Truffle setup dependencies;
  • npm run truffle compile to compile the contracts;
  • npm run prettier to reformat all code;
  • npm test to run all linters and tests.

To develop the Python layer, create a virtualenv and install the Python package in "editable" mode with the [test] extras, e.g.:

  • cd my-repos/blockchain
  • virtualenv venv
  • source venv/bin/activate
  • pip install pip==20.2.3
  • pip install --use-feature=2020-resolver -e .[test]

You can then run the tests from the repo root with tox, which runs mypy and black in a clean environment and then uses pytest to run the actual tests. You can also just run pytest test to skip the mypy and black steps and speed up things, but this can lead to unreproducible test results. Note that you will have to reinstall the Python package in the virtualenv whenever the Solidity contracts are modified:

  • pip uninstall -y tuichain_ethereum
  • pip install --use-feature=2020-resolver -e .[test]

Configuration files for PyCharm are also provided:

  • Open the repo in PyCharm and configure an interpreter named "tuichain_ethereum" that uses the virtualenv.
  • The PyCharm project has a "tox" run configuration to run the tests.
  • The PyCharm project also has a "pytest" run configuration to run just the pytest part of the tests directly in the project's interpreter;
  • Optionally install plugin "mypy" (by Roberto Leinardi) to integrate mypy with PyCharm.
  • Optionally install plugin "File Watchers" to have black run after every file save.

GitHub Actions

The GitHub Actions setup runs all aforementioned tests on every push and pull request.

About

Blockchain component for the TuiChain platform

Resources

Stars

1 star

Watchers

2 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

TuiChain: Blockchain

Build status

Repository for the blockchain component of the TuiChain application.

For users

Brief intro to the TuiChain blockchain architecture

An instance of the entire on-chain TuiChain infrastructure is composed of:

  • a controller contract,
  • a market contract, and
  • any number of loan contracts.

The idea for the final application is to have a single instance of this contract infrastructure deployed in the Ethereum mainnet. In practice we will use local chains for testing and development and also the public testnets.

Initially, only the controller and market contracts exist. Every time a loan is created, a loan contract is deployed. The market contracts and all loan contracts are reachable from the controller contract, which ties the whole thing together.

Visit the wiki, for more information about the design models which sustain the implementation.

How to use this repo

This whole repo is a Python package named tuichain_ethereum. First install npm and then install the Python package using pip with a local or remote path to the repo, e.g.:

  • pip install my-repos/blockchain, or
  • pip install https://github.com/TuiChain/blockchain/archive/main.zip

Then just import tuichain_ethereum. All exported symbols are documented in the code. Synopsis of provided types:

  • Basic Ethereum-related types:

    • Address - the address of an Ethereum account or contract
    • PrivateKey - the private key of an Ethereum account
    • Transaction[T] - a handle to an Ethereum transaction
  • Simple TuiChain-specific types:

    • SellPosition - represents a market sell position
    • LoanIdentifier - uniquely identifies a loan
    • LoanPhase(Enum) - enumeration of the possible phases of a loan
    • LoanState - holds the mutable part of a loan's state
  • Types providing access to the on-chain infrastructure:

    • Controller - represents an instance of the controller contract
    • Market - represents an instance of the market contract
    • Loans - represents a collection of instances of the loan contract
    • Loan - represents an instance of the loan contract
  • Helper types for building transactions to be signed and submitted by users:

    • MarketUserTransactionBuilder - to build transactions interacting with market contracts
    • LoanUserTransactionBuilder - to build transactions interacting with loan contracts

A tuichain_ethereum.test module is also provided and exposes a DaiMockContract type, which implements an ERC-20 mock Dai contract useful for testing.

Deploy an instance of TuiChain's Ethereum infrastructure with Controller.deploy() or connect to an existing controller contract with Controller() and go from there.

For developers

Repo structure

Python code is under tuichain_ethereum/. Python tests are under test/.

Directory truffle/ is a Truffle setup. Contracts are under truffle/contracts/. Mock contracts for tests are under truffle/contracts/mocks/. Actual JavaScript and Solidity tests are under truffle/test/.

The Python setup uses the Truffle setup to compile the contracts and include the relevant output in the Python package installation. Thus to install this package you must have npm installed.

Development setup

To work on the contracts, go to truffle/ and use:

  • npm install to install the Truffle setup dependencies;
  • npm run truffle compile to compile the contracts;
  • npm run prettier to reformat all code;
  • npm test to run all linters and tests.

To develop the Python layer, create a virtualenv and install the Python package in "editable" mode with the [test] extras, e.g.:

  • cd my-repos/blockchain
  • virtualenv venv
  • source venv/bin/activate
  • pip install pip==20.2.3
  • pip install --use-feature=2020-resolver -e .[test]

You can then run the tests from the repo root with tox, which runs mypy and black in a clean environment and then uses pytest to run the actual tests. You can also just run pytest test to skip the mypy and black steps and speed up things, but this can lead to unreproducible test results. Note that you will have to reinstall the Python package in the virtualenv whenever the Solidity contracts are modified:

  • pip uninstall -y tuichain_ethereum
  • pip install --use-feature=2020-resolver -e .[test]

Configuration files for PyCharm are also provided:

  • Open the repo in PyCharm and configure an interpreter named "tuichain_ethereum" that uses the virtualenv.
  • The PyCharm project has a "tox" run configuration to run the tests.
  • The PyCharm project also has a "pytest" run configuration to run just the pytest part of the tests directly in the project's interpreter;
  • Optionally install plugin "mypy" (by Roberto Leinardi) to integrate mypy with PyCharm.
  • Optionally install plugin "File Watchers" to have black run after every file save.

GitHub Actions

The GitHub Actions setup runs all aforementioned tests on every push and pull request.

About

Blockchain component for the TuiChain platform

Resources

Stars

1 star

Watchers

2 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TuiChain: Blockchain

Build status

Repository for the blockchain component of the TuiChain application.

For users

Brief intro to the TuiChain blockchain architecture

An instance of the entire on-chain TuiChain infrastructure is composed of:

  • a controller contract,
  • a market contract, and
  • any number of loan contracts.

The idea for the final application is to have a single instance of this contract infrastructure deployed in the Ethereum mainnet. In practice we will use local chains for testing and development and also the public testnets.

Initially, only the controller and market contracts exist. Every time a loan is created, a loan contract is deployed. The market contracts and all loan contracts are reachable from the controller contract, which ties the whole thing together.

Visit the wiki, for more information about the design models which sustain the implementation.

How to use this repo

This whole repo is a Python package named tuichain_ethereum. First install npm and then install the Python package using pip with a local or remote path to the repo, e.g.:

  • pip install my-repos/blockchain, or
  • pip install https://github.com/TuiChain/blockchain/archive/main.zip

Then just import tuichain_ethereum. All exported symbols are documented in the code. Synopsis of provided types:

  • Basic Ethereum-related types:

    • Address - the address of an Ethereum account or contract
    • PrivateKey - the private key of an Ethereum account
    • Transaction[T] - a handle to an Ethereum transaction
  • Simple TuiChain-specific types:

    • SellPosition - represents a market sell position
    • LoanIdentifier - uniquely identifies a loan
    • LoanPhase(Enum) - enumeration of the possible phases of a loan
    • LoanState - holds the mutable part of a loan's state
  • Types providing access to the on-chain infrastructure:

    • Controller - represents an instance of the controller contract
    • Market - represents an instance of the market contract
    • Loans - represents a collection of instances of the loan contract
    • Loan - represents an instance of the loan contract
  • Helper types for building transactions to be signed and submitted by users:

    • MarketUserTransactionBuilder - to build transactions interacting with market contracts
    • LoanUserTransactionBuilder - to build transactions interacting with loan contracts

A tuichain_ethereum.test module is also provided and exposes a DaiMockContract type, which implements an ERC-20 mock Dai contract useful for testing.

Deploy an instance of TuiChain's Ethereum infrastructure with Controller.deploy() or connect to an existing controller contract with Controller() and go from there.

For developers

Repo structure

Python code is under tuichain_ethereum/. Python tests are under test/.

Directory truffle/ is a Truffle setup. Contracts are under truffle/contracts/. Mock contracts for tests are under truffle/contracts/mocks/. Actual JavaScript and Solidity tests are under truffle/test/.

The Python setup uses the Truffle setup to compile the contracts and include the relevant output in the Python package installation. Thus to install this package you must have npm installed.

Development setup

To work on the contracts, go to truffle/ and use:

  • npm install to install the Truffle setup dependencies;
  • npm run truffle compile to compile the contracts;
  • npm run prettier to reformat all code;
  • npm test to run all linters and tests.

To develop the Python layer, create a virtualenv and install the Python package in "editable" mode with the [test] extras, e.g.:

  • cd my-repos/blockchain
  • virtualenv venv
  • source venv/bin/activate
  • pip install pip==20.2.3
  • pip install --use-feature=2020-resolver -e .[test]

You can then run the tests from the repo root with tox, which runs mypy and black in a clean environment and then uses pytest to run the actual tests. You can also just run pytest test to skip the mypy and black steps and speed up things, but this can lead to unreproducible test results. Note that you will have to reinstall the Python package in the virtualenv whenever the Solidity contracts are modified:

  • pip uninstall -y tuichain_ethereum
  • pip install --use-feature=2020-resolver -e .[test]

Configuration files for PyCharm are also provided:

  • Open the repo in PyCharm and configure an interpreter named "tuichain_ethereum" that uses the virtualenv.
  • The PyCharm project has a "tox" run configuration to run the tests.
  • The PyCharm project also has a "pytest" run configuration to run just the pytest part of the tests directly in the project's interpreter;
  • Optionally install plugin "mypy" (by Roberto Leinardi) to integrate mypy with PyCharm.
  • Optionally install plugin "File Watchers" to have black run after every file save.

GitHub Actions

The GitHub Actions setup runs all aforementioned tests on every push and pull request.

About

Blockchain component for the TuiChain platform

Resources

Stars

1 star

Watchers

2 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

TuiChain: Blockchain

Build status

Repository for the blockchain component of the TuiChain application.

For users

Brief intro to the TuiChain blockchain architecture

An instance of the entire on-chain TuiChain infrastructure is composed of:

  • a controller contract,
  • a market contract, and
  • any number of loan contracts.

The idea for the final application is to have a single instance of this contract infrastructure deployed in the Ethereum mainnet. In practice we will use local chains for testing and development and also the public testnets.

Initially, only the controller and market contracts exist. Every time a loan is created, a loan contract is deployed. The market contracts and all loan contracts are reachable from the controller contract, which ties the whole thing together.

Visit the wiki, for more information about the design models which sustain the implementation.

How to use this repo

This whole repo is a Python package named tuichain_ethereum. First install npm and then install the Python package using pip with a local or remote path to the repo, e.g.:

  • pip install my-repos/blockchain, or
  • pip install https://github.com/TuiChain/blockchain/archive/main.zip

Then just import tuichain_ethereum. All exported symbols are documented in the code. Synopsis of provided types:

  • Basic Ethereum-related types:

    • Address - the address of an Ethereum account or contract
    • PrivateKey - the private key of an Ethereum account
    • Transaction[T] - a handle to an Ethereum transaction
  • Simple TuiChain-specific types:

    • SellPosition - represents a market sell position
    • LoanIdentifier - uniquely identifies a loan
    • LoanPhase(Enum) - enumeration of the possible phases of a loan
    • LoanState - holds the mutable part of a loan's state
  • Types providing access to the on-chain infrastructure:

    • Controller - represents an instance of the controller contract
    • Market - represents an instance of the market contract
    • Loans - represents a collection of instances of the loan contract
    • Loan - represents an instance of the loan contract
  • Helper types for building transactions to be signed and submitted by users:

    • MarketUserTransactionBuilder - to build transactions interacting with market contracts
    • LoanUserTransactionBuilder - to build transactions interacting with loan contracts

A tuichain_ethereum.test module is also provided and exposes a DaiMockContract type, which implements an ERC-20 mock Dai contract useful for testing.

Deploy an instance of TuiChain's Ethereum infrastructure with Controller.deploy() or connect to an existing controller contract with Controller() and go from there.

For developers

Repo structure

Python code is under tuichain_ethereum/. Python tests are under test/.

Directory truffle/ is a Truffle setup. Contracts are under truffle/contracts/. Mock contracts for tests are under truffle/contracts/mocks/. Actual JavaScript and Solidity tests are under truffle/test/.

The Python setup uses the Truffle setup to compile the contracts and include the relevant output in the Python package installation. Thus to install this package you must have npm installed.

Development setup

To work on the contracts, go to truffle/ and use:

  • npm install to install the Truffle setup dependencies;
  • npm run truffle compile to compile the contracts;
  • npm run prettier to reformat all code;
  • npm test to run all linters and tests.

To develop the Python layer, create a virtualenv and install the Python package in "editable" mode with the [test] extras, e.g.:

  • cd my-repos/blockchain
  • virtualenv venv
  • source venv/bin/activate
  • pip install pip==20.2.3
  • pip install --use-feature=2020-resolver -e .[test]

You can then run the tests from the repo root with tox, which runs mypy and black in a clean environment and then uses pytest to run the actual tests. You can also just run pytest test to skip the mypy and black steps and speed up things, but this can lead to unreproducible test results. Note that you will have to reinstall the Python package in the virtualenv whenever the Solidity contracts are modified:

  • pip uninstall -y tuichain_ethereum
  • pip install --use-feature=2020-resolver -e .[test]

Configuration files for PyCharm are also provided:

  • Open the repo in PyCharm and configure an interpreter named "tuichain_ethereum" that uses the virtualenv.
  • The PyCharm project has a "tox" run configuration to run the tests.
  • The PyCharm project also has a "pytest" run configuration to run just the pytest part of the tests directly in the project's interpreter;
  • Optionally install plugin "mypy" (by Roberto Leinardi) to integrate mypy with PyCharm.
  • Optionally install plugin "File Watchers" to have black run after every file save.

GitHub Actions

The GitHub Actions setup runs all aforementioned tests on every push and pull request.

About

Blockchain component for the TuiChain platform

Resources

Stars

1 star

Watchers

2 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

TuiChain: Blockchain

Build status

Repository for the blockchain component of the TuiChain application.

For users

Brief intro to the TuiChain blockchain architecture

An instance of the entire on-chain TuiChain infrastructure is composed of:

  • a controller contract,
  • a market contract, and
  • any number of loan contracts.

The idea for the final application is to have a single instance of this contract infrastructure deployed in the Ethereum mainnet. In practice we will use local chains for testing and development and also the public testnets.

Initially, only the controller and market contracts exist. Every time a loan is created, a loan contract is deployed. The market contracts and all loan contracts are reachable from the controller contract, which ties the whole thing together.

Visit the wiki, for more information about the design models which sustain the implementation.

How to use this repo

This whole repo is a Python package named tuichain_ethereum. First install npm and then install the Python package using pip with a local or remote path to the repo, e.g.:

  • pip install my-repos/blockchain, or
  • pip install https://github.com/TuiChain/blockchain/archive/main.zip

Then just import tuichain_ethereum. All exported symbols are documented in the code. Synopsis of provided types:

  • Basic Ethereum-related types:

    • Address - the address of an Ethereum account or contract
    • PrivateKey - the private key of an Ethereum account
    • Transaction[T] - a handle to an Ethereum transaction
  • Simple TuiChain-specific types:

    • SellPosition - represents a market sell position
    • LoanIdentifier - uniquely identifies a loan
    • LoanPhase(Enum) - enumeration of the possible phases of a loan
    • LoanState - holds the mutable part of a loan's state
  • Types providing access to the on-chain infrastructure:

    • Controller - represents an instance of the controller contract
    • Market - represents an instance of the market contract
    • Loans - represents a collection of instances of the loan contract
    • Loan - represents an instance of the loan contract
  • Helper types for building transactions to be signed and submitted by users:

    • MarketUserTransactionBuilder - to build transactions interacting with market contracts
    • LoanUserTransactionBuilder - to build transactions interacting with loan contracts

A tuichain_ethereum.test module is also provided and exposes a DaiMockContract type, which implements an ERC-20 mock Dai contract useful for testing.

Deploy an instance of TuiChain's Ethereum infrastructure with Controller.deploy() or connect to an existing controller contract with Controller() and go from there.

For developers

Repo structure

Python code is under tuichain_ethereum/. Python tests are under test/.

Directory truffle/ is a Truffle setup. Contracts are under truffle/contracts/. Mock contracts for tests are under truffle/contracts/mocks/. Actual JavaScript and Solidity tests are under truffle/test/.

The Python setup uses the Truffle setup to compile the contracts and include the relevant output in the Python package installation. Thus to install this package you must have npm installed.

Development setup

To work on the contracts, go to truffle/ and use:

  • npm install to install the Truffle setup dependencies;
  • npm run truffle compile to compile the contracts;
  • npm run prettier to reformat all code;
  • npm test to run all linters and tests.

To develop the Python layer, create a virtualenv and install the Python package in "editable" mode with the [test] extras, e.g.:

  • cd my-repos/blockchain
  • virtualenv venv
  • source venv/bin/activate
  • pip install pip==20.2.3
  • pip install --use-feature=2020-resolver -e .[test]

You can then run the tests from the repo root with tox, which runs mypy and black in a clean environment and then uses pytest to run the actual tests. You can also just run pytest test to skip the mypy and black steps and speed up things, but this can lead to unreproducible test results. Note that you will have to reinstall the Python package in the virtualenv whenever the Solidity contracts are modified:

  • pip uninstall -y tuichain_ethereum
  • pip install --use-feature=2020-resolver -e .[test]

Configuration files for PyCharm are also provided:

  • Open the repo in PyCharm and configure an interpreter named "tuichain_ethereum" that uses the virtualenv.
  • The PyCharm project has a "tox" run configuration to run the tests.
  • The PyCharm project also has a "pytest" run configuration to run just the pytest part of the tests directly in the project's interpreter;
  • Optionally install plugin "mypy" (by Roberto Leinardi) to integrate mypy with PyCharm.
  • Optionally install plugin "File Watchers" to have black run after every file save.

GitHub Actions

The GitHub Actions setup runs all aforementioned tests on every push and pull request.

About

Blockchain component for the TuiChain platform

Resources

Stars

1 star

Watchers

2 watching

Forks

Contributors

Languages