//tips
//crypto
各所でSynthetix(SNX)という単語を見るようになったので調べてみた。
Synthetixはイーサリアムブロックチェーン上に構築される合成資産を作成・取引することが可能なブロックチェーンプラットフォームで、法定通貨や株式、金や石油などのコモディティの価格と連動するトークン(合成資産)を生成・取引することが可能なもの。
mintしたいSynth(合成資産)を選択し、Synthトークンと引き換えにSNXをステークする形。SNXはSynthetixを利用するための担保で、この担保を入れることで合成資産を借用物として運用することができる。このdebtという認識が自分にはできていなかったので勉強になった。
SNXは超過担保(currently 750%)で求められるようなので、合成資産で発行したいがくの7.5倍額相当のSNXをロックする必要があるよう。この担保率はガバナンスによって変更可能。
Synthetixの合成資産はロング型もショート型も作ることができ、ロングにはsがつき、インバースにはiがつく。これは株などのindexと同様。(dxdyではsEthがショートとして使われるなど若干混乱する)
面白いことに、合成資産のexit時にSNXをアンロックするためには交換ではなく、合成資産をburnする必要があるということ。これにより供給量自体が変わる。いつも売買双方がいるマーケットを見てきたのでこれは新鮮に感じた。
pay back their debt. At its simplest: a staker mints 10 sUSD by locking SNX as collateral, and must burn 10 sUSD to unlock it.
The required amount of sUSD is burned, and total supply of sUSD is updated along with the sUSD balance in the user’s wallet.
また、Synthetix上の合成資産は ERC20 トークン なので、 Uniswap などで取引することも可能とのこと。
Synthetixを活用する理由として、オンチェーンでは存在しない特定の資産を扱えることなどもあるようだが、最も人気のある3つのSynthはsUSD、sETH、sBTCで、mintされたSynth全体の75%以上を占めていることからどちらかというとヘッジ目的や分散での活用が多いよう。ショートだけでなく、既存の保有通貨やイールドファーミングポジションをヘッジできる。
なぜethではなく、sETHが選ばれる機会があるのかは、Synthetixのfarmingを活用することと、先日に触れたLIDO同様に、ロック期間があるため交換プールとしての需要があるなどが背景にありそう。
もちろん複数のDeFi資産のバスケット価格を追跡するDeFiインデックスのようなインデックスを作成することができるとのこと。
Synthは原資産の価格をトラックするために、分散型価格オラクルを使用しており、自動的に価格が計算され当て込まれる。
2021年にイーサリアムレイヤー2であるOptimismを導入したことで注目を浴びているとのこと。
Optimismを導入されることで、イーサリアムブロックチェーンのトランザクション処理スピードは10万トランザクション/秒になる。
OptimismのようなRollupsはEthereumブロックチェーンのセキュリティを活用し、セキュリティ面で大きな妥協をすることなく、サイドチェーンと同様のスケーリングメリット (トランザクションスループットの向上やトランザクション手数料の低減など) を実現することが可能。

//smart contract
以前作成していたGreeterフォルダをvisualstudiocode2で開く。
Truffleがコントラクトをコンパイルしたものをテストネットワークにデプロイした上でテストスクリプトを実行するところまでは実行していたので、今度はテストプロセスの外側で稼働しているネットワークにコントラクトをデプロイする。
シンプルなdexを作成した時と同様にmigrateを使うことになる。
—networkフラグの情報をtruffle-config.jsファイルで調べて、その設定に基づいてコントラクトをデプロイすることになる。
デプロイするには、まず、コントラクトをコンパイルする必要があり、truffle testでもmigrateでもこのコンパイル手順は内包されているが、自身でcompileとしてもコンパイルすることができる。
Compileするとエラーが発生。Ownable.solのダイルが見つからないとのこと。
import "@openzeppelin/contracts/access/Ownable.sol";
//import"openzeppelin-solidity/contracts/ownership/Ownable.sol";
openzeppelinをインストールしていなかったかと思い、下記コマンドを実行。
npm install openzeppelin-solidity
それでもエラーとなる。
フォルダを開きファイルのパスを確認。
import '../../node_modules/openzeppelin-solidity/contracts/access/Ownable.sol';
上記に修正することでなんとかパスは通った模様。
一方で_ownerがエラーとなる問題発生。
function owner() public view returns(address){
return _owner;
}
Ownable.solの中身を確認すると確かに_ownerが宣言されていたがprivateで使用されている。
abstract contract Ownable is Context {
address private _owner;
こちらでownableの内容が定義されているのでGreeter.solの内容を修正する必要があった。
// SPDX-License-Identifier: MIT
pragma solidity >= 0.4.0 < 0.9.0;
import '../../node_modules/openzeppelin-solidity/contracts/access/Ownable.sol';
//import "@openzeppelin/contracts/access/Ownable.sol";
//import"openzeppelin-solidity/contracts/ownership/Ownable.sol";
contract Greeter is Ownable{
string private _greeting="Hello,World!";
function greet() external view returns(string memory){
return _greeting;
}
function setGreeting(string calldata greeting) external onlyOwner{
_greeting=greeting;
}
}
Ownerについての記載を削除している。
インポートしたファイルからownableを読み込み現在のスコープで利用できるようにしている。これで実行してみるがエラー。
Compiling your contracts...
===========================
> Compiling ./contracts/Greeter.sol
project:/contracts/Greeter.sol:4:1: ParserError: Source "node_modules/openzeppelin-solidity/contracts/access/Ownable.sol" not found
import '../../node_modules/openzeppelin-solidity/contracts/access/Ownable.sol';
今度はnpm install openzeppelin-solidity --save-devをgreeterフォルダ内で実行。
npm install @openzeppelin/contractsこれでもダメ。
npm init --yesを行い、package.jsonを作成し、npm install @openzeppelin/contractsを実行。
cat package.json
{
"name": "greeter",
"version": "1.0.0",
"description": "",
"main": "truffle-config.js",
"directories": {
"test": "test"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@openzeppelin/contracts": "^4.3.2"
}
}
これで実行。今度はバージョン情報エラー。
Error: Truffle is currently using solc 0.5.16, but one or more of your contracts specify "pragma solidity ^0.8.0".
Please update your truffle config or pragma statement(s).
(See https://trufflesuite.com/docs/truffle/reference/configuration#compiler-configuration for information on configuring Truffle to use a specific solc compiler version.)
いじって大丈夫な部分なのか不安なので、importの部分は今回諦める。
https://trufflesuite.com/docs/truffle/reference/configuration#compiler-configuration
シンプルに下記にするとすんなりコンパイルが通った。バージョン問題などはややこしい。
contract Greeter{
string private _greeting="Hello,World!";
address private _owner;
constructor()public{
_owner=msg.sender;
}
function greet() external view returns(string memory){
return _greeting;
}
function setGreeting(string calldata greeting) external {
_greeting=greeting;
}
function owner()public view returns(address){
return _owner;
}
}
このようにコンパイルすると、build/contractsの中に新たにjsonファイルが作成されていることがわかる。
無事成功。このまま進める。
//基本情報理解
ヒューリスティック評価法は経験則に基づく基準によって専門家が評価する方法。
認知的ウォークスルー法は専門家が利用者になったつもりでタスクを実行し、問題点を指摘する方法。