Last active
August 2, 2019 10:03
-
-
Save tokchin/b92b6208a19311b9ef4c3b1d94860e72 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Web3 from 'web3' | |
import axios from 'axios' | |
//メタマスクのロード(メタマスク公式の初期化処理) | |
function getWeb3(){ | |
let web3 | |
//metamaskの場合 | |
if (window.ethereum) { | |
//web3インスタンスを生成 | |
web3 = new Web3(ethereum); | |
try { | |
//ユーザーのアカウントにweb3でアクセスできるかチェック | |
ethereum.enable(); | |
// エラーの場合 | |
} catch (error) { | |
// User denied account access... | |
console.log('User denied account access...'); | |
} | |
} | |
// レガシーなdappブラウザの場合 | |
else if (window.web3) { | |
web3 = new Web3(web3.currentProvider); | |
} | |
// DAPPブラウザでない場合 | |
else { | |
console.log('Non-Ethereum browser detected. You should consider trying MetaMask!'); | |
} | |
return web3 | |
} | |
//コントラクトのロード | |
function getContract(){ | |
//web3インスタンスの生成 | |
let web3 =getWeb3() | |
//イーサリアムのコントラクトのメソッドを実行するときにtokenABIの設定が必要(APIみたいなやつ) | |
const tokenABI =[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintingFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPauser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"tokenURI","type":"string"}],"name":"mintWithTokenURI","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_extensionType","type":"uint16"},{"name":"_supplyLimit","type":"uint16"}],"name":"setSupplyLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishMinting","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_extensionType","type":"uint16"}],"name":"getSupplyLimit","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenURIPrefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"isAlreadyMinted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenURIPrefix","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EXTENSION_TYPE_OFFSET","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"mintExtensionAsset","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[],"name":"MintingFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}] | |
//マイクリ エクステのトークンアドレス | |
const contractHashMCHE = "0xdceaf1652a131F32a821468Dc03A92df0edd86Ea" | |
//マイクリ エクステのコントラクトをweb3jsで読み込み | |
return web3.eth.Contract(tokenABI, contractHashMCHE) | |
} | |
//tokenidからjsonを取得 | |
//引数[2002023,2002012,2002022] | |
//戻り値[json,json,json,json] | |
function getJsonFromTokenIds(tokenids){ | |
//出力する内容を宣言 | |
let output = [] | |
//web3のcontractインスタンスを生成 | |
let contract = getContract() | |
//引数で渡されたtoken_idの数だけループ | |
for(let i=0;i<tokenids.length;i++){ | |
//生成したマイクリ のコントラクトインスタンスにトークンIDを投げ | |
//メタデータのダウンロードURIを入手 | |
contract.methods.tokenURI(tokenids[i]).call().then(function(value){ | |
//ゲットしたURIからメターデータをダウンロード | |
axios | |
.get(value) | |
.then(response => (output.push(response.data))) | |
}) | |
} | |
//アウトプットを出力 | |
return output | |
} | |
//ウォレットアドレスにひもづくマイクリ アセットを全て取得する。 | |
//引数 "0x6B3c92AADB19750F3dFaAD31974d8B3c7E7A171E" | |
//戻り値[json, json, json...] | |
export async function getJsonFromWalletAddress(address){ | |
let num | |
let assets = [] | |
let contract = getContract() | |
//生成したコントラクトのインスタンスに引数として私たアドレスに | |
//何個のアセットが紐づいているかを問い合わせ | |
await contract.methods.balanceOf(address).call().then(function(value){ | |
//受け取ったインデックスを16進数のHEXから10進数に変換 | |
num = parseInt(value._hex,16) | |
}) | |
//保有アセットの数だけ、token_idを取得 | |
for(let i=0;i<num;i++){ | |
await contract.methods.tokenOfOwnerByIndex(address,i).call().then(function(value){ | |
assets.push(value) | |
}) | |
} | |
return getJsonFromTokenIds(assets) | |
} | |
//自分の持ってるアセットのメタデータをjsonで取得 | |
//引数 自分のウォレットアドレス | |
//戻り値[json, json, json...] | |
export async function getMyAssets(){ | |
let web3 = getWeb3() //web3の情報の読み込み | |
//web3jsを使って自分のアドレスを取得 | |
let address = await web3.eth.getAccounts().then(function(value){return value[0]}) | |
//getJsonFromWalletAddressに引数として | |
//自分のアドレスを送って自分の保有アセットをjsonで取得 | |
return getJsonFromWalletAddress(address) | |
} | |
//index 1-10のアセットを取得 | |
//引数 なし | |
//戻り値[asset1, asset2... asset10] | |
export async function getRandomAssets(){ //実はrandomではない。。。 | |
let contract = getContract() | |
let tokenids2 = [] | |
//インデックス番号が1−10のアセットのtoken_idを入手 | |
for(let i=0;i<10;i++){ | |
await contract.methods.tokenByIndex(i).call().then(function(value){ | |
tokenids2.push(parseInt(value._hex,16)) | |
}) | |
} | |
//token_idからjsonファイルを入手する。 | |
return getJsonFromTokenIds(tokenids2) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment