Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ERC1540: Asset Token Standard #1540

Closed
wants to merge 10 commits into from
Closed

Conversation

hack1t
Copy link

@hack1t hack1t commented Nov 1, 2018


eip: 1540
title: Asset Token Standard
author: Axe Jiang jzw@hashfuture.pro, Yinghao Jia jiayinghao@hashworld.pro, Yong Ren yongren@hashworld.pro, Jiaqing Dong jiaqing@hashworld.pro
discussions-to: #1553
status: Draft
type: Standards Track
category: ERC
created: 2018-10-25
requires: 20

Simple Summary

This Asset Token Standard defines a smart contract legally representing the ownership and corresponding privileges of a real-world asset.
The Asset token corresponding to the ownership of real-world asset can be issued into Asset keys representing shares of the asset privileges. Any holders of Asset keys can collect dividends, earn income, and receive consumer services according to their shares. Asset keys can be regarded as the standard ERC20 tokens, which exist only after an Asset token is issued into keys.

This standard keeps backward compatibility with [ERC20].

Abstract

This standard defines the ownership of a real-world asset as an Asset token according to the unique verifiable identification and corresponding rights agreement. The Asset token is a unique digital legal certificate for non-specific transfer objects, which could transfer on Ethereum freely. The transfer of Asset Token represents the transfer of ownership of assets in the real world. The whole process greatly reduces transaction costs, improves efficiency and realizes disintermediation.
In accordance with the general Token-based mandatory delivery (TBD) agreement, any holder with this Asset token can forcibly claim for the real-world asset from the asset keeper (assigned when the Asset token is created). The Asset token will be destructed after the real-world asset has been claimed. In addition, the Asset token can be issued into a designated number of Asset keys. After key issuance, the Asset token will be in 'locked' status, under which any operations on Asset token are not permitted. Holders of Asset keys can collect dividends, earn income, and receive consumer services of the corresponding real-world asset according to their shares.

Motivation

This standard realizes the tokenization for real-world assets. In compliance with national laws and regulations, the mapping of the on-chain assets and off-chain assets is confirmed by the untampered programmable asset token generated on blockchain, which combines the unique verifiable identification and corresponding rights agreement of a real-world asset. The standard realizes the decentralized property verification for more real-world assets. This standard will endow Ethereum with greater value for the real world.
This standard promotes the conversion of primary and secondary real-world assets. The Asset token represents a kind of holistic property, any holder of the Asset token can lock the token and issue the designated number of Asset keys. The profit from the real-world asset appreciation will be distributed to the holders of Asset keys. Meanwhile, any holder of all the Asset keys can convert into the Asset token to claim for the real-world asset. Through this process, we can achieve the free conversion of primary assets and secondary assets, greatly reducing transaction costs and promoting the efficient of assets circulation.
This standard achieves intelligent management of programmable assets. This standard designs the function of Key issuance and Buyback price, applying smart contracts instead of corporate governance, shareholder vote, merger, acquisition, etc. Firstly, this standard can avoid big shareholders from doing evil. In reality, the major shareholders may encroach on the dividend income of the minority shareholders through the majority rule. On the other hand, it can also prevent small shareholders from extorting the holder who wants to collect all the keys to claim for the real asset, credit to the ‘collectAllForce’ function. In this way, the Situation described in “property is only another name for monopoly” will be refrained.

Specification

Asset Status Brief

There are three metrics describing the status of the Asset token.
The first one is 'valid'. The Asset token is in 'valid' status by default and will be 'invalid' once the owner explicitly executes the 'cancelContract' function, which is not reversible.

The second one is 'issued'. The Asset token is 'unissued' by default, and will be 'issued' after the owner locks the Asset token and issues the Asset keys. This status is reversible. A holder with all Asset keys can convert them into the original Asset token.

Preferred Stable Token

The contract specifies a stable token at the initialization phase by assigning the address of a preferred stable token.

The stable token will be used to distribute dividends to the Asset keys holders or to collect Asset keys forcibly at the price the owner designated at when issuing the Asset keys.

Asset File Management

getAssetFile / setAssetFile

AssetFile includes two parts, one file describing features of the real-world asset and the other containing legal documents. These two files are open to the public and can be set at the constructing phase of the smart contract or by explicitly executing 'setAssetFile' or 'setLegalFile' functions by the owner. These two operations require 'unissued' and 'valid' status.

function initAssetFile(
    string _assetFileUrl, string _assetFileHashType, string _assetFileHashValue,
    string _legalFileUrl, string _legalFileHashType, string _legalFileHashValue
    ) internal;

