This package contains the ACTUS Protocol smart contracts as well as a Typescript SDK for easier interaction with the smart contracts. The foundation of the protocol is the Solidity implementation of ACTUS Contract Types (https://www.actusfrf.org/algorithmic-standard) which is part of the package.
https://docs.actus-protocol.io/
Install via yarn or npm
yarn add @atpar/protocol
Importing contracts
import "@atpar/protocol/contracts/....sol";
Using the Typescript SDK
import { AP } from '@atpar/protocol';
// tested with web3@1.2.4 - other versions may cause typing issues
const ap = await AP.init(web3, ADDRESS_BOOK);
See README in root directory.
yarn test
yarn ap-chain:setup
cd deployments/<deployment>
find ./*.json | while read f ; do echo -n "$f: " ; cat "$f" | jq -r '.receipt.contractAddress' ; done
Contains banking-grade financial logic such as ACTUS day-count & end-of-month conventions, ACTUS datatypes and floating point arithmetic used throughout all ACTUS engines.
Contains ACTUS state machine engines for each ACTUS Contract Type. An Engine implements the state transition & payoff functions and the schedule generation logic for an ACTUS Contract Type. Engines are stateless smart contracts, thus can be used on-chain as well as off-chain (e.g. by using the EVM as a TEE).
Contains the protocol which is build on top of ACTUS Core and the ACTUS Engines.
- Define an ACTUS term sheet depending on the financial contract you want to model and set up the ownership structure
- Use the appropriate Asset Actor contract (e.g. the PAMActor) to initialize and register the new asset on chain
- Make sure that the Asset Actor has the required token allowances and progress the asset vie the
progress()
function.
For an example, please review the Issue and service a loan guide.
- ANN (Annuity)
- CEC (Contract Enhancement Collateral)
- CEG (Contract Enhancement Guarantee)
- CERTF (Certificate)
- COLLA (Simplified Principal At Maturity with Collateral)
- PAM (Principal At Maturity)
- STK (Stock)
- Contract-Role-Sign-Convention (for PAM)
- Simplified Analytical Annuity Calculation
- SCF (Shift/Calculate following)
- SCMF (Shift/Calculate modified following)
- CSF (Calculate/Shift following)
- CSMF (Calculate/Shift modified following)
- SCP (Shift/Calculate preceding)
- SCMP (Shift/Calculate modified preceding)
- CSP (Calculate/Shift preceding)
- CSMP (Calculate/Shift modified preceding)
- Same Day Shift
- End-Of-Month Shift
- A/AISDA (Actual Actual ISDA)
- A/360 (Actual Three Sixty)
- A/365 (Actual Three Sixty Five)
- 30E/360ISDA (Thirty E Three Sixty ISDA)
- 30E/360 (Thirty E Three Sixty)
- 28E336 (Twenty Eight E Three Thirty Six)
- ONE (One Intraday)
- OBYT (OneBy Twelve Intraday)
- HRSAA (Hours Actual Actual Intraday)
- MINAA (Minutes Actual Actual Intraday)
- SECAA (Seconds Actual Actual Intraday)
All ACTUS related types depended on atpar/actus-dictionary. With the exception of Array types, ACTUS types are one to one mapped in Solidity.
ACTUS Dictionary data type | Corresponding Solidity data type |
---|---|
Timestamp (ISO8601 Datetime) | uint256 (Unix Timestamp in sec.) |
Real | int256 (10 ** 18, fixed point) |
Integer | int256 (10 ** 18, fixed point) |
Varchar | bytes32 or bytes (depending on length) |
Enum | enum |
Period (ISO8601 Duration) | struct (IP where I: uint256, P: enum, isSet: boolean) |
Cycle ([ISO8601 Duration] L[s={0,1}]) | struct (IPS where I: uint256, P: enum, S: enum, isSet: boolean) |
ContractReference | struct (object: bytes32, object2: bytes32, _type: enum, role: enum) |
If the underlying ACTUS types change in atpar/actus-dictionary , the following files and directories may be affected and have to be updated manually: