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