--- /dev/null
+$(function(){
+ // 生成新熵
+ $('#btnCreateNewKey').click(function(){
+ console.log('创建新密钥');
+ $.ajax({
+ method: 'post', //get or post
+ url: 'http://127.0.0.1:5000/api/v1/get_gm_new_key',
+ data: {},
+ dataType: 'json',
+ }).done(function(data){
+ console.log(data);
+ layer.msg('创建成功')
+ $('#txtEntropy').val(data.entropy)
+ $('#txtMnemonics').val(data.mnemonic)
+ $('#txtSeed').val(data.seed)
+ $('#txtRootXprv').val(data.xprv)
+ $('#txtRootXpub').val(data.xpub)
+ $('#imgXprvQRCode').attr('src', 'data:image/jpg;base64,' + data.xprv_base64)
+ }).fail(function(err){
+ layer.alert('创建失败' + err);
+ });
+ })
+ // 清除熵
+ $('#btnResetKey').click(function(){
+ console.log('清除');
+ $('#txtEntropy').val('')
+ $('#txtMnemonics').val('')
+ $('#txtSeed').val('')
+ $('#txtRootXprv').val('')
+ $('#txtRootXpub').val('')
+ $('#imgXprvQRCode').attr('src', 'data:image/jpg;base64,')
+ })
+ // 生成新地址
+ $('#btnCreateNewAddress').click(function(){
+ console.log('创建新地址');
+ var xpub_str = $('#txtXpub').val()
+ var account_index_int = $('#txtAccountIndex').val()
+ var address_index_int = $('#txtAddressIndex').val()
+ var change_bool = false
+ if ($("input[name='inlineRadioOptionsChange']:checked").val() == "true") {
+ change_bool = true
+ }
+ var network_str = $("input[name='inlineRadioOptionsNetwork']:checked").val()
+ $.ajax({
+ method: 'post', //get or post
+ url: 'http://kit.blockmeta.com/api/v1/create_new_address',
+ data: {
+ "xpub_str": xpub_str,
+ "account_index_int": account_index_int,
+ "address_index_int": address_index_int,
+ "change_bool": change_bool,
+ "network_str": network_str
+ },
+ dataType: 'json',
+ }).done(function(data){
+ console.log(data);
+ layer.msg('创建成功')
+ $('#txtAddressPath').val(data.path)
+ $('#txtControlProgram').val(data.control_program)
+ $('#txtAddress').val(data.address)
+ $('#imgAddressQRCode').attr('src', 'data:image/jpg;base64,' + data.address_base64)
+ }).fail(function(err){
+ layer.alert('创建失败' + err);
+ });
+ })
+ // 清除地址
+ $('#btnResetAddress').click(function(){
+ console.log('清除');
+ $('#txtXpub').val('')
+ $('#txtAccountIndex').val('1')
+ $('#txtAddressIndex').val('1')
+ $('#txtAddressPath').val('')
+ $('#txtControlProgram').val('')
+ $('#txtAddress').val('')
+ $('#imgAddressQRCode').attr('src', 'data:image/jpg;base64,')
+ })
+ // 消息签名
+ $('#btnSignMessage').click(function(){
+ console.log('创建新签名');
+ var xprv_str = $('#txtXprv').val()
+ var message_str = $('#txtMessage').val()
+ $.ajax({
+ method: 'post', //get or post
+ url: 'http://kit.blockmeta.com/api/v1/xprv_sign',
+ data: {
+ "xprv_str": xprv_str,
+ "message_str": message_str
+ },
+ dataType: 'json',
+ }).done(function(data){
+ console.log(data);
+ layer.msg('签名成功')
+ $('#txtSignature').val(data.signature)
+ }).fail(function(err){
+ layer.alert('签名失败' + err);
+ });
+ })
+ // 清除消息签名
+ $('#btnResetSign').click(function(){
+ console.log('清除');
+ $('#txtXprv').val('')
+ $('#txtMessage').val('')
+ $('#txtSignature').val('')
+ })
+ // 验证签名
+ $('#btnVerifySignature').click(function(){
+ console.log('验证签名');
+ var xpub_str = $('#txtXpubVerify').val()
+ var message_str = $('#txtMessageVerify').val()
+ var signature_str = $('#txtSignatureVerify').val()
+ $.ajax({
+ method: 'post', //get or post
+ url: 'http://kit.blockmeta.com/api/v1/xpub_verify',
+ data: {
+ "xpub_str": xpub_str,
+ "message_str": message_str,
+ "signature_str": signature_str
+ },
+ dataType: 'json',
+ }).done(function(data){
+ console.log(data);
+ layer.msg('验证成功')
+ $('#txtVerifyResult').val(data.result)
+ }).fail(function(err){
+ layer.alert('验证失败,请检查输入数据格式是否正确' + err);
+ });
+ })
+ // 清除消息签名
+ $('#btnResetVerify').click(function(){
+ console.log('清除');
+ $('#txtXpubVerify').val('')
+ $('#txtMessageVerify').val('')
+ $('#txtSignatureVerify').val('')
+ $('#txtVerifyResult').val('')
+ })
+ // 发送交易
+ $('#btnSubmitTransaction').click(function(){
+ console.log('验证签名');
+ var raw_transaction_str = $('#txtRawTransaction').val()
+ var network_str = $("input[name='inlineRadioOptionsNetworkSubmitTx']:checked").val()
+ $.ajax({
+ method: 'post', //get or post
+ url: 'http://kit.blockmeta.com/api/v1/submit_transaction',
+ data: {
+ "raw_transaction_str": raw_transaction_str,
+ "network_str": network_str
+ },
+ dataType: 'json',
+ }).done(function(data){
+ console.log(data);
+ layer.msg('发送成功')
+ $('#txtRawTransaction').val('')
+ }).fail(function(err){
+ layer.alert('发送失败,请检查输入数据格式是否正确' + err);
+ });
+ })
+ // 清除发送交易
+ $('#btnResetSubmitTransaction').click(function(){
+ console.log('清除');
+ $('#txtRawTransaction').val('')
+ })
+ // 解码原生交易信息
+ $('#btnDocodeRawTransaction').click(function(){
+ console.log('解码交易');
+ var raw_transaction_str = $('#txtRawHexTransaction').val()
+ $.ajax({
+ method: 'post', //get or post
+ url: 'http://kit.blockmeta.com/api/v1/decode_raw_transaction',
+ data: {
+ "raw_transaction_str": raw_transaction_str
+ },
+ dataType: 'json',
+ }).done(function(data){
+ console.log(data);
+ layer.msg('解码成功')
+ $('#txtJsonTransaction').val(data.response)
+ }).fail(function(err){
+ layer.alert('解码失败,请检查输入数据格式是否正确' + err);
+ });
+ })
+ // 清除解码交易
+ $('#btnResetDecodeRawTransaction').click(function(){
+ console.log('清除');
+ $('#txtRawHexTransaction').val('')
+ $('#txtJsonTransaction').val('')
+ })
+});
--- /dev/null
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
+ <title>Bytom Kit</title>
+ <link rel="stylesheet" href="./node_modules/bootstrap/dist/css/bootstrap.min.css">
+ <link rel="stylesheet" href="./assets/main.css">
+ <script src="./node_modules/jquery/dist/jquery.min.js"></script>
+ <script src="./node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
+ <script src="./node_modules/layer/layer.js"></script>
+ <script src="./assets/main_gm.js"></script>
+</head>
+
+<body>
+ <nav class="navbar navbar-default">
+ <div class="nav-wrap">
+ <div class="navbar-header">
+ <a href="#" class="navbar-brand">Bytom Kit GM</a>
+ </div>
+ <ul class="nav navbar-nav">
+ <li role="presentation" class="active"><a data-toggle="tab" href="#key">Key</a></li>
+ <li role="presentation"><a data-toggle="tab" href="#address">Address</a></li>
+ <li role="presentation"><a data-toggle="tab" href="#sign">Sign</a></li>
+ <li role="presentation"><a data-toggle="tab" href="#verify">Verify</a></li>
+ <li role="presentation"><a data-toggle="tab" href="#submit">Submit Transaction</a></li>
+ <li role="presentation"><a data-toggle="tab" href="#decode">Decode Raw Transaction</a></li>
+ </ul>
+ </div>
+ </nav>
+ <div class="tab-content">
+ <div class="tab-pane active" id="key">
+ <div class="panel panel-default sc-bd">
+ <div class="panel-heading">
+ <h3 class="panel-title">Key </h3>
+ </div>
+ <div class="panel-body">
+ <form class="form-horizontal">
+ <!-- 熵 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Entropy</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtEntropy" placeholder="16 Bytes entropy, e.g. 9f57b7c2981614d15b82d5ad2433cbeb"
+ readonly>
+ </div>
+ </div>
+ <!-- 助记词 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Mnemonics</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtMnemonics" placeholder="12 mnemonics, e.g. palm sad vague coral genuine hamster host follow pudding canoe very strike"
+ readonly>
+ </div>
+ </div>
+ <!-- 种子 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Seed</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtSeed" placeholder="64 Bytes seed, e.g. 6abe43bc9f6a2d066f4f566f15bfb6c14a768bfd87bd31ab0cb30df45a7afa650906983fe03a44ba54738b9d05e0f3ee0718f251818c45b8e094d3d7a24ad5c0"
+ readonly>
+ </div>
+ </div>
+ <!-- 根扩展私钥 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Root Expanded Private Key</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtRootXprv" placeholder="64 Bytes root expanded private key, e.g. 3a52f1c955d1f4fa4d4908da226f200dbcc5b1674d6995ad0757da227ea269b38635bd6c1ca20a571b4f73416488610df9c51484e83127a98690536a0ff6e658"
+ readonly>
+ </div>
+ </div>
+ <!-- 根扩展公钥 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Root Expanded Public Key</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtRootXpub" placeholder="65 Bytes root expanded public key, e.g. 03af1ae23d21b576c69f3066508ed27a8ebe62a7a3b283dae160205dce37f94d8a8635bd6c1ca20a571b4f73416488610df9c51484e83127a98690536a0ff6e658"
+ readonly>
+ </div>
+ </div>
+ <!-- 根扩展私钥二维码 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Xprv QR Code</label>
+ <img id="imgXprvQRCode" width="200" src="" alt="">
+ </div>
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <a id="btnCreateNewKey" class="btn btn-primary">Create New Key</a>
+ <a id="btnResetKey" class="btn btn-primary">Reset</a>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ <div class="tab-pane" id="address">
+ <div class="panel panel-default sc-bd">
+ <div class="panel-heading">
+ <h3 class="panel-title">Address </h3>
+ </div>
+ <div class="panel-body">
+ <form class="form-horizontal">
+ <!-- 根扩展公钥 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Expanded Public Key</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtXpub" placeholder="64 Bytes expanded public key, e.g. 8fde12d7c9d6b6cbfbf344edd42f2ed86ae6270b36bab714af5fd5bb3b54adcec4265f1de85ece50f17534e42016ee9404a11fec94ddfadd4a064d27ef3f3f4c"
+ maxlength="128">
+ </div>
+ </div>
+ <!-- 账户索引 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Account Index</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtAccountIndex" placeholder="Account Index, e.g. 1, 2, 3..."
+ value="1">
+ </div>
+ </div>
+ <!-- 地址索引 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Address Index</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtAddressIndex" placeholder="Address Index, e.g. 1, 2, 3..."
+ value="1">
+ </div>
+ </div>
+ <!-- 找零 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Change</label>
+ <div class="col-sm-10">
+ <label class="radio-inline">
+ <input type="radio" name="inlineRadioOptionsChange" id="inlineRadioChangeTrue" value="true"> True
+ </label>
+ <label class="radio-inline">
+ <input type="radio" name="inlineRadioOptionsChange" id="inlineRadioChangeFalse" value="false" checked="checked">
+ False
+ </label>
+ </div>
+ </div>
+ <!-- 网络 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Network</label>
+ <div class="col-sm-10">
+ <label class="radio-inline">
+ <input type="radio" name="inlineRadioOptionsNetwork" id="inlineRadioMainet" value="mainnet"> Mainnet
+ </label>
+ <label class="radio-inline">
+ <input type="radio" name="inlineRadioOptionsNetwork" id="inlineRadioTestnet" value="testnet"> Testnet
+ </label>
+ <label class="radio-inline">
+ <input type="radio" name="inlineRadioOptionsNetwork" id="inlineRadioSolonet" value="solonet" checked="checked">
+ Solonet
+ </label>
+ </div>
+ </div>
+ <!-- 地址路径 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Address Path</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtAddressPath" placeholder="Address Path, e.g. m/44/153/1/0/1"
+ readonly>
+ </div>
+ </div>
+ <!-- control program -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Control Program</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtControlProgram" placeholder="Control Program, e.g. 00147640f3c34fe4b2b298e54e54a4692a47ce47aa5e"
+ readonly>
+ </div>
+ </div>
+ <!-- 地址 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Address</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtAddress" placeholder="Address, e.g. sm1qweq08s60ujet9x89fe22g6f2gl8y02j7lgr5v5"
+ readonly>
+ </div>
+ </div>
+ <!-- 根扩展私钥二维码 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Address QR Code</label>
+ <img id="imgAddressQRCode" width="200" src="" alt="">
+ </div>
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <a id="btnCreateNewAddress" class="btn btn-primary">Create New Address</a>
+ <a id="btnResetAddress" class="btn btn-primary">Reset</a>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ <div class="tab-pane" id="sign">
+ <div class="panel panel-default sc-bd">
+ <div class="panel-heading">
+ <h3 class="panel-title">Sign </h3>
+ </div>
+ <div class="panel-body">
+ <form class="form-horizontal">
+ <!-- 扩展私钥 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Expanded Private Key</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtXprv" placeholder="64 Bytes expanded private key, e.g. c003f4bcccf9ad6f05ad2c84fa5ff98430eb8e73de5de232bc29334c7d074759d513bc370335cac51d77f0be5dfe84de024cfee562530b4d873b5f5e2ff4f57c"
+ maxlength="128">
+ </div>
+ </div>
+ <!-- 消息 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Message</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtMessage" placeholder="Message, e.g. a6ce34eec332b32e42ef3407e052d64ac625da6f"
+ maxlength="10000">
+ </div>
+ </div>
+ <!-- 签名 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Signature</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtSignature" placeholder="Signature, e.g. f02f5bb22d8b32f14e88059a786379c26256892f45cf64770c844d0c5de2e52c00307b7bb25fcbb18be13c339a2f511a7c015a8cf81ac681052efe8e50eff00e"
+ readonly>
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <a id="btnSignMessage" class="btn btn-primary">Sign Message</a>
+ <a id="btnResetSign" class="btn btn-primary">Reset</a>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ <div class="tab-pane" id="verify">
+ <div class="panel panel-default sc-bd">
+ <div class="panel-heading">
+ <h3 class="panel-title">Verify </h3>
+ </div>
+ <div class="panel-body">
+ <form class="form-horizontal">
+ <!-- 扩展公钥 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Expanded Public Key</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtXpubVerify" placeholder="64 Bytes expanded public key, e.g. 1b0541a7664cee929edb54d9ef21996b90546918a920a77e1cd6015d97c56563d513bc370335cac51d77f0be5dfe84de024cfee562530b4d873b5f5e2ff4f57c"
+ maxlength="128">
+ </div>
+ </div>
+ <!-- 消息 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Message</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtMessageVerify" placeholder="Message, e.g. a6ce34eec332b32e42ef3407e052d64ac625da6f"
+ maxlength="10000">
+ </div>
+ </div>
+ <!-- 签名 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Signature</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtSignatureVerify" placeholder="Signature, e.g. f02f5bb22d8b32f14e88059a786379c26256892f45cf64770c844d0c5de2e52c00307b7bb25fcbb18be13c339a2f511a7c015a8cf81ac681052efe8e50eff00e"
+ maxlength="128">
+ </div>
+ </div>
+ <!-- 验证结果 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Verify Result</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtVerifyResult" placeholder="Verify Result, True or False"
+ readonly>
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <a id="btnVerifySignature" class="btn btn-primary">Verify Signature</a>
+ <a id="btnResetVerify" class="btn btn-primary">Reset</a>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ <div class="tab-pane" id="submit">
+ <div class="panel panel-default sc-bd">
+ <div class="panel-heading">
+ <h3 class="panel-title">Submit Transaction </h3>
+ </div>
+ <div class="panel-body">
+ <form class="form-horizontal">
+ <!-- 签名好的交易信息 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Raw Transaction</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtRawTransaction" placeholder="Raw Transaction, e.g. 070100010160015e0873eddd68c4ba07c9410984799928288ae771bdccc6d974e72c95727813461fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094ebdc030101160014052620b86a6d5e07311d5019dffa3864ccc8a6bd630240312a052f36efb9826aa1021ec91bc6f125dd07f9c4bff87014612069527e15246518806b654d57fff8b6fe91866a19d5a2fb63a5894335fce92a7b4a7fcd340720e87ca3acdebdcad9a1d0f2caecf8ce0dbfc73d060807a210c6f225488347961402013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082eee0020116001418028ef4f8b8c278907864a1977a5ee6707b2a6b00013cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80b8b872011600142935e4869d0317d9701c80a02ecf888143cb9dd200"
+ maxlength="100000">
+ </div>
+ </div>
+ <!-- 网络 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Network</label>
+ <div class="col-sm-10">
+ <label class="radio-inline">
+ <input type="radio" name="inlineRadioOptionsNetworkSubmitTx" id="inlineRadioMainetSubmitTx" value="mainnet">
+ Mainnet
+ </label>
+ <label class="radio-inline">
+ <input type="radio" name="inlineRadioOptionsNetworkSubmitTx" id="inlineRadioTestnetSubmitTx" value="testnet"
+ checked="checked"> Testnet
+ </label>
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <a id="btnSubmitTransaction" class="btn btn-primary">Submit Transaction</a>
+ <a id="btnResetSubmitTransaction" class="btn btn-primary">Reset</a>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ <div class="tab-pane" id="decode">
+ <div class="panel panel-default sc-bd">
+ <div class="panel-heading">
+ <h3 class="panel-title">Decode Raw Transaction </h3>
+ </div>
+ <div class="panel-body">
+ <form class="form-horizontal">
+ <!-- 签名好的交易信息 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">Raw Transaction</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtRawHexTransaction" placeholder="Raw Hex Transaction, e.g. 070100010161015f28b7b53d8dc90006bf97e0a4eaae2a72ec3d869873188698b694beaf20789f21ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8099c4d5990100011600149335b1cbd4a77b78e33315a0ed10a95b12e7ca48630240897e2d9d24a3b5faaed0579dee7597b401491595675f897504f8945b29d836235bd2fca72a3ad0cae814628973ebcd142d9d6cc92d0b2571b69e5370a98a340c208cb7fb3086f58db9a31401b99e8c658be66134fb9034de1d5c462679270b090702013effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80f9f8bc98010116001406ce4b689ba026ffd3a7ca65d1d059546d4b78a000013dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80c6868f01011600147929ef91997c827bebf60fa608f876ea27523c4700"
+ maxlength="100000">
+ </div>
+ </div>
+ <!-- json格式交易 -->
+ <div class="form-group">
+ <label class="col-sm-2 control-label">JSON Format</label>
+ <div class="col-sm-10">
+ <input type="text" class="form-control" id="txtJsonTransaction" placeholder="JSON Format Transaction"
+ maxlength="100000" readonly>
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <a id="btnDocodeRawTransaction" class="btn btn-primary">Decode Transaction</a>
+ <a id="btnResetDecodeRawTransaction" class="btn btn-primary">Reset</a>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="cp">
+ <p>Copyright ©️ <a href="https://blockmeta.com">Blockmeta.com</a></p>
+ </div>
+</body>
+
+</html>
\ No newline at end of file