//tips
notion使っていくか検証中。
//crypto
日本ではガバナンストークンを発行できないという話を聞いたので調べてみた。
基本的に、日本でガバナンストークンを発行すると、税制の仕組み上、ガバナンストークンが売上(自社発行のトークンが期末保有暗号資産が直で計上される)として課税対象となり、現状は海外での発行一択となっていることがわかった。
確かにこれは、スタートアップには辛すぎる。
この税制の背景としては、2017-18年のICO詐欺事件から大衆を保護する狙いがあったとのこと。
さらに、調べていくと、ブロックチェーン等を利用した集団投資スキームは、発行者開示の適用基準が厳しい有価証券と位置付けられ、その場合は、下記の条件がつけられているよう。
①発行者の開示:
・500名以上の投資家の保有、発行額1億円以上、出資金の50%以上を有価証券に投資する場合
②取得の獲得及び最低資本金の設定
売買等を行う業者:第二種金融商品取引業の取得
(最低資本金:1,000万円)
※集団投資スキーム: 投資家から調達した資金・暗号資産を用いて事業を行い、その収益を投資家に分配するもの
厳しめに位置付けられていることがわかる。
他に規制で影響しそうなものは、
・取引所などへの顧客の本人確認義務付け等のマネーロンダリング・対策
・交換業者に対し、コールドウォレットなどの管理手法の導入義務づけやホットウォレット分と同種・同量の暗号資産の保持の義務ずけ。預金分の借金または利益貯蓄が必要。再投資が難しくなる形態。
「業務の円滑な遂行等のために必要なもの(顧客から預かる暗号資産全量の5%を上限)を除き、顧客の暗号資産を信頼性の高い方法(コールドウォレット等)で管理することを義務付け、ホットウォレットで管理する顧客の暗号資産については、別途、見合いの弁済原資(同種・同量の暗号資産)の保持を義務付け」
セキュリティトークンと通常のトークンの違いについては別途調べる。
LPトークンとガバナンストークンの発行については面白い見解があり、
LPトークンの場合
・ 流動性の提供者が取得する権利は、提供された流動性を用いてUniswapが暗号資産の交換を行ったことで獲得した交換手数料につき、その分配を受ける権利であり、それをトークン化したLPトークンは電子記録移転権利(集団投資スキーム持分)に該当する可能性がある。
・ 他方、流動性提供者への損失の配分については予定されていないと思われるため、電子記録移転権利とは法的性質が異なるとも考えうる。ここは難問であり更に要検討。
・ なお、LPトークンが電子記録移転権利とみなされた場合でも、Uniswapは、その発行や運用を行う「者」ではないため、金商法上の開示規制や金商業規制の適用はないものと思われる。
ガバナンストークンの場合
・ ガバナンストークンUNIは暗号資産に該当するものと考えられるが、Uniswapを利用したことによる報酬、一種のおまけ的なものとして配布されていると考えられるため、暗号資産の売買等には該当せず、資金決済法上の規制はない
上記のように資金獲得手段として用いないガバナンストークンであれば、おまけであり、暗号資産の売買には該当しないと言えるよう。
一方で、暗号資産交換業は、資金決済法において、以下のいずれかの行為を「業として行うこと」を暗号資産交換業と定め、これを行うには内閣総理大臣の登録を必要としている。
① 暗号資産の売買又は他の暗号資産との交換
② ①に掲げる行為の媒介、取次ぎ又は代理
③ ①、②に関して、利用者の金銭の管理をすること
④ 他人のために暗号資産の管理をすること(当該管理を業として行うことにつき他の法律に特別の規定のある場合を除く)
諸々見解は固まっていないところもあるがリサーチしつつ、進んでいくしかない感じがする。おまけのガバナンストークンは面白かった。チョコボールのおまけを思い出した。
//smart contract
下記でContractの先頭が大文字表記されていたのがエラーの要因だった。
contract("Fundraiser",accounts=>{//Contract
無事に成功
TestSimpleStorage
✓ testItStoresAValue (139ms)
Contract: Fundraiser
initialization
✓ gets the beneficiary name
Contract: SimpleStorage
✓ ...should store the value 89. (126ms)
3 passing (6s)
さて、ここからはfundraiser_test.jsを多少肉付けしていくことにする。webサイト、画像のURL、説明の状態変数は文字で表せるのでこちらも追加。
const FundraiserContract=artifacts.require("Fundraiser");
contract("Fundraiser",accounts=>{//Contract
//資金調達を行うための変数と受取人の名前の設定
let fundraiser;
const name="Beneficiary Name";
const url="beneficiaryname.org";
const imageURL="https://placekitten.com/600/350";
const description="Beneficiary description";
describe("initialization",()=>{
//beforeEachを使いテストが実行される前に変数をセット
//テスト対象の作成などの繰り返し動作を抽出
beforeEach(async()=>{
fundraiser=await FundraiserContract.new(
name,
url,
imageURL,
description
);
});
//データが正しく設定されているかを確認
it("gets the beneficiary name",async()=>{
const actual = await fundraiser.name();
assert.equal(actual,name,"names should match");
});
it("gets the beneficiary url",async()=>{
const actual = await fundraiser.url();
assert.equal(actual,url,"URL should match");
});
it("gets the beneficiary image url",async()=>{
const actual = await fundraiser.imageURL();
assert.equal(actual,imageURL,"imageURL should match");
});
it("gets the beneficiary description",async()=>{
const actual = await fundraiser.description();
assert.equal(actual,description,"description should match");
});
});
});
こっちは.solの方。
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.21 <0.9.0;
contract Fundraiser{
string public name;
string public url;
string public imageURL;
string public description;
constructor(
string memory _name,
string memory _url,
string memory _imageURL,
string memory _description
)public{
name=_name;
url=_url;
imageURL=_imageURL;
description=_description;
}
}
無事にコンパイル成功。
//基本情報理解
エクスプロイトexploitとはOSやアプリケーションの脆弱性を悪用して攻撃する不正プログラミングコードのことを指す。エクスプロイトキットは、その攻撃を簡略化するためのソフトウェアパッケージ。
ダークネットはインターネット上で到達可能であるが、使われていないIPアドレス空間を指す。ダークネットでは未使用のIPアドレスや未定義ポートを使った通信を行う。