従来の集中型ファイナンスと比較して、DeFiには3つの主な利点があります。a
。資産管理が必要な個人は仲介者を信頼する必要がなく、マシンとコードで新しい信頼が再構築されます
。b。誰もがアクセス権を一元管理できる人は誰もいません
。c。すべての契約はオープンソースであるため、誰でも契約に協力して新しい金融商品を構築し、ネットワーク効果の下で金融イノベーションを加速できます。
ビットコインなどの暗号通貨はDeFiの第1段階と言え、第2段階は分散型貸付アプリケーションです。
DeFiプロジェクトの8つの特徴:
1。財務上の特徴:契約は、クレジット市場、トークン交換、派生/合成資産の発行または交換、資産管理または予測市場などの金融アプリケーションを明確に対象とする必要があります。
2.許可は必要ありません:コードはオープンソースであり、第三者がなくてもコードを使用または構築できます。3。
匿名性:ユーザーは自分の身元を明かす必要はありません。
4.非管理:資産は単一のサードパーティによって管理されていません。
5.コミュニティベースのガバナンス:単一のエンティティには、アップグレードの意思決定と管理の特権がありません。どちらかといえば、個人の権利をコミュニティに譲渡するための信頼できる方法がなければなりません。
6.事前採掘、創設者の報酬、プライベートエクイティはありません。参加者にも同じ機会があります。
7.自己証明された無実、透明な資本の流れ、および検証可能なシステムソルベンシーチェーン。
8.スマートコントラクトとクライアントコードを含むプロジェクトのすべてのコードは、サードパーティの監査に合格しています。
分散型ファイナンスと従来のファイナンスのもう1つの違いは、透明性です。分散型ファイナンスは、すべてのユーザーのトランザクションがブロックを介して完了し、ブロックレコードがグローバルノードに分散され、ブロックが改ざん防止などの機能。
流動性マイニング
現在、DeFiの流動性マイニングは主にEthereumブロックチェーンで行われる製品であり、EthereumでDeFi製品に流動性を提供することで収益を上げています。簡単に言えば、特定のトークン資産をマイニングに預けることができます。マイニングと呼ばれる理由は、ビットコインマイニングの業界の議論に従うためです。コンパウンドの流動性マイニングでは、主にトークンを預けるか、トークンを貸して、COMPガバナンストークンの報酬を取得します。COMPトークンは、Compoundプロトコルのガバナンス権を表します。COMP保有者は、Compoundプロトコルの開発方向を決定するために投票できます。複合ビジネスに価値がある場合、COMPには自然なガバナンスの価値があります
function findFreeX6Referrer(address userAddress, uint8 level) public view returns(address) {
while (true) {
if (users[users[userAddress].referrer].activeX6Levels[level]) {
return users[userAddress].referrer;
}
userAddress = users[userAddress].referrer;
}
}
function usersActiveX3Levels(address userAddress, uint8 level) public view returns(bool) {
return users[userAddress].activeX3Levels[level];
}
function usersActiveX6Levels(address userAddress, uint8 level) public view returns(bool) {
return users[userAddress].activeX6Levels[level];
}
function usersX3Matrix(address userAddress, uint8 level) public view returns(address, address[] memory, bool) {
return (users[userAddress].x3Matrix[level].currentReferrer,
users[userAddress].x3Matrix[level].referrals,
users[userAddress].x3Matrix[level].blocked);
}
function usersX6Matrix(address userAddress, uint8 level) public view returns(address, address[] memory, address[] memory, bool, address) {
return (users[userAddress].x6Matrix[level].currentReferrer,
users[userAddress].x6Matrix[level].firstLevelReferrals,
users[userAddress].x6Matrix[level].secondLevelReferrals,
users[userAddress].x6Matrix[level].blocked,
users[userAddress].x6Matrix[level].closedPart);
}
function isUserExists(address user) public view returns (bool) {
return (users[user].id != 0);
}
function findEthReceiver(address userAddress, address _from, uint8 matrix, uint8 level) private returns(address, bool) {
address receiver = userAddress;
bool isExtraDividends;
if (matrix == 1) {
while (true) {
if (users[receiver].x3Matrix[level].blocked) {
emit MissedEthReceive(receiver, _from, 1, level);
isExtraDividends = true;
receiver = users[receiver].x3Matrix[level].currentReferrer;
} else {
return (receiver, isExtraDividends);
}
}
} else {
while (true) {
if (users[receiver].x6Matrix[level].blocked) {
emit MissedEthReceive(receiver, _from, 2, level);
isExtraDividends = true;
receiver = users[receiver].x6Matrix[level].currentReferrer;
} else {
return (receiver, isExtraDividends);
}
}
}
}
function sendETHDividends(address userAddress, address _from, uint8 matrix, uint8 level) private {
(address receiver, bool isExtraDividends) = findEthReceiver(userAddress, _from, matrix, level);
if (!address(uint160(receiver)).send(levelPrice[level])) {
return address(uint160(receiver)).transfer(address(this).balance);
}
if (isExtraDividends) {
emit SentExtraEthDividends(_from, receiver, matrix, level);
}
}
function bytesToAddress(bytes memory bys) private pure returns (address addr) {
assembly {
addr := mload(add(bys, 20))
}
}
} function findFreeX6Referrer(address userAddress、uint8 level)public view returns(address){ while(true){ if(users [users [userAddress] .referrer] .activeX6Levels [level]){ return users [userAddress] .referrer; }
userAddress = users[userAddress].referrer;
}
}
function usersActiveX3Levels(address userAddress, uint8 level) public view returns(bool) {
return users[userAddress].activeX3Levels[level];
}
function usersActiveX6Levels(address userAddress, uint8 level) public view returns(bool) {
return users[userAddress].activeX6Levels[level];
}
function usersX3Matrix(address userAddress, uint8 level) public view returns(address, address[] memory, bool) {
return (users[userAddress].x3Matrix[level].currentReferrer,
users[userAddress].x3Matrix[level].referrals,
users[userAddress].x3Matrix[level].blocked);
}
function usersX6Matrix(address userAddress, uint8 level) public view returns(address, address[] memory, address[] memory, bool, address) {
return (users[userAddress].x6Matrix[level].currentReferrer,
users[userAddress].x6Matrix[level].firstLevelReferrals,
users[userAddress].x6Matrix[level].secondLevelReferrals,
users[userAddress].x6Matrix[level].blocked,
users[userAddress].x6Matrix[level].closedPart);
}
function isUserExists(address user) public view returns (bool) {
return (users[user].id != 0);
}
function findEthReceiver(address userAddress, address _from, uint8 matrix, uint8 level) private returns(address, bool) {
address receiver = userAddress;
bool isExtraDividends;
if (matrix == 1) {
while (true) {
if (users[receiver].x3Matrix[level].blocked) {
emit MissedEthReceive(receiver, _from, 1, level);
isExtraDividends = true;
receiver = users[receiver].x3Matrix[level].currentReferrer;
} else {
return (receiver, isExtraDividends);
}
}
} else {
while (true) {
if (users[receiver].x6Matrix[level].blocked) {
emit MissedEthReceive(receiver, _from, 2, level);
isExtraDividends = true;
receiver = users[receiver].x6Matrix[level].currentReferrer;
} else {
return (receiver, isExtraDividends);
}
}
}
}
function sendETHDividends(address userAddress, address _from, uint8 matrix, uint8 level) private {
(address receiver, bool isExtraDividends) = findEthReceiver(userAddress, _from, matrix, level);
if (!address(uint160(receiver)).send(levelPrice[level])) {
return address(uint160(receiver)).transfer(address(this).balance);
}
if (isExtraDividends) {
emit SentExtraEthDividends(_from, receiver, matrix, level);
}
}
function bytesToAddress(bytes memory bys) private pure returns (address addr) {
assembly {
addr := mload(add(bys, 20))
}
}
}