function setAssetFileLink(string url) public onlyOwner onlyValid onlyUnissued;

function setLegalFileLink(string url) public onlyOwner onlyValid onlyUnissued;

AssetFile: indicates the unique verifiable identification of real-world assets. Generally, AssetFile includes assets’ detailed description, photos of full angle, certification authority of value, quality, availability, etc. Different types of assets have different asset templates. Case Link

assetFileHashValue: indicates the digital fingerprint of the asset. According to the binary data of ‘AssetFile’, applying the ‘assetFileHashType’, generate the unique and untampered ‘assetFileHashValue’, thus realizing effective registration of Asset information consistency.

LegalFile: indicates the Token-based mandatory delivery (TBD) agreement of real-world assets. This agreement publicly declares that any holder of the Asset token, that is, the owner of the real-world assets off-chain, can at any time enforce the settlement of the real-world assets described in the document ‘AssetFile’. Case Link

LegalFileHashValue: indicates the effective registration of the Token-based mandatory delivery (TBD) agreement. According to the binary data of ‘LegalFile’, applying the ‘legalFileHashType’, generate the untampered ‘legalFileHashValue’.

Asset Trading Management

The Asset token has an ETH-denominated price specified at initialization, with a 'tradeable' status set to false.
Only the owner can change the 'tradeable' status and set the asset price by calling the function:

function setTradeable(bool status) public onlyOwner onlyValid onlyUnissued;

function setAssetPrice(uint newAssetPrice) public onlyOwner onlyValid onlyUnissued;

If 'tradeable' is set to true, anyone can acquire the ownership of the Asset token by sending ETH to a payable function:

function buy() public payable onlyValid onlyUnissued;

This function requires 'valid' and 'unissued' status.

Asset Ownership Management

The owner of an Asset token can transfer the ownership to another holder under 'valid' and 'unissued' status.

function transferOwnership(address newowner) public onlyOwner onlyValid onlyUnissued;

Asset Cancellation

The cancellation is tightly related to the 'onlyValid' modifier.
After cancellation, the Asset token enters 'invalid' status.
Only the owner can execute the cancellation function once after the smart contract is initialized, under unissued and valid status.
This operation is not reversible.

function cancelContract() public onlyOwner onlyValid onlyUnissued;

Key Issuance Management

The holder of an Asset token can issue a fixed number of Asset keys, specifying a buy-back price, an initial Asset token distribution in the meantime.
Note that the buy-back price is stable-token denominated.

function issue (uint _supply, uint8 _decim, uint _price, address[] _address, uint[] _amount) public onlyValid onlyOwner onlyUnissued;

This operation requires 'valid' and 'unissued' status and can only be executed by the owner.

After issuing, Asset keys appear and are compatible with ERC20 standards:

/**
 * Standard ERC 20 interface.
 */
contract ERC20Interface {
    function totalSupply() public constant returns (uint);
    function balanceOf(address tokenOwner) public constant returns (uint balance);
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}

If a holder collects all Asset keys, he/she can convert them into the original Asset token by executing the 'convert' function:

function convert() public onlyValid onlyIssued;

This function requires that the Asset token is 'issued' and the executor (i.e, msg.sender) has all the Asset keys.

One can forcibly collect Asset keys from given holders by calling the 'collectAllForce' function at the buy-back price, if guaranteed that he/she has approved enough stable token to this contract.
However, due to the gas limitation of Ethereum, he/she cannot collect all Asset keys with only one call. Hence an agent that can be trusted is needed.
The operator is such an agent who will first receive a request to collect all Asset keys, and then collect them with the stable tokens provided by the claimer.

function collectAllForce(address[] _address) public onlyOperator;

Asset Dividends Management

If the real-world asset gains income and the corresponding Asset token has been issued, then the dividends will be distributed to holders of Asset keys according to their shares.
The dividend is denominated by the designated stable token.
To distribute dividends, one can call the 'distributeDividend' function, if guaranteed that he/she has approved enough stable token to this contract.
In addition, due to the limitation of Ethereum, one might not be able to distribute all dividends to all holders by one call, people can call 'partialDistributeDividend' instead, which specifies the amount and corresponding holders to distribute to.

function distributeDivident(uint amount) public;

function partialDistributeDivident(uint amount, address[] _address) public;

Rationale

The Asset token standard expresses the uniqueness of assets, similar to the exclusive characteristics of ERC721, and promotes the mutual conversion between Asset token and Asset keys. Asset keys keep backward compatibility with ERC20.

