Skip to main content

StableCredit

StableCredit contract

Extends the ERC20 standard to include mutual credit functionality where users can mint tokens into existence by utilizing their lines of credit. Credit defaults result in the transfer of the outstanding credit balance to the lost debt balance.

Restricted functions are only callable by network operators.

Methods

__MutualCredit_init

function __MutualCredit_init(string name_, string symbol_) external nonpayable

initializes ERC20 with the name and symbol provided.

should be called directly after deployment (see OpenZeppelin upgradeable standards).

Parameters

NameTypeDescription
name_stringname of the credit token.
symbol_stringsymbol of the credit token.

__StableCredit_init

function __StableCredit_init(string name_, string symbol_, address access_) external nonpayable

initializes lost debt account with max limit and assigns access contract provided.

should be called directly after deployment (see OpenZeppelin upgradeable standards).

Parameters

NameTypeDescription
name_stringname of the credit token.
symbol_stringsymbol of the credit token.
access_addressaddress of access manager contract.

access

function access() external view returns (contract IAccessManager)

the access manager contract which manages network role access control

Returns

NameTypeDescription
_0contract IAccessManagerundefined

allowance

function allowance(address owner, address spender) external view returns (uint256)

See {IERC20-allowance}.

Parameters

NameTypeDescription
owneraddressundefined
spenderaddressundefined

Returns

NameTypeDescription
_0uint256undefined

approve

function approve(address spender, uint256 amount) external nonpayable returns (bool)

See {IERC20-approve}. NOTE: If amount is the maximum uint256, the allowance is not updated on transferFrom. This is semantically equivalent to an infinite approval. Requirements: - spender cannot be the zero address.

Parameters

NameTypeDescription
spenderaddressundefined
amountuint256undefined

Returns

NameTypeDescription
_0boolundefined

assurancePool

function assurancePool() external view returns (contract IAssurancePool)

the reserve pool contract which holds and manages reserve tokens

Returns

NameTypeDescription
_0contract IAssurancePoolundefined

balanceOf

function balanceOf(address account) external view returns (uint256)

See {IERC20-balanceOf}.

Parameters

NameTypeDescription
accountaddressundefined

Returns

NameTypeDescription
_0uint256undefined

burn

function burn(uint256 amount) external nonpayable

Destroys amount tokens from the caller. See {ERC20-_burn}.

Parameters

NameTypeDescription
amountuint256undefined

burnFrom

function burnFrom(address account, uint256 amount) external nonpayable

Destroys amount tokens from account, deducting from the caller's allowance. See {ERC20-_burn} and {ERC20-allowance}. Requirements: - the caller must have allowance for accounts's tokens of at least amount.

Parameters

NameTypeDescription
accountaddressundefined
amountuint256undefined

burnLostDebt

function burnLostDebt(address member, uint256 amount) external nonpayable returns (uint256)

Reduces lost debt in exchange for assurance reimbursement.

Must have sufficient lost debt to service.

Parameters

NameTypeDescription
memberaddressundefined
amountuint256undefined

Returns

NameTypeDescription
_0uint256reimbursement amount from assurance pool

createCreditLine

function createCreditLine(address member, uint256 limit, uint256 initialBalance) external nonpayable

called by the underwriting layer to assign credit lines

If the member address is not a current member, then the address is granted membership

Parameters

NameTypeDescription
memberaddressaddress of line holder
limituint256credit limit of new line
initialBalanceuint256positive balance to initialize member with (will increment lost debt)

creditBalanceOf

function creditBalanceOf(address member) external view returns (uint256)

returns the credit balance of a given member

Parameters

NameTypeDescription
memberaddressaddress of member to query

Returns

NameTypeDescription
_0uint256credit balance of member

creditIssuer

function creditIssuer() external view returns (contract ICreditIssuer)

the credit issuer contract which manages credit line issuance

Returns

NameTypeDescription
_0contract ICreditIssuerundefined

creditLimitLeftOf

function creditLimitLeftOf(address member) external view returns (uint256)

returns the credit limit left of a given member

Parameters

NameTypeDescription
memberaddressaddress of member to query

Returns

NameTypeDescription
_0uint256credit limit left of member

creditLimitOf

function creditLimitOf(address member) external view returns (uint256)

returns the credit limit of a given member

Parameters

NameTypeDescription
memberaddressaddress of member to query

Returns

NameTypeDescription
_0uint256credit limit of member

decimals

function decimals() external view returns (uint8)

returns the number of decimals used by the credit token.

Returns

NameTypeDescription
_0uint8number of decimals.

decreaseAllowance

function decreaseAllowance(address spender, uint256 subtractedValue) external nonpayable returns (bool)

Atomically decreases the allowance granted to spender by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - spender cannot be the zero address. - spender must have allowance for the caller of at least subtractedValue.

Parameters

NameTypeDescription
spenderaddressundefined
subtractedValueuint256undefined

Returns

NameTypeDescription
_0boolundefined

increaseAllowance

function increaseAllowance(address spender, uint256 addedValue) external nonpayable returns (bool)