Based on the asset information documents and legal agreements, a bridge linking the real asset in the physical world and tokens in the blockchain world will be established. Compliance with the legal agreements under the laws and regulations of various countries will help holders of Asset token or keys to obtain the rights and interests of real assets appreciation and dividends in a legal and compliant manner. At the same time, Asset keys will be given the voucher of asset consumption and VIP services, which will facilitate their circulation in the real world.

Backwards Compatibility

Asset keys can be regarded as standard ERC20 tokens, which can only exist after the Asset token is issued.

Test Cases

Please check the link repository for the Process of Asset Tokenization test suite
Link

Implementation

The implementation is available in the repo: link.
Link

Copyright

Copyright and related rights waived via CC0.

@hack1t hack1t changed the title new EIP application Asset Token Standard Nov 2, 2018
@Axejiang
Copy link

Axejiang commented Nov 5, 2018

Cool!

@hack1t hack1t changed the title Asset Token Standard ERC1540: Asset Token Standard Nov 6, 2018
@github-actions
Copy link

There has been no activity on this pull request for two months. It will be closed in a week if no further activity occurs. If you would like to move this EIP forward, please respond to any outstanding feedback or add a comment indicating that you have addressed all required feedback and are ready for a review.

@github-actions github-actions bot added the stale label Sep 15, 2020
@github-actions
Copy link

This pull request was closed due to inactivity. If you are still pursuing it, feel free to reopen it and respond to any feedback or request a review in a comment.

@github-actions github-actions bot closed this Sep 22, 2020
Woodpile37 added a commit to Woodpile37/EIPs that referenced this pull request Nov 4, 2023
<p>This PR was automatically created by Snyk using the credentials of a
real user.</p><br /><h3>Snyk has created this PR to upgrade chai from
4.3.6 to 4.3.10.</h3>

:information_source: Keep your dependencies up-to-date. This makes it
easier to fix existing vulnerabilities and to more quickly identify and
fix newly disclosed vulnerabilities when they affect your project.
<hr/>

- The recommended version is **4 versions** ahead of your current
version.
- The recommended version was released **a month ago**, on 2023-09-28.


<details>
<summary><b>Release notes</b></summary>
<br/>
  <details>
    <summary>Package name: <b>chai</b></summary>
    <ul>
      <li>
<b>4.3.10</b> - <a
href="https://snyk.io/redirect/github/chaijs/chai/releases/tag/v4.3.10">2023-09-28</a></br><p>This
release simply bumps all dependencies to their latest non-breaking
versions.</p>
<h2>What's Changed</h2>
<ul>
<li>upgrade all dependencies by <a class="user-mention notranslate"
data-hovercard-type="user"
data-hovercard-url="/users/keithamus/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/keithamus">@ keithamus</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1916961847" data-permission-text="Title is private"
data-url="chaijs/chai#1540"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1540/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1540">#1540</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link"
href="https://snyk.io/redirect/github/chaijs/chai/compare/v4.3.9...v4.3.10"><tt>v4.3.9...v4.3.10</tt></a></p>
      </li>
      <li>
<b>4.3.9</b> - <a
href="https://snyk.io/redirect/github/chaijs/chai/releases/tag/v4.3.9">2023-09-27</a></br><p>Upgrade
dependencies.</p>
<p>This release upgrades dependencies to address <strong><a
href="https://www.cve.org/CVERecord?id=CVE-2023-43646"
rel="nofollow">CVE-2023-43646</a></strong> where a large function name
can cause "catastrophic backtracking" (aka ReDOS attack) which can cause
the test suite to hang.</p>
<p><strong>Full Changelog</strong>: <a class="commit-link"
href="https://snyk.io/redirect/github/chaijs/chai/compare/v4.3.8...v4.3.9"><tt>v4.3.8...v4.3.9</tt></a></p>
      </li>
      <li>