Atomically increases the allowance granted to spender by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - spender cannot be the zero address.

Parameters

NameTypeDescription
spenderaddressundefined
addedValueuint256undefined

Returns

NameTypeDescription
_0boolundefined

lostDebt

function lostDebt() external view returns (uint256)

Shared account that manages the rectification of lost debt.

Returns

NameTypeDescription
_0uint256amount of lost debt shared by network participants.

name

function name() external view returns (string)

Returns the name of the token.

Returns

NameTypeDescription
_0stringundefined

repayCreditBalance

function repayCreditBalance(address member, uint128 amount) external nonpayable

Repays referenced member's credit balance by amount.

Caller must approve this contract to spend reserve tokens in order to repay.

Parameters

NameTypeDescription
memberaddressundefined
amountuint128undefined

setAccessManager

function setAccessManager(address _access) external nonpayable

enables network admin to set the access manager address

Parameters

NameTypeDescription
_accessaddressaddress of access manager contract

setAssurancePool

function setAssurancePool(address _assurancePool) external nonpayable

enables network admin to set the assurance pool address

Parameters

NameTypeDescription
_assurancePooladdressaddress of assurance pool contract

setCreditIssuer

function setCreditIssuer(address _creditIssuer) external nonpayable

enables network admin to set the credit issuer address

Parameters

NameTypeDescription
_creditIssueraddressaddress of credit issuer contract

symbol

function symbol() external view returns (string)

Returns the symbol of the token, usually a shorter version of the name.

Returns

NameTypeDescription
_0stringundefined

totalSupply

function totalSupply() external view returns (uint256)

See {IERC20-totalSupply}.

Returns

NameTypeDescription
_0uint256undefined

transfer

function transfer(address to, uint256 amount) external nonpayable returns (bool)

See {IERC20-transfer}. Requirements: - to cannot be the zero address. - the caller must have a balance of at least amount.

Parameters

NameTypeDescription
toaddressundefined
amountuint256undefined

Returns

NameTypeDescription
_0boolundefined

transferFrom

function transferFrom(address from, address to, uint256 amount) external nonpayable returns (bool)

See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum uint256. Requirements: - from and to cannot be the zero address. - from must have a balance of at least amount. - the caller must have allowance for from's tokens of at least amount.

Parameters

NameTypeDescription
fromaddressundefined
toaddressundefined
amountuint256undefined

Returns

NameTypeDescription
_0boolundefined

updateCreditLimit

function updateCreditLimit(address member, uint256 creditLimit) external nonpayable

update existing credit lines

Parameters

NameTypeDescription
memberaddressundefined
creditLimituint256must be greater than given member's outstanding debt

writeOffCreditLine

function writeOffCreditLine(address member) external nonpayable

transfer a given member's debt to the lost debt account

Parameters

NameTypeDescription
memberaddressaddress of member to write off

Events

AccessManagerUpdated

event AccessManagerUpdated(address accessManager)

Parameters

NameTypeDescription
accessManageraddressundefined

Approval

event Approval(address indexed owner, address indexed spender, uint256 value)

Parameters

NameTypeDescription
owner indexedaddressundefined
spender indexedaddressundefined
valueuint256undefined

AssurancePoolUpdated

event AssurancePoolUpdated(address assurancePool)

Parameters

NameTypeDescription
assurancePooladdressundefined

ComplianceUpdated

event ComplianceUpdated(address sender, address recipient, bool senderCompliance, bool recipientCompliance)

Parameters

NameTypeDescription
senderaddressundefined
recipientaddressundefined
senderComplianceboolundefined
recipientComplianceboolundefined

CreditBalanceRepaid

event CreditBalanceRepaid(address member, uint128 amount)

Parameters

NameTypeDescription
memberaddressundefined
amountuint128undefined

CreditIssuerUpdated

event CreditIssuerUpdated(address creditIssuer)

Parameters

NameTypeDescription
creditIssueraddressundefined

CreditLimitUpdate

event CreditLimitUpdate(address member, uint256 limit)

Parameters

NameTypeDescription
memberaddressundefined
limituint256undefined

CreditLimitUpdated

event CreditLimitUpdated(address member, uint256 creditLimit)

Parameters

NameTypeDescription
memberaddressundefined
creditLimituint256undefined

CreditLineCreated

event CreditLineCreated(address member, uint256 creditLimit, uint256 balance)

Parameters

NameTypeDescription
memberaddressundefined
creditLimituint256undefined
balanceuint256undefined

CreditLineWrittenOff

event CreditLineWrittenOff(address member, uint256 amount)

Parameters

NameTypeDescription
memberaddressundefined
amountuint256undefined

Initialized

event Initialized(uint8 version)

Parameters

NameTypeDescription
versionuint8undefined

LostDebtBurned

event LostDebtBurned(address member, uint256 amount)

Parameters

NameTypeDescription
memberaddressundefined
amountuint256undefined

Transfer

event Transfer(address indexed from, address indexed to, uint256 value)

Parameters

NameTypeDescription
from indexedaddressundefined
to indexedaddressundefined
valueuint256undefined