<b>4.3.8</b> - <a
href="https://snyk.io/redirect/github/chaijs/chai/releases/tag/v4.3.8">2023-08-24</a></br><h2>What's
Changed</h2>
<ul>
<li>4.x.x: Fix link to commit logs on GitHub by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/bugwelle/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/bugwelle">@ bugwelle</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1442318999" data-permission-text="Title is private"
data-url="chaijs/chai#1487"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1487/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1487">#1487</a></li>
<li>build(deps): bump socket.io-parser from 4.0.4 to 4.0.5 by <a
class="user-mention notranslate" data-hovercard-type="organization"
data-hovercard-url="/orgs/dependabot/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/dependabot">@ dependabot</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1442803192" data-permission-text="Title is private"
data-url="chaijs/chai#1488"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1488/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1488">#1488</a></li>
<li>Small typo in test.js by <a class="user-mention notranslate"
data-hovercard-type="user"
data-hovercard-url="/users/mavaddat/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/mavaddat">@ mavaddat</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1154733117" data-permission-text="Title is private"
data-url="chaijs/chai#1459"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1459/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1459">#1459</a></li>
<li>docs: specify return type of objDisplay by <a class="user-mention
notranslate" data-hovercard-type="user"
data-hovercard-url="/users/scarf005/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/scarf005">@ scarf005</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1476032440" data-permission-text="Title is private"
data-url="chaijs/chai#1490"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1490/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1490">#1490</a></li>
<li>Update CONTRIBUTING.md by <a class="user-mention notranslate"
data-hovercard-type="user"
data-hovercard-url="/users/matheus-rodrigues00/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/matheus-rodrigues00">@
matheus-rodrigues00</a> in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="1732701131"
data-permission-text="Title is private"
data-url="chaijs/chai#1521"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1521/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1521">#1521</a></li>
<li>Fix: update exports.version to current version by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/peanutenthusiast/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/peanutenthusiast">@
peanutenthusiast</a> in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="1864098264"
data-permission-text="Title is private"
data-url="chaijs/chai#1534"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1534/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1534">#1534</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/bugwelle/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/bugwelle">@ bugwelle</a> made
their first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="1442318999"
data-permission-text="Title is private"
data-url="chaijs/chai#1487"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1487/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1487">#1487</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/mavaddat/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/mavaddat">@ mavaddat</a> made
their first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="1154733117"
data-permission-text="Title is private"
data-url="chaijs/chai#1459"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1459/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1459">#1459</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/scarf005/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/scarf005">@ scarf005</a> made
their first contribution in <a class="issue-link js-issue-link"
data-error-text="Failed to load title" data-id="1476032440"
data-permission-text="Title is private"
data-url="chaijs/chai#1490"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1490/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1490">#1490</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/matheus-rodrigues00/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/matheus-rodrigues00">@
matheus-rodrigues00</a> made their first contribution in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1732701131" data-permission-text="Title is private"
data-url="chaijs/chai#1521"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1521/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1521">#1521</a></li>
<li><a class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/peanutenthusiast/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/peanutenthusiast">@
peanutenthusiast</a> made their first contribution in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1864098264" data-permission-text="Title is private"
data-url="chaijs/chai#1534"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1534/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1534">#1534</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link"
href="https://snyk.io/redirect/github/chaijs/chai/compare/v4.3.7...v4.3.8"><tt>v4.3.7...v4.3.8</tt></a></p>
      </li>
      <li>
<b>4.3.7</b> - <a
href="https://snyk.io/redirect/github/chaijs/chai/releases/tag/v4.3.7">2022-11-07</a></br><h2>What's
Changed</h2>
<ul>
<li>fix: deep-eql bump package to support symbols comparison by <a
class="user-mention notranslate" data-hovercard-type="user"
data-hovercard-url="/users/snewcomer/hovercard"
data-octo-click="hovercard-link-click"
data-octo-dimensions="link_type:self"
href="https://snyk.io/redirect/github/snewcomer">@ snewcomer</a> in <a
class="issue-link js-issue-link" data-error-text="Failed to load title"
data-id="1438632532" data-permission-text="Title is private"
data-url="chaijs/chai#1483"
data-hovercard-type="pull_request"
data-hovercard-url="/chaijs/chai/pull/1483/hovercard"
href="https://snyk.io/redirect/github/chaijs/chai/pull/1483">#1483</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a class="commit-link"
href="https://snyk.io/redirect/github/chaijs/chai/compare/v4.3.6...v4.3.7"><tt>v4.3.6...v4.3.7</tt></a></p>
      </li>
      <li>
<b>4.3.6</b> - <a
href="https://snyk.io/redirect/github/chaijs/chai/releases/tag/v4.3.6">2022-01-26</a></br><p>Update
loupe to 2.3.1</p>
      </li>
    </ul>
from <a href="https://snyk.io/redirect/github/chaijs/chai/releases">chai
GitHub release notes</a>
  </details>
</details>


<details>
  <summary><b>Commit messages</b></summary>
  </br>
  <details>
    <summary>Package name: <b>chai</b></summary>
    <ul>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/744a16e1cc4e8a9c6d4499e1e520a0bc4c80ec18">744a16e</a>
4.3.10</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/0ccd823cb3ee6a433156c4e23cc67de79d4f368d">0ccd823</a>
upgrade all dependencies (ethereum#1540)</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/923d0a48fc59a910ecee37c85535379520a3e1b6">923d0a4</a>
4.3.9</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/1a0f8872711f64b8353c30ebcfdf0ceeab404bab">1a0f887</a>
make</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/a141e5739ab32ae579cd2df2eb745dbf1375ac27">a141e57</a>
upgrade deps</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/d9ff2c6d3e3f306b8b76e081cc892f42bf551b26">d9ff2c6</a>
4.3.8</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/8d3205b27e706f188f1c4f548d23b989eb60a0db">8d3205b</a>
build</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/b351dc09440e87917f25daa8d49dfb8866efc704">b351dc0</a>
Fix: update exports.version to current version (ethereum#1534)</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/1a8247f30dbe0f54268a9748ae673caec75d6bfe">1a8247f</a>
Update CONTRIBUTING.md (ethereum#1521)</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/3a8c49a70733ac7f4570925415e9a8544e2ee1c3">3a8c49a</a>
docs: specify return type of objDisplay (ethereum#1490)</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/b45512409768514aac931a54da628adf2d27a934">b455124</a>
test: fix typo in test.js (ethereum#1459)</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/98f42337562429353e829ebc4f85a00622087fce">98f4233</a>
build(deps): bump socket.io-parser from 4.0.4 to 4.0.5 (ethereum#1488)</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/acd16e0033591d849b82f0700fd223072ebf420c">acd16e0</a>
chore: 4.x.x: Fix link to commit logs on GitHub (ethereum#1487)</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/3c947a7f33b021730ea68a52bd15712fe57134be">3c947a7</a>
build</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/775f50958422278933db6efefa1ec2526191e632">775f509</a>
4.3.7</li>
<li><a
href="https://snyk.io/redirect/github/chaijs/chai/commit/8e780b44f321056c960f00b94b4c2aefa3392c21">8e780b4</a>
fix: deep-eql bump package to support symbols comparison (ethereum#1483)</li>
    </ul>

<a
href="https://snyk.io/redirect/github/chaijs/chai/compare/529b8b527ba99454471ac67d6aebca9d96cb5dd9...744a16e1cc4e8a9c6d4499e1e520a0bc4c80ec18">Compare</a>
  </details>
</details>
<hr/>

**Note:** *You are seeing this because you or someone else with access
to this repository has authorized Snyk to open upgrade PRs.*

For more information: <img
src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiJkMDQzOThiZC0wYzlmLTQyMmEtOGEyZi0yNTQ2NDNjMDY2MDMiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6ImQwNDM5OGJkLTBjOWYtNDIyYS04YTJmLTI1NDY0M2MwNjYwMyJ9fQ=="
width="0" height="0"/>

🧐 [View latest project
report](https://app.snyk.io/org/woodpile37/project/3a4e6031-90ad-4f6e-a8f2-e52f97555f14?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)

🛠 [Adjust upgrade PR
settings](https://app.snyk.io/org/woodpile37/project/3a4e6031-90ad-4f6e-a8f2-e52f97555f14/settings/integration?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)

🔕 [Ignore this dependency or unsubscribe from future upgrade
PRs](https://app.snyk.io/org/woodpile37/project/3a4e6031-90ad-4f6e-a8f2-e52f97555f14/settings/integration?pkg&#x3D;chai&amp;utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)

<!---
(snyk:metadata:{"prId":"d04398bd-0c9f-422a-8a2f-254643c06603","prPublicId":"d04398bd-0c9f-422a-8a2f-254643c06603","dependencies":[{"name":"chai","from":"4.3.6","to":"4.3.10"}],"packageManager":"npm","type":"auto","projectUrl":"https://app.snyk.io/org/woodpile37/project/3a4e6031-90ad-4f6e-a8f2-e52f97555f14?utm_source=github&utm_medium=referral&page=upgrade-pr","projectPublicId":"3a4e6031-90ad-4f6e-a8f2-e52f97555f14","env":"prod","prType":"upgrade","vulns":[],"issuesToFix":[],"upgrade":[],"upgradeInfo":{"versionsDiff":4,"publishedDate":"2023-09-28T09:50:37.566Z"},"templateVariants":[],"hasFixes":false,"isMajorUpgrade":false,"isBreakingChange":false,"priorityScoreList":[]})
--->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants