@ajose01
25Blockchain / bot builder / engineering lead for @sensay / http://makesense.com . Exploring crypto, blockchains and bots :) #EOS_IO $SENSE
hive.blog/@ajose01VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS0.00%
Net Worth
9.285USD
HIVE
0.001HIVE
HBD
0.000HBD
Own HP
18.107HP
Detailed Balance
| HIVE | ||
| balance | 0.001HIVE | HIVE |
| market_balance | 0.000HIVE | HIVE |
| savings_balance | 0.000HIVE | HIVE |
| reward_hive_balance | 0.397HIVE | HIVE |
| HIVE POWER | ||
| Own HP | 18.107HP | HP |
| Delegated Out | 0.000HP | HP |
| Delegation In | 0.000HP | HP |
| Effective Power | 18.107HP | HP |
| Reward HP (pending) | 1.365HP | HP |
| HBD | ||
| hbd_balance | 0.000HBD | HBD |
| hbd_conversions | 0.000HBD | HBD |
| hbd_market_balance | 0.000HBD | HBD |
| savings_hbd_balance | 0.000HBD | HBD |
| reward_hbd_balance | 1.883HBD | HBD |
{
"balance": "0.001 HIVE",
"savings_balance": "0.000 HIVE",
"reward_hive_balance": "0.397 HIVE",
"vesting_shares": "29393.378778 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "0.000000 VESTS",
"hbd_balance": "0.000 HBD",
"savings_hbd_balance": "0.000 HBD",
"reward_hbd_balance": "1.883 HBD"
}Account Info
| name | ajose01 |
| id | 967825 |
| rank | 0 |
| reputation | 0 |
| created | 2018-05-07T18:52:30 |
| recovery_account | steemcreate |
| proxy | None |
| invited_by | null |
| post_count | 9 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2019-04-12T07:30:15 |
| last_root_post | 2019-04-12T07:30:15 |
| last_vote_time | 1970-01-01T00:00:00 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | None |
| governance_vote_expiration_ts | 1969-12-31T23:59:59 |
| balance | 0.001 HIVE |
| savings_balance | 0.000 HIVE |
| hbd_balance | 0.000 HBD |
| savings_hbd_balance | 0.000 HBD |
| vesting_shares | 29393.378778 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 0.000000 VESTS |
| reward_vesting_balance | 2772.564472 VESTS |
| vesting_balance | 0.000 HIVE |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 1970-01-01T00:00:00 |
| last_account_update | 2018-05-17T00:06:54 |
| mined | No |
| hbd_seconds | 0 |
| hbd_last_interest_payment | 1970-01-01T00:00:00 |
| savings_hbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"id": 967825,
"name": "ajose01",
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7wd6bDHaccjZtVcEh4MRby2qkv23sWR5XXrVyynLabG7uHackF",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM5cb2xX7FRdEZvwUBLsJvTVkzieSDpStJbF16T2g4BxF9WFSxZi",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [
[
"dlive.app",
1
]
],
"key_auths": [
[
"STM7e2edM8YhV6vM6zASK33AGXCWijwvexKYvnsrXzMjcKjJiw5Qm",
1
]
]
},
"memo_key": "STM6yYFUmm4tg74FNeZ5QMioTq45hyuhvW9opk4cEZ3UYpZStWLac",
"json_metadata": "{\"profile\":{\"profile_image\":\"https://steemitimages.com/DQmQKiEhpoZV9oVgEMpkFji1M8CxVsaUQ7qSki3HhZkuVZQ/angel_social.JPG\",\"name\":\"Angel Jose\",\"about\":\"Blockchain / bot builder / engineering lead for @sensay / http://makesense.com . Exploring crypto, blockchains and bots :) #EOS_IO $SENSE\"}}",
"posting_json_metadata": "{\"profile\":{\"profile_image\":\"https://steemitimages.com/DQmQKiEhpoZV9oVgEMpkFji1M8CxVsaUQ7qSki3HhZkuVZQ/angel_social.JPG\",\"name\":\"Angel Jose\",\"about\":\"Blockchain / bot builder / engineering lead for @sensay / http://makesense.com . Exploring crypto, blockchains and bots :) #EOS_IO $SENSE\"}}",
"proxy": "",
"previous_owner_update": "1970-01-01T00:00:00",
"last_owner_update": "1970-01-01T00:00:00",
"last_account_update": "2018-05-17T00:06:54",
"created": "2018-05-07T18:52:30",
"mined": false,
"recovery_account": "steemcreate",
"last_account_recovery": "1970-01-01T00:00:00",
"reset_account": "null",
"comment_count": 0,
"lifetime_vote_count": 0,
"post_count": 9,
"can_vote": true,
"voting_manabar": {
"current_mana": 29393378778,
"last_update_time": 1555054128
},
"downvote_manabar": {
"current_mana": 0,
"last_update_time": 1525719147
},
"voting_power": 0,
"balance": "0.001 HIVE",
"savings_balance": "0.000 HIVE",
"hbd_balance": "0.000 HBD",
"hbd_seconds": "0",
"hbd_seconds_last_update": "1970-01-01T00:00:00",
"hbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_hbd_balance": "0.000 HBD",
"savings_hbd_seconds": "0",
"savings_hbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_hbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"reward_hbd_balance": "1.883 HBD",
"reward_hive_balance": "0.397 HIVE",
"reward_vesting_balance": "2772.564472 VESTS",
"reward_vesting_hive": "1.365 HIVE",
"vesting_shares": "29393.378778 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "0.000000 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"post_voting_power": "29393.378778 VESTS",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"withdrawn": 0,
"to_withdraw": 0,
"withdraw_routes": 0,
"pending_transfers": 0,
"curation_rewards": 0,
"posting_rewards": 2727,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"witnesses_voted_for": 0,
"last_post": "2019-04-12T07:30:15",
"last_root_post": "2019-04-12T07:30:15",
"last_vote_time": "1970-01-01T00:00:00",
"post_bandwidth": 0,
"pending_claimed_accounts": 0,
"governance_vote_expiration_ts": "1969-12-31T23:59:59",
"delayed_votes": [],
"open_recurrent_transfers": 0,
"vesting_balance": "0.000 HIVE",
"reputation": 0,
"transfer_history": [],
"market_history": [],
"post_history": [],
"vote_history": [],
"other_history": [],
"witness_votes": [],
"tags_usage": [],
"guest_bloggers": [],
"rank": 0
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2026/03/14 23:11:51
2026/03/14 23:11:51
| to | ajose01 |
| from | voryga |
| memo | UA_SOSAT |
| amount | 0.001 HIVE |
| Transaction Info | Block #104635563/Trx cc33c4b2da87ed0c53a281961250ea37125e8482 |
View Raw JSON Data
{
"op": [
"transfer",
{
"to": "ajose01",
"from": "voryga",
"memo": "UA_SOSAT",
"amount": "0.001 HIVE"
}
],
"block": 104635563,
"trx_id": "cc33c4b2da87ed0c53a281961250ea37125e8482",
"op_in_trx": 0,
"timestamp": "2026-03-14T23:11:51",
"virtual_op": false,
"trx_in_block": 11
}2021/01/08 19:13:42
2021/01/08 19:13:42
| body | Congratulations @ajose01! You have completed the following achievement on the Hive blockchain and have been rewarded with new badge(s) : <table><tr><td><img src="https://images.hive.blog/60x70/http://hivebuzz.me/@ajose01/replies.png?202101081555"></td><td>You got more than 10 replies. Your next target is to reach 50 replies.</td></tr> </table> <sub>_You can view your badges on [your board](https://hivebuzz.me/@ajose01) and compare yourself to others in the [Ranking](https://hivebuzz.me/ranking)_</sub> <sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub> **Do not miss the last post from @hivebuzz:** <table><tr><td><a href="/hivebuzz/@hivebuzz/pud-202101-feedback"><img src="https://images.hive.blog/64x128/https://i.imgur.com/xQGM37X.png"></a></td><td><a href="/hivebuzz/@hivebuzz/pud-202101-feedback">Feedback from the January 1st Hive Power Up Day</a></td></tr></table> |
| title | |
| author | hivebuzz |
| permlink | hivebuzz-notify-ajose01-20210108t191341000z |
| json metadata | {"image":["http://hivebuzz.me/notify.t6.png"]} |
| parent author | ajose01 |
| parent permlink | 4qpcsr-eos-signature-verification-with-elixir |
| Transaction Info | Block #50268031/Trx 72ba2ef456c57d4e79d089930d32a064db43c710 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "Congratulations @ajose01! You have completed the following achievement on the Hive blockchain and have been rewarded with new badge(s) :\n\n<table><tr><td><img src=\"https://images.hive.blog/60x70/http://hivebuzz.me/@ajose01/replies.png?202101081555\"></td><td>You got more than 10 replies. Your next target is to reach 50 replies.</td></tr>\n</table>\n\n<sub>_You can view your badges on [your board](https://hivebuzz.me/@ajose01) and compare yourself to others in the [Ranking](https://hivebuzz.me/ranking)_</sub>\n<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>\n\n\n\n**Do not miss the last post from @hivebuzz:**\n<table><tr><td><a href=\"/hivebuzz/@hivebuzz/pud-202101-feedback\"><img src=\"https://images.hive.blog/64x128/https://i.imgur.com/xQGM37X.png\"></a></td><td><a href=\"/hivebuzz/@hivebuzz/pud-202101-feedback\">Feedback from the January 1st Hive Power Up Day</a></td></tr></table>",
"title": "",
"author": "hivebuzz",
"permlink": "hivebuzz-notify-ajose01-20210108t191341000z",
"json_metadata": "{\"image\":[\"http://hivebuzz.me/notify.t6.png\"]}",
"parent_author": "ajose01",
"parent_permlink": "4qpcsr-eos-signature-verification-with-elixir"
}
],
"block": 50268031,
"trx_id": "72ba2ef456c57d4e79d089930d32a064db43c710",
"op_in_trx": 0,
"timestamp": "2021-01-08T19:13:42",
"virtual_op": false,
"trx_in_block": 20
}2019/05/07 20:08:30
2019/05/07 20:08:30
| body | Congratulations @ajose01! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@ajose01/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@ajose01) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=ajose01)_</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-05"><img src="https://steemitimages.com/64x128/http://i.cubeupload.com/7CiQEO.png"></a></td><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-05">SteemitBoard - Witness Update</a></td></tr><tr><td><a href="https://steemit.com/steemmeetupaachen/@steemitboard/steemitboard-to-support-the-german-speaking-community-meetups"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmeoNp9iCaCfd2D6TqnWa3Aky2mU4Fm3xaSmjTM91YoNBS/image.png"></a></td><td><a href="https://steemit.com/steemmeetupaachen/@steemitboard/steemitboard-to-support-the-german-speaking-community-meetups">SteemitBoard to support the german speaking community meetups</a></td></tr></table> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| title | |
| author | steemitboard |
| permlink | steemitboard-notify-ajose01-20190507t200827000z |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | ajose01 |
| parent permlink | 4qpcsr-eos-signature-verification-with-elixir |
| Transaction Info | Block #32707822/Trx 1b2fd5978978cccabc7b29a4c0bf8f380a010190 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "Congratulations @ajose01! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@ajose01/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@ajose01) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=ajose01)_</sub>\n\n\n**Do not miss the last post from @steemitboard:**\n<table><tr><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-05\"><img src=\"https://steemitimages.com/64x128/http://i.cubeupload.com/7CiQEO.png\"></a></td><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-witness-update-2019-05\">SteemitBoard - Witness Update</a></td></tr><tr><td><a href=\"https://steemit.com/steemmeetupaachen/@steemitboard/steemitboard-to-support-the-german-speaking-community-meetups\"><img src=\"https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmeoNp9iCaCfd2D6TqnWa3Aky2mU4Fm3xaSmjTM91YoNBS/image.png\"></a></td><td><a href=\"https://steemit.com/steemmeetupaachen/@steemitboard/steemitboard-to-support-the-german-speaking-community-meetups\">SteemitBoard to support the german speaking community meetups</a></td></tr></table>\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"title": "",
"author": "steemitboard",
"permlink": "steemitboard-notify-ajose01-20190507t200827000z",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "ajose01",
"parent_permlink": "4qpcsr-eos-signature-verification-with-elixir"
}
],
"block": 32707822,
"trx_id": "1b2fd5978978cccabc7b29a4c0bf8f380a010190",
"op_in_trx": 0,
"timestamp": "2019-05-07T20:08:30",
"virtual_op": false,
"trx_in_block": 6
}ajose01updated payout for 4qpcsr-eos-signature-verification-with-elixir2019/04/19 07:30:15
ajose01updated payout for 4qpcsr-eos-signature-verification-with-elixir
2019/04/19 07:30:15
| author | ajose01 |
| permlink | 4qpcsr-eos-signature-verification-with-elixir |
| Transaction Info | Block #32174566/Virtual Operation 4294967295:3 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "ajose01",
"permlink": "4qpcsr-eos-signature-verification-with-elixir"
}
],
"block": 32174566,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 3,
"timestamp": "2019-04-19T07:30:15",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01updated payout for eos-signature-verification-with-elixir2019/04/19 06:44:12
ajose01updated payout for eos-signature-verification-with-elixir
2019/04/19 06:44:12
| author | ajose01 |
| permlink | eos-signature-verification-with-elixir |
| Transaction Info | Block #32173645/Virtual Operation 4294967295:4 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "ajose01",
"permlink": "eos-signature-verification-with-elixir"
}
],
"block": 32173645,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 4,
"timestamp": "2019-04-19T06:44:12",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01published a new post: 4qpcsr-eos-signature-verification-with-elixir2019/04/12 07:30:18
ajose01published a new post: 4qpcsr-eos-signature-verification-with-elixir
2019/04/12 07:30:18
| body | # EOS Signature Verification and ECDSA Tooling with Elixir  Photo by Kelly Sikkema on Unsplash Elixir is one of my favorite programming languages. It's a wonderful backend languages and it really lends itself to glueing many of the backend processes that support synchronizing blockchain world to current infrastructures. A recent task I worked on requires verifying using an EOS signature to prove a request on our services. After plenty google-fu and reading through the [eosjs-ecc](https://github.com/EOSIO/eosjs-ecc) library here's what I came up with: First, to simplify things for the elixir side we'll grab the EOS signature in hex format vs. the standard `SIG_K1_` format. Doing so isn't too difficult with `eosjs-ecc`: ``` const sig = ecc.Signature.sign('helloworld', privateKey).toHex(); // or if you already have a signature const sig = ecc.Signature.fromString('SIG_K1_....'); sig.toHex(); //sample hex: //'1f529f1b2b1373565975c7cfaf4e1217c5d24bbd26ebab6f9186c6c5cd26ad1b004b4f6d329f4e1ed2e5ee2bbf60d99ce4ef8ee4726699580c45c31ddff227821b' ``` The signature hex is what we'll use below. Everything else is in the standard form, i.e.: ``` defmodule EOSClient.KeyTool do use Bitwise def address_match?(eos_pub, msg, signature_hex) do {:ok, recovered_pub} = recover_eos_pub(msg, signature_hex) eos_pub == recovered_pub end def recover_eos_pub(msg, eos_signature) do msg_hash = :crypto.hash(:sha256, msg) # Here R, S are the same as ETH. V for EOS is found at the beginning of the # hash {r, s, v} = destructure_sig(eos_signature) signature = BitHelper.pad(:binary.encode_unsigned(r), 32) <> BitHelper.pad(:binary.encode_unsigned(s), 32) # Calculate i # https://github.com/EOSIO/eosjs-ecc/blob/master/src/signature.js#L109 i = (v - 27) &&& 3 IO.inspect ["i", i] case :libsecp256k1.ecdsa_recover_compact(msg_hash, signature, :compressed, i) do {:ok, pub} -> {:ok, Base.encode16(pub, case: :lower) |> pub_hex_to_eos} {:error, err} -> {:error, err} end end def destructure_sig(sig) do { String.slice(sig, 2, 64) |> EthClient.Hex.decode_hex |> :binary.decode_unsigned, String.slice(sig, 66,64) |> EthClient.Hex.decode_hex |> :binary.decode_unsigned, String.slice(sig, 0, 2) |> EthClient.Hex.decode_hex |> :binary.decode_unsigned } end def eth_to_eos_sig(eth_hex) do {sig, pad} = eth_hex |> String.slice(2..-1) |> String.split_at(-2) {int, _} = Integer.parse(pad, 16) prefix = Integer.to_string(int + 4, 16) raw_sig = prefix <> sig "SIG_K1_" <> check_encode(raw_sig, "K1") end def pub_hex_to_eos(pubkey, key_type \\ nil) do IO.inspect pubkey pub_bin = pubkey |> Base.decode16!(case: :lower) check = case key_type do nil -> [pub_bin] key -> [pub_bin, key] end check_bin = check |> :erlang.iolist_to_binary checksum = hash(check_bin, :ripemd160) |> :binary.part(0, 4) "EOS" <> EthClient.Base58.encode(pub_bin <> checksum) end def check_encode(key, key_type \\ nil) do bin = key |> Base.decode16!(case: :lower) check = case key_type do nil -> [bin] key -> [bin, key] end check_bin = check |> :erlang.iolist_to_binary checksum = hash(check_bin, :ripemd160) |> :binary.part(0, 4) EthClient.Base58.encode(bin <> checksum) end def hash(data, algorithm) do :crypto.hash(algorithm, data) end end ``` There's some helpers along with this that I had written before for Ethereum sig validation. Since it's the same encryption under the hood, those work here as well. (Yes I should rename these). Hex helper ``` defmodule EthClient.Hex do @moduledoc """ Helpers for Compound to encode and decode to Ethereum's hex format. """ require Integer @spec encode_hex(binary()) :: String.t def encode_hex(hex), do: "0x" <> Base.encode16(hex, case: :lower) # TODO: This should be shorten for odd length strings? @spec decode_hex(String.t) :: binary() def decode_hex("0x" <> hex_data), do: decode_hex(hex_data) def decode_hex(hex_data) when Integer.is_odd(byte_size(hex_data)), do: decode_hex("0" <> hex_data) def decode_hex(hex_data) do Base.decode16!(hex_data, case: :mixed) end @spec maybe_decode_hex(String.t | nil) :: binary() | nil def maybe_decode_hex(nil), do: nil def maybe_decode_hex(hex), do: decode_hex(hex) @spec maybe_decode_hex_int(String.t | nil) :: integer() | nil def maybe_decode_hex_int(hex) do case maybe_decode_hex(hex) do nil -> nil bin -> :binary.decode_unsigned(bin) end end end ``` Base58 helper: ``` defmodule EthClient.Base58 do @alphabet '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' def encode(data, hash \\ "") def encode(data, hash) when is_binary(data) do encode_zeros(data) <> encode(:binary.decode_unsigned(data), hash) end def encode(0, hash), do: hash def encode(data, hash) do character = <<Enum.at(@alphabet, rem(data, 58))>> encode(div(data, 58), character <> hash) end defp encode_zeros(data) do <<Enum.at(@alphabet, 0)>> |> String.duplicate(leading_zeros(data)) end defp leading_zeros(data) do :binary.bin_to_list(data) |> Enum.find_index(&(&1 != 0)) end end ``` Most of the steps to get here have been derived from reading some excellent blog posts on Bitcoin, and reading through some elixir crypto libraries that deal with either bitcoin or ethereum. I've just managed to glue them together to apply them to EOSIO. 🚀 Some of the posts and/or repos that are helpful (and many more that I lost the chrome tab to): https://blog.lelonek.me/how-to-calculate-bitcoin-address-in-elixir-68939af4f0e9 https://github.com/KamilLelonek/ex_wallet http://www.petecorey.com/blog/2018/01/08/bitcoins-base58check-in-pure-elixir/ https://github.com/exthereum/exth_crypto/blob/master/lib/signature/signature.ex Until next time! Angel [twitter](https://twitter.com/ajose01) [sense.chat](https://my.sense.chat/amazingangel) |
| title | EOS Signature verification with Elixir 😍 |
| author | ajose01 |
| permlink | 4qpcsr-eos-signature-verification-with-elixir |
| json metadata | {"tags":["eosio","elixir","ecdsa","ecc","libsecp256k1"],"image":["https://cdn.steemitimages.com/DQmX3cUD6T2ZEQDfPLzFVBf9hbMr8EvWoMTGjKRzFbPvFwX/kelly-sikkema-1485308-unsplash.jpg"],"links":["https://github.com/EOSIO/eosjs-ecc","https://blog.lelonek.me/how-to-calculate-bitcoin-address-in-elixir-68939af4f0e9","https://github.com/KamilLelonek/ex_wallet","http://www.petecorey.com/blog/2018/01/08/bitcoins-base58check-in-pure-elixir/","https://github.com/exthereum/exth_crypto/blob/master/lib/signature/signature.ex","https://twitter.com/ajose01","https://my.sense.chat/amazingangel"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | eosio |
| Transaction Info | Block #31974302/Trx 54896c313eaee44f0f42d193af816affb14d202e |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "# EOS Signature Verification and ECDSA Tooling with Elixir\n\n\nPhoto by Kelly Sikkema on Unsplash\n\n\nElixir is one of my favorite programming languages. It's a wonderful backend languages and it really lends itself to glueing many of the backend processes that support synchronizing blockchain world to current infrastructures. A recent task I worked on requires verifying using an EOS signature to prove a request on our services. After plenty google-fu and reading through the [eosjs-ecc](https://github.com/EOSIO/eosjs-ecc) library here's what I came up with:\n\nFirst, to simplify things for the elixir side we'll grab the EOS signature in hex format vs. the standard `SIG_K1_` format. Doing so isn't too difficult with `eosjs-ecc`:\n```\nconst sig = ecc.Signature.sign('helloworld', privateKey).toHex();\n// or if you already have a signature\nconst sig = ecc.Signature.fromString('SIG_K1_....');\nsig.toHex();\n//sample hex:\n//'1f529f1b2b1373565975c7cfaf4e1217c5d24bbd26ebab6f9186c6c5cd26ad1b004b4f6d329f4e1ed2e5ee2bbf60d99ce4ef8ee4726699580c45c31ddff227821b'\n```\n\nThe signature hex is what we'll use below. Everything else is in the standard form, i.e.:\n\n```\ndefmodule EOSClient.KeyTool do\n use Bitwise\n\n def address_match?(eos_pub, msg, signature_hex) do\n {:ok, recovered_pub} = recover_eos_pub(msg, signature_hex)\n eos_pub == recovered_pub\n end\n\n def recover_eos_pub(msg, eos_signature) do\n msg_hash = :crypto.hash(:sha256, msg)\n\n # Here R, S are the same as ETH. V for EOS is found at the beginning of the\n # hash\n {r, s, v} = destructure_sig(eos_signature)\n signature = BitHelper.pad(:binary.encode_unsigned(r), 32) <> BitHelper.pad(:binary.encode_unsigned(s), 32)\n\n # Calculate i\n # https://github.com/EOSIO/eosjs-ecc/blob/master/src/signature.js#L109\n i = (v - 27) &&& 3\n IO.inspect [\"i\", i]\n\n case :libsecp256k1.ecdsa_recover_compact(msg_hash, signature, :compressed, i) do\n {:ok, pub} ->\n {:ok, Base.encode16(pub, case: :lower)\n |> pub_hex_to_eos}\n {:error, err} ->\n {:error, err}\n end\n end\n\n def destructure_sig(sig) do\n {\n String.slice(sig, 2, 64)\n |> EthClient.Hex.decode_hex\n |> :binary.decode_unsigned,\n String.slice(sig, 66,64)\n |> EthClient.Hex.decode_hex\n |> :binary.decode_unsigned,\n String.slice(sig, 0, 2)\n |> EthClient.Hex.decode_hex\n |> :binary.decode_unsigned\n }\n end\n\n def eth_to_eos_sig(eth_hex) do\n {sig, pad} =\n eth_hex\n |> String.slice(2..-1)\n |> String.split_at(-2)\n\n {int, _} = Integer.parse(pad, 16)\n\n prefix = Integer.to_string(int + 4, 16)\n raw_sig = prefix <> sig\n \"SIG_K1_\" <> check_encode(raw_sig, \"K1\")\n end\n\n def pub_hex_to_eos(pubkey, key_type \\\\ nil) do\n IO.inspect pubkey\n pub_bin = pubkey\n |> Base.decode16!(case: :lower)\n\n\n check = case key_type do\n nil -> [pub_bin]\n key -> [pub_bin, key]\n end\n\n check_bin =\n check\n |> :erlang.iolist_to_binary\n\n checksum =\n hash(check_bin, :ripemd160)\n |> :binary.part(0, 4)\n\n \"EOS\" <> EthClient.Base58.encode(pub_bin <> checksum)\n end\n\n\n def check_encode(key, key_type \\\\ nil) do\n bin = key\n |> Base.decode16!(case: :lower)\n\n check = case key_type do\n nil -> [bin]\n key -> [bin, key]\n end\n\n check_bin =\n check\n |> :erlang.iolist_to_binary\n\n checksum =\n hash(check_bin, :ripemd160)\n |> :binary.part(0, 4)\n\n EthClient.Base58.encode(bin <> checksum)\n end\n\n def hash(data, algorithm) do\n :crypto.hash(algorithm, data)\n end\n\nend\n```\n\nThere's some helpers along with this that I had written before for Ethereum sig validation. Since it's the same encryption under the hood, those work here as well. (Yes I should rename these).\n\nHex helper\n```\ndefmodule EthClient.Hex do\n @moduledoc \"\"\"\n Helpers for Compound to encode and decode to Ethereum's\n hex format.\n \"\"\"\n\n require Integer\n\n @spec encode_hex(binary()) :: String.t\n def encode_hex(hex), do: \"0x\" <> Base.encode16(hex, case: :lower) # TODO: This should be shorten for odd length strings?\n\n @spec decode_hex(String.t) :: binary()\n def decode_hex(\"0x\" <> hex_data), do: decode_hex(hex_data)\n def decode_hex(hex_data) when Integer.is_odd(byte_size(hex_data)), do: decode_hex(\"0\" <> hex_data)\n def decode_hex(hex_data) do\n Base.decode16!(hex_data, case: :mixed)\n end\n\n @spec maybe_decode_hex(String.t | nil) :: binary() | nil\n def maybe_decode_hex(nil), do: nil\n def maybe_decode_hex(hex), do: decode_hex(hex)\n\n @spec maybe_decode_hex_int(String.t | nil) :: integer() | nil\n def maybe_decode_hex_int(hex) do\n case maybe_decode_hex(hex) do\n nil -> nil\n bin -> :binary.decode_unsigned(bin)\n end\n end\nend\n```\nBase58 helper:\n```\ndefmodule EthClient.Base58 do\n @alphabet '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\n def encode(data, hash \\\\ \"\")\n\n def encode(data, hash) when is_binary(data) do\n encode_zeros(data) <> encode(:binary.decode_unsigned(data), hash)\n end\n\n def encode(0, hash), do: hash\n\n def encode(data, hash) do\n character = <<Enum.at(@alphabet, rem(data, 58))>>\n encode(div(data, 58), character <> hash)\n end\n\n defp encode_zeros(data) do\n <<Enum.at(@alphabet, 0)>>\n |> String.duplicate(leading_zeros(data))\n end\n\n defp leading_zeros(data) do\n :binary.bin_to_list(data)\n |> Enum.find_index(&(&1 != 0))\n end\nend\n```\n\nMost of the steps to get here have been derived from reading some excellent blog posts on Bitcoin, and reading through some elixir crypto libraries that deal with either bitcoin or ethereum. I've just managed to glue them together to apply them to EOSIO. 🚀\n\nSome of the posts and/or repos that are helpful (and many more that I lost the chrome tab to):\nhttps://blog.lelonek.me/how-to-calculate-bitcoin-address-in-elixir-68939af4f0e9\nhttps://github.com/KamilLelonek/ex_wallet\nhttp://www.petecorey.com/blog/2018/01/08/bitcoins-base58check-in-pure-elixir/\nhttps://github.com/exthereum/exth_crypto/blob/master/lib/signature/signature.ex\n\nUntil next time!\n\nAngel\n[twitter](https://twitter.com/ajose01)\n[sense.chat](https://my.sense.chat/amazingangel)",
"title": "EOS Signature verification with Elixir 😍",
"author": "ajose01",
"permlink": "4qpcsr-eos-signature-verification-with-elixir",
"json_metadata": "{\"tags\":[\"eosio\",\"elixir\",\"ecdsa\",\"ecc\",\"libsecp256k1\"],\"image\":[\"https://cdn.steemitimages.com/DQmX3cUD6T2ZEQDfPLzFVBf9hbMr8EvWoMTGjKRzFbPvFwX/kelly-sikkema-1485308-unsplash.jpg\"],\"links\":[\"https://github.com/EOSIO/eosjs-ecc\",\"https://blog.lelonek.me/how-to-calculate-bitcoin-address-in-elixir-68939af4f0e9\",\"https://github.com/KamilLelonek/ex_wallet\",\"http://www.petecorey.com/blog/2018/01/08/bitcoins-base58check-in-pure-elixir/\",\"https://github.com/exthereum/exth_crypto/blob/master/lib/signature/signature.ex\",\"https://twitter.com/ajose01\",\"https://my.sense.chat/amazingangel\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "eosio"
}
],
"block": 31974302,
"trx_id": "54896c313eaee44f0f42d193af816affb14d202e",
"op_in_trx": 0,
"timestamp": "2019-04-12T07:30:18",
"virtual_op": false,
"trx_in_block": 25
}blocktradesblockchain operation: transfer to vesting completed2019/04/12 07:28:51
blocktradesblockchain operation: transfer to vesting completed
2019/04/12 07:28:51
| to account | ajose01 |
| hive vested | 11.652 HIVE |
| from account | blocktrades |
| vesting shares received | 23285.988303 VESTS |
| Transaction Info | Block #31974273/Trx 0e483be2d618f6c5e6a7d876774892fd57853586 |
View Raw JSON Data
{
"op": [
"transfer_to_vesting_completed",
{
"to_account": "ajose01",
"hive_vested": "11.652 HIVE",
"from_account": "blocktrades",
"vesting_shares_received": "23285.988303 VESTS"
}
],
"block": 31974273,
"trx_id": "0e483be2d618f6c5e6a7d876774892fd57853586",
"op_in_trx": 1,
"timestamp": "2019-04-12T07:28:51",
"virtual_op": true,
"trx_in_block": 1
}blocktradespowered up 11.652 HIVE to @ajose012019/04/12 07:28:51
blocktradespowered up 11.652 HIVE to @ajose01
2019/04/12 07:28:51
| to | ajose01 |
| from | blocktrades |
| amount | 11.652 HIVE |
| Transaction Info | Block #31974273/Trx 0e483be2d618f6c5e6a7d876774892fd57853586 |
View Raw JSON Data
{
"op": [
"transfer_to_vesting",
{
"to": "ajose01",
"from": "blocktrades",
"amount": "11.652 HIVE"
}
],
"block": 31974273,
"trx_id": "0e483be2d618f6c5e6a7d876774892fd57853586",
"op_in_trx": 0,
"timestamp": "2019-04-12T07:28:51",
"virtual_op": false,
"trx_in_block": 1
}ajose01published a new post: eos-signature-verification-with-elixir2019/04/12 06:44:15
ajose01published a new post: eos-signature-verification-with-elixir
2019/04/12 06:44:15
| body | # EOS Signature Verification and ECDSA Tooling with Elixir  Photo by Kelly Sikkema on Unsplash Elixir is one of my favorite programming languages. It's a wonderful backend languages and it really lends itself to glueing many of the backend processes that support synchronizing blockchain world to current infrastructures. A recent task I worked on requires verifying using an EOS signature to prove a request on our services. After plenty google-fu and reading through the [eosjs-ecc](https://github.com/EOSIO/eosjs-ecc) library here's what I came up with: First, to simplify things for the elixir side we'll grab the EOS signature in hex format vs. the standard `SIG_K1_` format. Doing so isn't too difficult with `eosjs-ecc`: ``` const sig = ecc.Signature.sign('helloworld', privateKey).toHex(); // or if you already have a signature const sig = ecc.Signature.fromString('SIG_K1_....'); sig.toHex(); //sample hex: //'1f529f1b2b1373565975c7cfaf4e1217c5d24bbd26ebab6f9186c6c5cd26ad1b004b4f6d329f4e1ed2e5ee2bbf60d99ce4ef8ee4726699580c45c31ddff227821b' ``` The signature hex is what we'll use below. Everything else is in the standard form, i.e.: ``` defmodule EOSClient.KeyTool do use Bitwise def address_match?(eos_pub, msg, signature_hex) do {:ok, recovered_pub} = recover_eos_pub(msg, signature_hex) eos_pub == recovered_pub end def recover_eos_pub(msg, eos_signature) do msg_hash = :crypto.hash(:sha256, msg) # Here R, S are the same as ETH. V for EOS is found at the beginning of the # hash {r, s, v} = destructure_sig(eos_signature) signature = BitHelper.pad(:binary.encode_unsigned(r), 32) <> BitHelper.pad(:binary.encode_unsigned(s), 32) # Calculate i # https://github.com/EOSIO/eosjs-ecc/blob/master/src/signature.js#L109 i = (v - 27) &&& 3 IO.inspect ["i", i] case :libsecp256k1.ecdsa_recover_compact(msg_hash, signature, :compressed, i) do {:ok, pub} -> {:ok, Base.encode16(pub, case: :lower) |> pub_hex_to_eos} {:error, err} -> {:error, err} end end def destructure_sig(sig) do { String.slice(sig, 2, 64) |> EthClient.Hex.decode_hex |> :binary.decode_unsigned, String.slice(sig, 66,64) |> EthClient.Hex.decode_hex |> :binary.decode_unsigned, String.slice(sig, 0, 2) |> EthClient.Hex.decode_hex |> :binary.decode_unsigned } end def eth_to_eos_sig(eth_hex) do {sig, pad} = eth_hex |> String.slice(2..-1) |> String.split_at(-2) {int, _} = Integer.parse(pad, 16) prefix = Integer.to_string(int + 4, 16) raw_sig = prefix <> sig "SIG_K1_" <> check_encode(raw_sig, "K1") end def pub_hex_to_eos(pubkey, key_type \\ nil) do IO.inspect pubkey pub_bin = pubkey |> Base.decode16!(case: :lower) check = case key_type do nil -> [pub_bin] key -> [pub_bin, key] end check_bin = check |> :erlang.iolist_to_binary checksum = hash(check_bin, :ripemd160) |> :binary.part(0, 4) "EOS" <> EthClient.Base58.encode(pub_bin <> checksum) end def check_encode(key, key_type \\ nil) do bin = key |> Base.decode16!(case: :lower) check = case key_type do nil -> [bin] key -> [bin, key] end check_bin = check |> :erlang.iolist_to_binary checksum = hash(check_bin, :ripemd160) |> :binary.part(0, 4) EthClient.Base58.encode(bin <> checksum) end def hash(data, algorithm) do :crypto.hash(algorithm, data) end end ``` There's some helpers along with this that I had written before for Ethereum sig validation. Since it's the same encryption under the hood, those work here as well. (Yes I should rename these). Hex helper ``` defmodule EthClient.Hex do @moduledoc """ Helpers for Compound to encode and decode to Ethereum's hex format. """ require Integer @spec encode_hex(binary()) :: String.t def encode_hex(hex), do: "0x" <> Base.encode16(hex, case: :lower) # TODO: This should be shorten for odd length strings? @spec decode_hex(String.t) :: binary() def decode_hex("0x" <> hex_data), do: decode_hex(hex_data) def decode_hex(hex_data) when Integer.is_odd(byte_size(hex_data)), do: decode_hex("0" <> hex_data) def decode_hex(hex_data) do Base.decode16!(hex_data, case: :mixed) end @spec maybe_decode_hex(String.t | nil) :: binary() | nil def maybe_decode_hex(nil), do: nil def maybe_decode_hex(hex), do: decode_hex(hex) @spec maybe_decode_hex_int(String.t | nil) :: integer() | nil def maybe_decode_hex_int(hex) do case maybe_decode_hex(hex) do nil -> nil bin -> :binary.decode_unsigned(bin) end end end ``` Base58 helper: ``` defmodule EthClient.Base58 do @alphabet '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' def encode(data, hash \\ "") def encode(data, hash) when is_binary(data) do encode_zeros(data) <> encode(:binary.decode_unsigned(data), hash) end def encode(0, hash), do: hash def encode(data, hash) do character = <<Enum.at(@alphabet, rem(data, 58))>> encode(div(data, 58), character <> hash) end defp encode_zeros(data) do <<Enum.at(@alphabet, 0)>> |> String.duplicate(leading_zeros(data)) end defp leading_zeros(data) do :binary.bin_to_list(data) |> Enum.find_index(&(&1 != 0)) end end ``` Most of the steps to get here have been derived from reading some excellent blog posts on Bitcoin, and reading through some elixir crypto libraries that deal with either bitcoin or ethereum. I've just managed to glue them together to apply them to EOSIO. 🚀 Some of the posts and/or repos that are helpful (and many more that I lost the chrome tab to): https://blog.lelonek.me/how-to-calculate-bitcoin-address-in-elixir-68939af4f0e9 https://github.com/KamilLelonek/ex_wallet http://www.petecorey.com/blog/2018/01/08/bitcoins-base58check-in-pure-elixir/ https://github.com/exthereum/exth_crypto/blob/master/lib/signature/signature.ex Until next time! Angel [twitter](https://twitter.com/ajose01) [sense.chat](https://my.sense.chat/amazingangel) |
| title | EOS Signature verification with Elixir 😍 |
| author | ajose01 |
| permlink | eos-signature-verification-with-elixir |
| json metadata | {"tags":["elixir","eosio","ecdsa","ecc","libsecp256k1"],"image":["https://cdn.steemitimages.com/DQmX3cUD6T2ZEQDfPLzFVBf9hbMr8EvWoMTGjKRzFbPvFwX/kelly-sikkema-1485308-unsplash.jpg"],"links":["https://github.com/EOSIO/eosjs-ecc","https://blog.lelonek.me/how-to-calculate-bitcoin-address-in-elixir-68939af4f0e9","https://github.com/KamilLelonek/ex_wallet","http://www.petecorey.com/blog/2018/01/08/bitcoins-base58check-in-pure-elixir/","https://github.com/exthereum/exth_crypto/blob/master/lib/signature/signature.ex","https://twitter.com/ajose01","https://my.sense.chat/amazingangel"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | elixir |
| Transaction Info | Block #31973382/Trx 6e79939fbd19c92986956df616cbac0eeb689ee5 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "# EOS Signature Verification and ECDSA Tooling with Elixir\n\n\nPhoto by Kelly Sikkema on Unsplash\n\n\nElixir is one of my favorite programming languages. It's a wonderful backend languages and it really lends itself to glueing many of the backend processes that support synchronizing blockchain world to current infrastructures. A recent task I worked on requires verifying using an EOS signature to prove a request on our services. After plenty google-fu and reading through the [eosjs-ecc](https://github.com/EOSIO/eosjs-ecc) library here's what I came up with:\n\nFirst, to simplify things for the elixir side we'll grab the EOS signature in hex format vs. the standard `SIG_K1_` format. Doing so isn't too difficult with `eosjs-ecc`:\n```\nconst sig = ecc.Signature.sign('helloworld', privateKey).toHex();\n// or if you already have a signature\nconst sig = ecc.Signature.fromString('SIG_K1_....');\nsig.toHex();\n//sample hex:\n//'1f529f1b2b1373565975c7cfaf4e1217c5d24bbd26ebab6f9186c6c5cd26ad1b004b4f6d329f4e1ed2e5ee2bbf60d99ce4ef8ee4726699580c45c31ddff227821b'\n```\n\nThe signature hex is what we'll use below. Everything else is in the standard form, i.e.:\n\n```\ndefmodule EOSClient.KeyTool do\n use Bitwise\n\n def address_match?(eos_pub, msg, signature_hex) do\n {:ok, recovered_pub} = recover_eos_pub(msg, signature_hex)\n eos_pub == recovered_pub\n end\n\n def recover_eos_pub(msg, eos_signature) do\n msg_hash = :crypto.hash(:sha256, msg)\n\n # Here R, S are the same as ETH. V for EOS is found at the beginning of the\n # hash\n {r, s, v} = destructure_sig(eos_signature)\n signature = BitHelper.pad(:binary.encode_unsigned(r), 32) <> BitHelper.pad(:binary.encode_unsigned(s), 32)\n\n # Calculate i\n # https://github.com/EOSIO/eosjs-ecc/blob/master/src/signature.js#L109\n i = (v - 27) &&& 3\n IO.inspect [\"i\", i]\n\n case :libsecp256k1.ecdsa_recover_compact(msg_hash, signature, :compressed, i) do\n {:ok, pub} ->\n {:ok, Base.encode16(pub, case: :lower)\n |> pub_hex_to_eos}\n {:error, err} ->\n {:error, err}\n end\n end\n\n def destructure_sig(sig) do\n {\n String.slice(sig, 2, 64)\n |> EthClient.Hex.decode_hex\n |> :binary.decode_unsigned,\n String.slice(sig, 66,64)\n |> EthClient.Hex.decode_hex\n |> :binary.decode_unsigned,\n String.slice(sig, 0, 2)\n |> EthClient.Hex.decode_hex\n |> :binary.decode_unsigned\n }\n end\n\n def eth_to_eos_sig(eth_hex) do\n {sig, pad} =\n eth_hex\n |> String.slice(2..-1)\n |> String.split_at(-2)\n\n {int, _} = Integer.parse(pad, 16)\n\n prefix = Integer.to_string(int + 4, 16)\n raw_sig = prefix <> sig\n \"SIG_K1_\" <> check_encode(raw_sig, \"K1\")\n end\n\n def pub_hex_to_eos(pubkey, key_type \\\\ nil) do\n IO.inspect pubkey\n pub_bin = pubkey\n |> Base.decode16!(case: :lower)\n\n\n check = case key_type do\n nil -> [pub_bin]\n key -> [pub_bin, key]\n end\n\n check_bin =\n check\n |> :erlang.iolist_to_binary\n\n checksum =\n hash(check_bin, :ripemd160)\n |> :binary.part(0, 4)\n\n \"EOS\" <> EthClient.Base58.encode(pub_bin <> checksum)\n end\n\n\n def check_encode(key, key_type \\\\ nil) do\n bin = key\n |> Base.decode16!(case: :lower)\n\n check = case key_type do\n nil -> [bin]\n key -> [bin, key]\n end\n\n check_bin =\n check\n |> :erlang.iolist_to_binary\n\n checksum =\n hash(check_bin, :ripemd160)\n |> :binary.part(0, 4)\n\n EthClient.Base58.encode(bin <> checksum)\n end\n\n def hash(data, algorithm) do\n :crypto.hash(algorithm, data)\n end\n\nend\n```\n\nThere's some helpers along with this that I had written before for Ethereum sig validation. Since it's the same encryption under the hood, those work here as well. (Yes I should rename these).\n\nHex helper\n```\ndefmodule EthClient.Hex do\n @moduledoc \"\"\"\n Helpers for Compound to encode and decode to Ethereum's\n hex format.\n \"\"\"\n\n require Integer\n\n @spec encode_hex(binary()) :: String.t\n def encode_hex(hex), do: \"0x\" <> Base.encode16(hex, case: :lower) # TODO: This should be shorten for odd length strings?\n\n @spec decode_hex(String.t) :: binary()\n def decode_hex(\"0x\" <> hex_data), do: decode_hex(hex_data)\n def decode_hex(hex_data) when Integer.is_odd(byte_size(hex_data)), do: decode_hex(\"0\" <> hex_data)\n def decode_hex(hex_data) do\n Base.decode16!(hex_data, case: :mixed)\n end\n\n @spec maybe_decode_hex(String.t | nil) :: binary() | nil\n def maybe_decode_hex(nil), do: nil\n def maybe_decode_hex(hex), do: decode_hex(hex)\n\n @spec maybe_decode_hex_int(String.t | nil) :: integer() | nil\n def maybe_decode_hex_int(hex) do\n case maybe_decode_hex(hex) do\n nil -> nil\n bin -> :binary.decode_unsigned(bin)\n end\n end\nend\n```\nBase58 helper:\n```\ndefmodule EthClient.Base58 do\n @alphabet '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\n def encode(data, hash \\\\ \"\")\n\n def encode(data, hash) when is_binary(data) do\n encode_zeros(data) <> encode(:binary.decode_unsigned(data), hash)\n end\n\n def encode(0, hash), do: hash\n\n def encode(data, hash) do\n character = <<Enum.at(@alphabet, rem(data, 58))>>\n encode(div(data, 58), character <> hash)\n end\n\n defp encode_zeros(data) do\n <<Enum.at(@alphabet, 0)>>\n |> String.duplicate(leading_zeros(data))\n end\n\n defp leading_zeros(data) do\n :binary.bin_to_list(data)\n |> Enum.find_index(&(&1 != 0))\n end\nend\n```\n\nMost of the steps to get here have been derived from reading some excellent blog posts on Bitcoin, and reading through some elixir crypto libraries that deal with either bitcoin or ethereum. I've just managed to glue them together to apply them to EOSIO. 🚀\n\nSome of the posts and/or repos that are helpful (and many more that I lost the chrome tab to):\nhttps://blog.lelonek.me/how-to-calculate-bitcoin-address-in-elixir-68939af4f0e9\nhttps://github.com/KamilLelonek/ex_wallet\nhttp://www.petecorey.com/blog/2018/01/08/bitcoins-base58check-in-pure-elixir/\nhttps://github.com/exthereum/exth_crypto/blob/master/lib/signature/signature.ex\n\nUntil next time!\n\nAngel\n[twitter](https://twitter.com/ajose01)\n[sense.chat](https://my.sense.chat/amazingangel)",
"title": "EOS Signature verification with Elixir 😍",
"author": "ajose01",
"permlink": "eos-signature-verification-with-elixir",
"json_metadata": "{\"tags\":[\"elixir\",\"eosio\",\"ecdsa\",\"ecc\",\"libsecp256k1\"],\"image\":[\"https://cdn.steemitimages.com/DQmX3cUD6T2ZEQDfPLzFVBf9hbMr8EvWoMTGjKRzFbPvFwX/kelly-sikkema-1485308-unsplash.jpg\"],\"links\":[\"https://github.com/EOSIO/eosjs-ecc\",\"https://blog.lelonek.me/how-to-calculate-bitcoin-address-in-elixir-68939af4f0e9\",\"https://github.com/KamilLelonek/ex_wallet\",\"http://www.petecorey.com/blog/2018/01/08/bitcoins-base58check-in-pure-elixir/\",\"https://github.com/exthereum/exth_crypto/blob/master/lib/signature/signature.ex\",\"https://twitter.com/ajose01\",\"https://my.sense.chat/amazingangel\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "elixir"
}
],
"block": 31973382,
"trx_id": "6e79939fbd19c92986956df616cbac0eeb689ee5",
"op_in_trx": 0,
"timestamp": "2019-04-12T06:44:15",
"virtual_op": false,
"trx_in_block": 9
}makesenseupvoted (100.00%) @ajose01 / securing-messages-using-eos-and-ecdh-and-aes2019/03/13 22:13:12
makesenseupvoted (100.00%) @ajose01 / securing-messages-using-eos-and-ecdh-and-aes
2019/03/13 22:13:12
| voter | makesense |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | securing-messages-using-eos-and-ecdh-and-aes |
| Transaction Info | Block #31128883/Trx 2b1443b71d000a906398b6d1b9ad0d48454daeb1 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "makesense",
"author": "ajose01",
"weight": 10000,
"permlink": "securing-messages-using-eos-and-ecdh-and-aes"
}
],
"block": 31128883,
"trx_id": "2b1443b71d000a906398b6d1b9ad0d48454daeb1",
"op_in_trx": 0,
"timestamp": "2019-03-13T22:13:12",
"virtual_op": false,
"trx_in_block": 0
}2019/02/25 22:38:45
2019/02/25 22:38:45
| body | Hello @ajose01! This is a friendly reminder that you have 3000 Partiko Points unclaimed in your Partiko account! Partiko is a fast and beautiful mobile app for Steem, and it’s the most popular Steem mobile app out there! Download Partiko using the link below and login using SteemConnect to claim your 3000 Partiko points! You can easily convert them into Steem token! https://partiko.app/referral/partiko  |
| title | |
| author | partiko |
| permlink | partiko-re-ajose01-securing-messages-using-eos-and-ecdh-and-aes-20190225t223842089z |
| json metadata | {"app":"partiko"} |
| parent author | ajose01 |
| parent permlink | securing-messages-using-eos-and-ecdh-and-aes |
| Transaction Info | Block #30668896/Trx e4c4b37cdc113acc8ff63db7a695aea82561f5b4 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "Hello @ajose01! This is a friendly reminder that you have 3000 Partiko Points unclaimed in your Partiko account!\n\nPartiko is a fast and beautiful mobile app for Steem, and it’s the most popular Steem mobile app out there! Download Partiko using the link below and login using SteemConnect to claim your 3000 Partiko points! You can easily convert them into Steem token!\n\nhttps://partiko.app/referral/partiko\n\n",
"title": "",
"author": "partiko",
"permlink": "partiko-re-ajose01-securing-messages-using-eos-and-ecdh-and-aes-20190225t223842089z",
"json_metadata": "{\"app\":\"partiko\"}",
"parent_author": "ajose01",
"parent_permlink": "securing-messages-using-eos-and-ecdh-and-aes"
}
],
"block": 30668896,
"trx_id": "e4c4b37cdc113acc8ff63db7a695aea82561f5b4",
"op_in_trx": 0,
"timestamp": "2019-02-25T22:38:45",
"virtual_op": false,
"trx_in_block": 14
}2019/02/12 21:38:33
2019/02/12 21:38:33
| body | Congratulations @ajose01! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) : <table><tr><td>https://steemitimages.com/60x60/http://steemitboard.com/notifications/firstvote.png</td><td>You made your First Vote</td></tr> </table> <sub>_[Click here to view your Board](https://steemitboard.com/@ajose01)_</sub> <sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**! |
| title | |
| author | steemitboard |
| permlink | steemitboard-notify-ajose01-20190212t213832000z |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | ajose01 |
| parent permlink | securing-messages-using-eos-and-ecdh-and-aes |
| Transaction Info | Block #30293582/Trx 698f9a965241c028f661f23b662db328552b73c9 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "Congratulations @ajose01! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :\n\n<table><tr><td>https://steemitimages.com/60x60/http://steemitboard.com/notifications/firstvote.png</td><td>You made your First Vote</td></tr>\n</table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@ajose01)_</sub>\n<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>\n\n\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
"title": "",
"author": "steemitboard",
"permlink": "steemitboard-notify-ajose01-20190212t213832000z",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "ajose01",
"parent_permlink": "securing-messages-using-eos-and-ecdh-and-aes"
}
],
"block": 30293582,
"trx_id": "698f9a965241c028f661f23b662db328552b73c9",
"op_in_trx": 0,
"timestamp": "2019-02-12T21:38:33",
"virtual_op": false,
"trx_in_block": 54
}ajose01upvoted (100.00%) @befractal / we-are-fractal-and-we-love-you2019/02/12 20:11:45
ajose01upvoted (100.00%) @befractal / we-are-fractal-and-we-love-you
2019/02/12 20:11:45
| voter | ajose01 |
| author | befractal |
| weight | 10000 (100.00%) |
| permlink | we-are-fractal-and-we-love-you |
| Transaction Info | Block #30291846/Trx 5c648c95de69b382d4c5171e4f61c97690831b54 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "ajose01",
"author": "befractal",
"weight": 10000,
"permlink": "we-are-fractal-and-we-love-you"
}
],
"block": 30291846,
"trx_id": "5c648c95de69b382d4c5171e4f61c97690831b54",
"op_in_trx": 0,
"timestamp": "2019-02-12T20:11:45",
"virtual_op": false,
"trx_in_block": 8
}ajose01updated payout for securing-messages-using-eos-and-ecdh-and-aes2019/01/15 06:17:18
ajose01updated payout for securing-messages-using-eos-and-ecdh-and-aes
2019/01/15 06:17:18
| author | ajose01 |
| permlink | securing-messages-using-eos-and-ecdh-and-aes |
| Transaction Info | Block #29469554/Virtual Operation 4294967295:6 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "ajose01",
"permlink": "securing-messages-using-eos-and-ecdh-and-aes"
}
],
"block": 29469554,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 6,
"timestamp": "2019-01-15T06:17:18",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01received 0.043 HBD reward share for securing-messages-using-eos-and-ecdh-and-aes2019/01/15 06:17:18
ajose01received 0.043 HBD reward share for securing-messages-using-eos-and-ecdh-and-aes
2019/01/15 06:17:18
| author | ajose01 |
| payout | 0.043 HBD |
| permlink | securing-messages-using-eos-and-ecdh-and-aes |
| author rewards | 95 |
| total payout value | 0.032 HBD |
| curator payout value | 0.010 HBD |
| beneficiary payout value | 0.000 HBD |
| Transaction Info | Block #29469554/Virtual Operation 4294967295:5 |
View Raw JSON Data
{
"op": [
"comment_reward",
{
"author": "ajose01",
"payout": "0.043 HBD",
"permlink": "securing-messages-using-eos-and-ecdh-and-aes",
"author_rewards": 95,
"total_payout_value": "0.032 HBD",
"curator_payout_value": "0.010 HBD",
"beneficiary_payout_value": "0.000 HBD"
}
],
"block": 29469554,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 5,
"timestamp": "2019-01-15T06:17:18",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01received 0.047 HIVE, 0.059 HP author reward for @ajose01 / securing-messages-using-eos-and-ecdh-and-aes2019/01/15 06:17:18
ajose01received 0.047 HIVE, 0.059 HP author reward for @ajose01 / securing-messages-using-eos-and-ecdh-and-aes
2019/01/15 06:17:18
| author | ajose01 |
| permlink | securing-messages-using-eos-and-ecdh-and-aes |
| hbd payout | 0.000 HBD |
| hive payout | 0.047 HIVE |
| vesting payout | 96.406418 VESTS |
| payout must be claimed | true |
| curators vesting payout | 60.254011 VESTS |
| Transaction Info | Block #29469554/Virtual Operation 4294967295:4 |
View Raw JSON Data
{
"op": [
"author_reward",
{
"author": "ajose01",
"permlink": "securing-messages-using-eos-and-ecdh-and-aes",
"hbd_payout": "0.000 HBD",
"hive_payout": "0.047 HIVE",
"vesting_payout": "96.406418 VESTS",
"payout_must_be_claimed": true,
"curators_vesting_payout": "60.254011 VESTS"
}
],
"block": 29469554,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 4,
"timestamp": "2019-01-15T06:17:18",
"virtual_op": true,
"trx_in_block": 4294967295
}virtualgrowtheffective vote applied for @ajose01 / securing-messages-using-eos-and-ecdh-and-aes2019/01/08 08:16:33
virtualgrowtheffective vote applied for @ajose01 / securing-messages-using-eos-and-ecdh-and-aes
2019/01/08 08:16:33
| voter | virtualgrowth |
| author | ajose01 |
| weight | 273455 |
| rshares | 82403427180 |
| permlink | securing-messages-using-eos-and-ecdh-and-aes |
| pending payout | 0.046 HBD |
| total vote weight | 288683 |
| Transaction Info | Block #29270468/Trx 0b36f496ca305f02428f77238877bf412af7b2c4 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "virtualgrowth",
"author": "ajose01",
"weight": 273455,
"rshares": 82403427180,
"permlink": "securing-messages-using-eos-and-ecdh-and-aes",
"pending_payout": "0.046 HBD",
"total_vote_weight": 288683
}
],
"block": 29270468,
"trx_id": "0b36f496ca305f02428f77238877bf412af7b2c4",
"op_in_trx": 1,
"timestamp": "2019-01-08T08:16:33",
"virtual_op": true,
"trx_in_block": 0
}virtualgrowthupvoted (100.00%) @ajose01 / securing-messages-using-eos-and-ecdh-and-aes2019/01/08 08:16:33
virtualgrowthupvoted (100.00%) @ajose01 / securing-messages-using-eos-and-ecdh-and-aes
2019/01/08 08:16:33
| voter | virtualgrowth |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | securing-messages-using-eos-and-ecdh-and-aes |
| Transaction Info | Block #29270468/Trx 0b36f496ca305f02428f77238877bf412af7b2c4 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "virtualgrowth",
"author": "ajose01",
"weight": 10000,
"permlink": "securing-messages-using-eos-and-ecdh-and-aes"
}
],
"block": 29270468,
"trx_id": "0b36f496ca305f02428f77238877bf412af7b2c4",
"op_in_trx": 0,
"timestamp": "2019-01-08T08:16:33",
"virtual_op": false,
"trx_in_block": 0
}fyrstikkeneffective vote applied for @ajose01 / securing-messages-using-eos-and-ecdh-and-aes2019/01/08 06:37:21
fyrstikkeneffective vote applied for @ajose01 / securing-messages-using-eos-and-ecdh-and-aes
2019/01/08 06:37:21
| voter | fyrstikken |
| author | ajose01 |
| weight | 15228 |
| rshares | 230558787 |
| permlink | securing-messages-using-eos-and-ecdh-and-aes |
| pending payout | 0.000 HBD |
| total vote weight | 15228 |
| Transaction Info | Block #29268484/Trx c8ea1174e749d0b2708f7db1fffac5ce8b1d328b |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "fyrstikken",
"author": "ajose01",
"weight": 15228,
"rshares": 230558787,
"permlink": "securing-messages-using-eos-and-ecdh-and-aes",
"pending_payout": "0.000 HBD",
"total_vote_weight": 15228
}
],
"block": 29268484,
"trx_id": "c8ea1174e749d0b2708f7db1fffac5ce8b1d328b",
"op_in_trx": 1,
"timestamp": "2019-01-08T06:37:21",
"virtual_op": true,
"trx_in_block": 88
}fyrstikkenupvoted (1.00%) @ajose01 / securing-messages-using-eos-and-ecdh-and-aes2019/01/08 06:37:21
fyrstikkenupvoted (1.00%) @ajose01 / securing-messages-using-eos-and-ecdh-and-aes
2019/01/08 06:37:21
| voter | fyrstikken |
| author | ajose01 |
| weight | 100 (1.00%) |
| permlink | securing-messages-using-eos-and-ecdh-and-aes |
| Transaction Info | Block #29268484/Trx c8ea1174e749d0b2708f7db1fffac5ce8b1d328b |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "fyrstikken",
"author": "ajose01",
"weight": 100,
"permlink": "securing-messages-using-eos-and-ecdh-and-aes"
}
],
"block": 29268484,
"trx_id": "c8ea1174e749d0b2708f7db1fffac5ce8b1d328b",
"op_in_trx": 0,
"timestamp": "2019-01-08T06:37:21",
"virtual_op": false,
"trx_in_block": 88
}raise-me-upeffective vote applied for @ajose01 / securing-messages-using-eos-and-ecdh-and-aes2019/01/08 06:22:39
raise-me-upeffective vote applied for @ajose01 / securing-messages-using-eos-and-ecdh-and-aes
2019/01/08 06:22:39
| voter | raise-me-up |
| author | ajose01 |
| weight | 0 (0.00%) |
| rshares | 0 |
| permlink | securing-messages-using-eos-and-ecdh-and-aes |
| pending payout | 0.000 HBD |
| total vote weight | 0 |
| Transaction Info | Block #29268190/Trx a7af61815801190902a19443febf672fb28e5e01 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "raise-me-up",
"author": "ajose01",
"weight": 0,
"rshares": 0,
"permlink": "securing-messages-using-eos-and-ecdh-and-aes",
"pending_payout": "0.000 HBD",
"total_vote_weight": 0
}
],
"block": 29268190,
"trx_id": "a7af61815801190902a19443febf672fb28e5e01",
"op_in_trx": 1,
"timestamp": "2019-01-08T06:22:39",
"virtual_op": true,
"trx_in_block": 2
}raise-me-upupvoted (0.01%) @ajose01 / securing-messages-using-eos-and-ecdh-and-aes2019/01/08 06:22:39
raise-me-upupvoted (0.01%) @ajose01 / securing-messages-using-eos-and-ecdh-and-aes
2019/01/08 06:22:39
| voter | raise-me-up |
| author | ajose01 |
| weight | 1 (0.01%) |
| permlink | securing-messages-using-eos-and-ecdh-and-aes |
| Transaction Info | Block #29268190/Trx a7af61815801190902a19443febf672fb28e5e01 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "raise-me-up",
"author": "ajose01",
"weight": 1,
"permlink": "securing-messages-using-eos-and-ecdh-and-aes"
}
],
"block": 29268190,
"trx_id": "a7af61815801190902a19443febf672fb28e5e01",
"op_in_trx": 0,
"timestamp": "2019-01-08T06:22:39",
"virtual_op": false,
"trx_in_block": 2
}ajose01published a new post: securing-messages-using-eos-and-ecdh-and-aes2019/01/08 06:17:21
ajose01published a new post: securing-messages-using-eos-and-ecdh-and-aes
2019/01/08 06:17:21
| body |  [Photo - @neonbrand via unsplash](https://unsplash.com/@neonbrand) # Securing messages using EOS (and ECDH and AES) _Disclaimer: I'm sharing as I'm learning... please use at your own risk, or better yet share in comments how to improve! Also, I will use terms as seed / password loosely, to illustrate the process._ Can we encrypt communication between two EOS users using the private / public keys already in our possession? YES! Well... with some caveats. ECC in itself is not an encryption algorithm. In EOS and other blockchains it is used to sign transactions, but not to obscure what is being signed. However, it can be leveraged to encrypt communications if we take a couple steps. ## Preface We are going to do this first the long way, to learn a bit about the process. We'll finish with a simpler (and quicker) way using some existing EOS tooling (Skip to Step 5 if you want to just see that). This is in Javascript, so here's what we'll need: ```Javascript const EC = require('elliptic').ec; const hkdf = require('futoin-hkdf'); const aesjs = require('aes-js'); const ecc = require('eosjs-ecc'); ``` We'll also generate some EOS keys for ourselves: ```Javascript let eosPk1 = await PrivateKey.randomKey(); let eosPk2 = await PrivateKey.randomKey() let eosPub1 = ecc.privateToPublic(eosPk1); let eosPub2 = ecc.privateToPublic(eosPk2); console.log("EOS USER 1: ", eosPub1); console.log("EOS USER 2: ", eosPub2); ``` ## Step 1 - Generate a shared encryption seed. In order to encrypt our communications, we would usually need an encryption seed (for us encryption noobs, think something like a password) that we use to secure our communication. As long as both parties know the password, we can decrypt our message. The trick is having a common seed / pass that we never have to communicate to the other party. In crypto world, we already have enough keys to worry about! How can we accomplish this? Enter [ECDH](https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman). Using this protocol, we can use our EOS (or any ECC) private key and the other parties EOS public key. Here's the process assuming we are EOS user 1: ```Javascript // EOS KEY1 - Generating shared key console.log("Scenario 1. EOS User 1 generating shared key via own PK, and User 2 public key\n") const key1 = ec.keyFromPrivate(eosPk1.toBuffer()); // We simulate not knowing the other parties PK. let eosPubBuffer2 = ecc.PublicKey(eosPub2).toBuffer(); const ecpub2 = ec.keyFromPublic(eosPubBuffer2); const pub2 = ecpub2.getPublic(); console.log("PubKey2: ", pub2); const shared1 = key1.derive(pub2).toString(16); console.log("Shared key derived by EOS USER 1: ", shared1); ``` We'd do the reverse for the other user, and we would end up generating the same shared key #winning. ## Step 2 - Convert our shared key to a valid AES key / encryption seed. Our shared key here needs to be converted to a seed we can use with AES. To do that we use a Key Derivation Function, in this case [HKDF](https://en.wikipedia.org/wiki/HKDF). ```Javascript // Convert shared key to AES valid key let key = hkdf(shared1, 16) ``` ## Step 3 - Encrypt our message via AES Now that we have a valid key to use for AES encryption, we can finally get to making our messages secret. ```Javascript let text = "Let's encrypt... secret taco meetup!" console.log("Test string: ", text) let textBytes = aesjs.utils.utf8.toBytes(text); let aesCtr = new aesjs.ModeOfOperation.ctr(key); let encryptedBytes = aesCtr.encrypt(textBytes); // We convert to hex to make it easy to transmit as text let encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes); console.log("Encrypted text as it would be transmitted:\n", encryptedHex); // Encrypted text as it would be transmitted: // 9c27303372372cda33c70441f0960fde77fff9b118ddc64f2bcf027f3823da142f5e6baa ``` Here we could have used a nonce or a counter to add a bit more security to the messages we are sending or receiving. ```Javascript // The counter is optional, and if omitted will begin at 1 let aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); ``` ## Step 4 - Decrypting message The other user would have been able to generate the same shared key using the steps above. On receiving this message, they would now use that key to decrypt the message. ```Javascript // Time to decrypt console.log("Now going to decrypt...:\n", encryptedHex); let encryptedBytes2 = aesjs.utils.hex.toBytes(encryptedHex); // Use same shared key to decrypt let aesCtr2 = new aesjs.ModeOfOperation.ctr(key); let decryptedBytes = aesCtr2.decrypt(encryptedBytes2); let decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes); console.log("Decrypted text result: ", decryptedText); //Now going to decrypt...: // 9c27303372372cda33c70441f0960fde77fff9b118ddc64f2bcf027f3823da142f5e6baa //Decrypted text result: Let's encrypt... secret taco meetup! ``` Wooohooo! We have communicated without letting prying eyes know what we wrote. 🌮🌮🌮 The full code to test this out is [here](https://github.com/ajose01/eos_ecdh/blob/master/eosEncrypt.js). Feel free to give it a try. ## Step 5 - EOS tooling makes it (somewhat) simpler. Going through the steps above was a good exercise for me to learn how things are working under the hood, especially because I am interested in learning more about cryptography. However, there is a [simpler way](https://github.com/EOSIO/eosjs-ecc/issues/19) to do this via `eosjs-ecc`. Let's give it a whirl: ###### First we encrypt using the same keys generated earlier. ```Javascript // Message let message = "Tacos via EOS"; console.log("Message to encrypt: ", message); // EOS KEY1 - Encrypting console.log("EOS User 1 encrypting the message\n") let encryptedMessage = ecc.Aes.encrypt(eosPk1, eosPub2, message) let nonce = encryptedMessage.nonce.toString(); let checksum = encryptedMessage.checksum; let messageHex = encryptedMessage.message.toString('hex'); console.log("Items to send to user 2:\n", messageHex,nonce,checksum); // Items to send to user 2: // 28e2fa0c4bc8a339a5b7e096883e51fa 101379311011030238 1143290642 ``` You'll notice that we will have to send over some additional items with the user aside from the message: nonce and checksum. ###### Now we can decrypt with the other user. ```Javascript // EOS KEY2 - Decrypting the message console.log("EOS User 2 decrypting the message\n"); let messageBuffer = Buffer.from(messageHex, 'hex'); let decryptedMessageBuffer = ecc.Aes.decrypt(eosPk2, eosPub1, nonce, messageBuffer, checksum); let decryptedMessage = decryptedMessageBuffer.toString(); console.log("decrypted message: ", decryptedMessage); console.log("message match?: ", (message == decryptedMessage)); //decrypted message: Tacos via EOS //message match?: true ``` This takes care of generating the shared keys under the hood, so it let's us write less code. You can see or download the code [here](https://github.com/ajose01/eos_ecdh/blob/master/eosOnlyEncrypt.js). ## Conclusion Learning the tools that are already available is super valuable. It opens up different options on dapp design, encryption and communications. I hope this was post was helpful 🙏 Angel Jose / @ajose01 - I poke at the blockchain with the [Sense team](https://makesense.com/), host [EOS meetups](https://www.meetup.com/EOS-Dapp-Development-Meetup/), learn and share about crypto and eat 🌮🌮. * [sense.chat](https://sense.chat) * [steemit](https://steemit.com/@ajose01/) * [twitter](https://twitter.com/ajose01) * [youtube](https://www.youtube.com/channel/UC3TaA9_obCreXZrhECmKs2Q) * [past meetups](https://www.youtube.com/channel/UCN2TfO4zmz1PaezhBMtZXrw/videos) * [github](https://github.com/ajose01) |
| title | Securing messages using EOS (and ECDH and AES) |
| author | ajose01 |
| permlink | securing-messages-using-eos-and-ecdh-and-aes |
| json metadata | {"tags":["eos","blockchain","encryption","tutorial","dapps"],"users":["ajose01"],"image":["https://cdn.steemitimages.com/DQmYb1GYUm6iRAksGi3acW36fVwfs6GQahioZjoMMSmuME3/image.png"],"links":["https://unsplash.com/@neonbrand","https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman","https://en.wikipedia.org/wiki/HKDF","https://github.com/ajose01/eos_ecdh/blob/master/eosEncrypt.js","https://github.com/EOSIO/eosjs-ecc/issues/19","https://github.com/ajose01/eos_ecdh/blob/master/eosOnlyEncrypt.js","https://makesense.com/","https://www.meetup.com/EOS-Dapp-Development-Meetup/","https://sense.chat","https://steemit.com/@ajose01/","https://twitter.com/ajose01","https://www.youtube.com/channel/UC3TaA9_obCreXZrhECmKs2Q","https://www.youtube.com/channel/UCN2TfO4zmz1PaezhBMtZXrw/videos","https://github.com/ajose01"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | eos |
| Transaction Info | Block #29268084/Trx b81d971f217871b1a866a5306ca5d0707a4bca18 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "\n[Photo - @neonbrand via unsplash](https://unsplash.com/@neonbrand)\n\n# Securing messages using EOS (and ECDH and AES)\n\n_Disclaimer: I'm sharing as I'm learning... please use at your own risk, or better yet share in comments how to improve! Also, I will use terms as seed / password loosely, to illustrate the process._\n\nCan we encrypt communication between two EOS users using the private / public keys already in our possession? YES! Well... with some caveats. ECC in itself is not an encryption algorithm. In EOS and other blockchains it is used to sign transactions, but not to obscure what is being signed. However, it can be leveraged to encrypt communications if we take a couple steps.\n\n## Preface\nWe are going to do this first the long way, to learn a bit about the process. We'll finish with a simpler (and quicker) way using some existing EOS tooling (Skip to Step 5 if you want to just see that). This is in Javascript, so here's what we'll need:\n```Javascript\nconst EC = require('elliptic').ec;\nconst hkdf = require('futoin-hkdf');\nconst aesjs = require('aes-js');\nconst ecc = require('eosjs-ecc');\n```\nWe'll also generate some EOS keys for ourselves:\n```Javascript\nlet eosPk1 = await PrivateKey.randomKey();\nlet eosPk2 = await PrivateKey.randomKey()\nlet eosPub1 = ecc.privateToPublic(eosPk1);\nlet eosPub2 = ecc.privateToPublic(eosPk2);\nconsole.log(\"EOS USER 1: \", eosPub1);\nconsole.log(\"EOS USER 2: \", eosPub2);\n```\n\n## Step 1 - Generate a shared encryption seed.\n\nIn order to encrypt our communications, we would usually need an encryption seed (for us encryption noobs, think something like a password) that we use to secure our communication. As long as both parties know the password, we can decrypt our message. The trick is having a common seed / pass that we never have to communicate to the other party. In crypto world, we already have enough keys to worry about! How can we accomplish this?\n\nEnter [ECDH](https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman). Using this protocol, we can use our EOS (or any ECC) private key and the other parties EOS public key.\n\nHere's the process assuming we are EOS user 1:\n```Javascript\n// EOS KEY1 - Generating shared key\nconsole.log(\"Scenario 1. EOS User 1 generating shared key via own PK, and User 2 public key\\n\")\nconst key1 = ec.keyFromPrivate(eosPk1.toBuffer());\n// We simulate not knowing the other parties PK.\nlet eosPubBuffer2 = ecc.PublicKey(eosPub2).toBuffer();\nconst ecpub2 = ec.keyFromPublic(eosPubBuffer2);\nconst pub2 = ecpub2.getPublic();\nconsole.log(\"PubKey2: \", pub2);\nconst shared1 = key1.derive(pub2).toString(16);\nconsole.log(\"Shared key derived by EOS USER 1: \", shared1);\n```\nWe'd do the reverse for the other user, and we would end up generating the same shared key #winning.\n\n## Step 2 - Convert our shared key to a valid AES key / encryption seed.\n\nOur shared key here needs to be converted to a seed we can use with AES. To do that we use a Key Derivation Function, in this case [HKDF](https://en.wikipedia.org/wiki/HKDF).\n\n```Javascript\n// Convert shared key to AES valid key\nlet key = hkdf(shared1, 16)\n```\n\n## Step 3 - Encrypt our message via AES\n\nNow that we have a valid key to use for AES encryption, we can finally get to making our messages secret.\n```Javascript\nlet text = \"Let's encrypt... secret taco meetup!\"\nconsole.log(\"Test string: \", text)\nlet textBytes = aesjs.utils.utf8.toBytes(text);\nlet aesCtr = new aesjs.ModeOfOperation.ctr(key);\nlet encryptedBytes = aesCtr.encrypt(textBytes);\n// We convert to hex to make it easy to transmit as text\nlet encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes);\nconsole.log(\"Encrypted text as it would be transmitted:\\n\", encryptedHex);\n// Encrypted text as it would be transmitted:\n// 9c27303372372cda33c70441f0960fde77fff9b118ddc64f2bcf027f3823da142f5e6baa\n\n```\nHere we could have used a nonce or a counter to add a bit more security to the messages we are sending or receiving.\n```Javascript\n// The counter is optional, and if omitted will begin at 1\nlet aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5));\n```\n\n## Step 4 - Decrypting message\n\nThe other user would have been able to generate the same shared key using the steps above. On receiving this message, they would now use that key to decrypt the message.\n```Javascript\n// Time to decrypt\nconsole.log(\"Now going to decrypt...:\\n\", encryptedHex);\n\nlet encryptedBytes2 = aesjs.utils.hex.toBytes(encryptedHex);\n// Use same shared key to decrypt\nlet aesCtr2 = new aesjs.ModeOfOperation.ctr(key);\nlet decryptedBytes = aesCtr2.decrypt(encryptedBytes2);\nlet decryptedText = aesjs.utils.utf8.fromBytes(decryptedBytes);\nconsole.log(\"Decrypted text result: \", decryptedText);\n//Now going to decrypt...:\n// 9c27303372372cda33c70441f0960fde77fff9b118ddc64f2bcf027f3823da142f5e6baa\n//Decrypted text result: Let's encrypt... secret taco meetup!\n```\nWooohooo! We have communicated without letting prying eyes know what we wrote. 🌮🌮🌮\n\nThe full code to test this out is [here](https://github.com/ajose01/eos_ecdh/blob/master/eosEncrypt.js). Feel free to give it a try.\n\n## Step 5 - EOS tooling makes it (somewhat) simpler.\nGoing through the steps above was a good exercise for me to learn how things are working under the hood, especially because I am interested in learning more about cryptography. However, there is a [simpler way](https://github.com/EOSIO/eosjs-ecc/issues/19) to do this via `eosjs-ecc`. Let's give it a whirl:\n\n###### First we encrypt using the same keys generated earlier.\n```Javascript\n// Message\nlet message = \"Tacos via EOS\";\nconsole.log(\"Message to encrypt: \", message);\n\n// EOS KEY1 - Encrypting\nconsole.log(\"EOS User 1 encrypting the message\\n\")\nlet encryptedMessage = ecc.Aes.encrypt(eosPk1, eosPub2, message)\nlet nonce = encryptedMessage.nonce.toString();\nlet checksum = encryptedMessage.checksum;\nlet messageHex = encryptedMessage.message.toString('hex');\nconsole.log(\"Items to send to user 2:\\n\", messageHex,nonce,checksum);\n// Items to send to user 2:\n// 28e2fa0c4bc8a339a5b7e096883e51fa 101379311011030238 1143290642\n```\nYou'll notice that we will have to send over some additional items with the user aside from the message: nonce and checksum.\n###### Now we can decrypt with the other user.\n```Javascript\n// EOS KEY2 - Decrypting the message\nconsole.log(\"EOS User 2 decrypting the message\\n\");\nlet messageBuffer = Buffer.from(messageHex, 'hex');\nlet decryptedMessageBuffer = ecc.Aes.decrypt(eosPk2, eosPub1, nonce, messageBuffer, checksum);\nlet decryptedMessage = decryptedMessageBuffer.toString();\nconsole.log(\"decrypted message: \", decryptedMessage);\nconsole.log(\"message match?: \", (message == decryptedMessage));\n//decrypted message: Tacos via EOS\n//message match?: true\n```\nThis takes care of generating the shared keys under the hood, so it let's us write less code. You can see or download the code [here](https://github.com/ajose01/eos_ecdh/blob/master/eosOnlyEncrypt.js).\n\n## Conclusion\nLearning the tools that are already available is super valuable. It opens up different options on dapp design, encryption and communications. I hope this was post was helpful 🙏\n\nAngel Jose / @ajose01 - I poke at the blockchain with the [Sense team](https://makesense.com/), host [EOS meetups](https://www.meetup.com/EOS-Dapp-Development-Meetup/), learn and share about crypto and eat 🌮🌮.\n* [sense.chat](https://sense.chat)\n* [steemit](https://steemit.com/@ajose01/)\n* [twitter](https://twitter.com/ajose01)\n* [youtube](https://www.youtube.com/channel/UC3TaA9_obCreXZrhECmKs2Q)\n* [past meetups](https://www.youtube.com/channel/UCN2TfO4zmz1PaezhBMtZXrw/videos)\n* [github](https://github.com/ajose01)",
"title": "Securing messages using EOS (and ECDH and AES)",
"author": "ajose01",
"permlink": "securing-messages-using-eos-and-ecdh-and-aes",
"json_metadata": "{\"tags\":[\"eos\",\"blockchain\",\"encryption\",\"tutorial\",\"dapps\"],\"users\":[\"ajose01\"],\"image\":[\"https://cdn.steemitimages.com/DQmYb1GYUm6iRAksGi3acW36fVwfs6GQahioZjoMMSmuME3/image.png\"],\"links\":[\"https://unsplash.com/@neonbrand\",\"https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman\",\"https://en.wikipedia.org/wiki/HKDF\",\"https://github.com/ajose01/eos_ecdh/blob/master/eosEncrypt.js\",\"https://github.com/EOSIO/eosjs-ecc/issues/19\",\"https://github.com/ajose01/eos_ecdh/blob/master/eosOnlyEncrypt.js\",\"https://makesense.com/\",\"https://www.meetup.com/EOS-Dapp-Development-Meetup/\",\"https://sense.chat\",\"https://steemit.com/@ajose01/\",\"https://twitter.com/ajose01\",\"https://www.youtube.com/channel/UC3TaA9_obCreXZrhECmKs2Q\",\"https://www.youtube.com/channel/UCN2TfO4zmz1PaezhBMtZXrw/videos\",\"https://github.com/ajose01\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "eos"
}
],
"block": 29268084,
"trx_id": "b81d971f217871b1a866a5306ca5d0707a4bca18",
"op_in_trx": 0,
"timestamp": "2019-01-08T06:17:21",
"virtual_op": false,
"trx_in_block": 40
}2018/12/04 10:03:42
2018/12/04 10:03:42
| body | @@ -75,10 +75,4 @@ 4k90 -&t=27s |
| title | |
| author | cryptolions |
| permlink | re-ajose01-scatter-and-the-jungle-testnet-20181204t100326492z |
| json metadata | {"tags":["eos"],"image":["https://img.youtube.com/vi/6Yf-cHg4k90/0.jpg"],"links":["https://www.youtube.com/watch?v=6Yf-cHg4k90"],"app":"steemit/0.1"} |
| parent author | ajose01 |
| parent permlink | scatter-and-the-jungle-testnet |
| Transaction Info | Block #28265334/Trx 509e66749d96bb72f6cbe1c5adfb0ad102760de2 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "@@ -75,10 +75,4 @@\n 4k90\n-&t=27s\n",
"title": "",
"author": "cryptolions",
"permlink": "re-ajose01-scatter-and-the-jungle-testnet-20181204t100326492z",
"json_metadata": "{\"tags\":[\"eos\"],\"image\":[\"https://img.youtube.com/vi/6Yf-cHg4k90/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=6Yf-cHg4k90\"],\"app\":\"steemit/0.1\"}",
"parent_author": "ajose01",
"parent_permlink": "scatter-and-the-jungle-testnet"
}
],
"block": 28265334,
"trx_id": "509e66749d96bb72f6cbe1c5adfb0ad102760de2",
"op_in_trx": 0,
"timestamp": "2018-12-04T10:03:42",
"virtual_op": false,
"trx_in_block": 17
}2018/12/04 10:03:30
2018/12/04 10:03:30
| body | This video tutorial may help too: https://www.youtube.com/watch?v=6Yf-cHg4k90&t=27s |
| title | |
| author | cryptolions |
| permlink | re-ajose01-scatter-and-the-jungle-testnet-20181204t100326492z |
| json metadata | {"tags":["eos"],"image":["https://img.youtube.com/vi/6Yf-cHg4k90/0.jpg"],"links":["https://www.youtube.com/watch?v=6Yf-cHg4k90&t=27s"],"app":"steemit/0.1"} |
| parent author | ajose01 |
| parent permlink | scatter-and-the-jungle-testnet |
| Transaction Info | Block #28265330/Trx 93bcb6bccd4462970b9ef61c613af63398f6802c |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "This video tutorial may help too: https://www.youtube.com/watch?v=6Yf-cHg4k90&t=27s",
"title": "",
"author": "cryptolions",
"permlink": "re-ajose01-scatter-and-the-jungle-testnet-20181204t100326492z",
"json_metadata": "{\"tags\":[\"eos\"],\"image\":[\"https://img.youtube.com/vi/6Yf-cHg4k90/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=6Yf-cHg4k90&t=27s\"],\"app\":\"steemit/0.1\"}",
"parent_author": "ajose01",
"parent_permlink": "scatter-and-the-jungle-testnet"
}
],
"block": 28265330,
"trx_id": "93bcb6bccd4462970b9ef61c613af63398f6802c",
"op_in_trx": 0,
"timestamp": "2018-12-04T10:03:30",
"virtual_op": false,
"trx_in_block": 21
}2018/09/01 03:58:57
2018/09/01 03:58:57
| body | "Step 2: You'll need to create an account and create an identity. Easiest way is to click on "Play Around"" in Scatter? there's no such button or link there. I've created an account on EOS via zeos and I can create an identity in Scatter but how do I bind the two together? |
| title | |
| author | ekkis |
| permlink | re-ajose01-eos-and-scatter-part-1-20180901t035853062z |
| json metadata | {"tags":["eos"],"app":"steemit/0.1"} |
| parent author | ajose01 |
| parent permlink | eos-and-scatter-part-1 |
| Transaction Info | Block #25568274/Trx e3e66320a789aea0cb000a5f76bce41ae30df7cc |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "\"Step 2: You'll need to create an account and create an identity. Easiest way is to click on \"Play Around\"\"\n\nin Scatter? there's no such button or link there. I've created an account on EOS via zeos and I can create an identity in Scatter but how do I bind the two together?",
"title": "",
"author": "ekkis",
"permlink": "re-ajose01-eos-and-scatter-part-1-20180901t035853062z",
"json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}",
"parent_author": "ajose01",
"parent_permlink": "eos-and-scatter-part-1"
}
],
"block": 25568274,
"trx_id": "e3e66320a789aea0cb000a5f76bce41ae30df7cc",
"op_in_trx": 0,
"timestamp": "2018-09-01T03:58:57",
"virtual_op": false,
"trx_in_block": 1
}smitopblockchain operation: transfer from savings2018/08/01 17:58:54
smitopblockchain operation: transfer from savings
2018/08/01 17:58:54
| to | ajose01 |
| from | smitop |
| memo | Hi, it looks like you're not voting for any witnesses. Witnesses help secure the Steem network. You should vote for some, at https://steemit.com/~witnesses, or by pressing 'Vote for witnesses' in the Steemit sidebar (top right corner). I'm a bot. |
| amount | 0.001 HBD |
| request id | 15887 |
| Transaction Info | Block #24692632/Trx 4906b0759dd5480d6e3f2e5805d9539d227f20cd |
View Raw JSON Data
{
"op": [
"transfer_from_savings",
{
"to": "ajose01",
"from": "smitop",
"memo": "Hi, it looks like you're not voting for any witnesses. Witnesses help secure the Steem network. You should vote for some, at https://steemit.com/~witnesses, or by pressing 'Vote for witnesses' in the Steemit sidebar (top right corner). I'm a bot.",
"amount": "0.001 HBD",
"request_id": 15887
}
],
"block": 24692632,
"trx_id": "4906b0759dd5480d6e3f2e5805d9539d227f20cd",
"op_in_trx": 116,
"timestamp": "2018-08-01T17:58:54",
"virtual_op": false,
"trx_in_block": 1
}2018/07/27 07:02:39
2018/07/27 07:02:39
| body | Hello ajose01, After scatter.getIndentity, does it returns the imported public key from the created identity in scatter or something else ? |
| title | |
| author | amolm |
| permlink | re-ajose01-eos-and-scatter-part-1-20180727t070234271z |
| json metadata | {"tags":["eos"],"app":"steemit/0.1"} |
| parent author | ajose01 |
| parent permlink | eos-and-scatter-part-1 |
| Transaction Info | Block #24535997/Trx 50dadd941d2f3f20cfb030995882e06e41e8dbc4 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "Hello ajose01,\n After scatter.getIndentity, does it returns the imported public key from the created identity in scatter or something else ?",
"title": "",
"author": "amolm",
"permlink": "re-ajose01-eos-and-scatter-part-1-20180727t070234271z",
"json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}",
"parent_author": "ajose01",
"parent_permlink": "eos-and-scatter-part-1"
}
],
"block": 24535997,
"trx_id": "50dadd941d2f3f20cfb030995882e06e41e8dbc4",
"op_in_trx": 0,
"timestamp": "2018-07-27T07:02:39",
"virtual_op": false,
"trx_in_block": 4
}amolmupvoted (100.00%) @ajose01 / scatter-and-the-jungle-testnet2018/07/24 06:34:12
amolmupvoted (100.00%) @ajose01 / scatter-and-the-jungle-testnet
2018/07/24 06:34:12
| voter | amolm |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | scatter-and-the-jungle-testnet |
| Transaction Info | Block #24449122/Trx 28aa8fe8883672579c3e4b14b97b01aa11f88ac9 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "amolm",
"author": "ajose01",
"weight": 10000,
"permlink": "scatter-and-the-jungle-testnet"
}
],
"block": 24449122,
"trx_id": "28aa8fe8883672579c3e4b14b97b01aa11f88ac9",
"op_in_trx": 0,
"timestamp": "2018-07-24T06:34:12",
"virtual_op": false,
"trx_in_block": 22
}fher98upvoted (100.00%) @ajose01 / scatter-and-the-jungle-testnet2018/07/04 16:49:30
fher98upvoted (100.00%) @ajose01 / scatter-and-the-jungle-testnet
2018/07/04 16:49:30
| voter | fher98 |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | scatter-and-the-jungle-testnet |
| Transaction Info | Block #23885754/Trx 2f23b44213afdf433153321a6092ed6217eabcdf |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "fher98",
"author": "ajose01",
"weight": 10000,
"permlink": "scatter-and-the-jungle-testnet"
}
],
"block": 23885754,
"trx_id": "2f23b44213afdf433153321a6092ed6217eabcdf",
"op_in_trx": 0,
"timestamp": "2018-07-04T16:49:30",
"virtual_op": false,
"trx_in_block": 36
}mishantiupvoted (100.00%) @ajose01 / eos-and-scatter-part-12018/06/22 09:52:45
mishantiupvoted (100.00%) @ajose01 / eos-and-scatter-part-1
2018/06/22 09:52:45
| voter | mishanti |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | eos-and-scatter-part-1 |
| Transaction Info | Block #23541751/Trx c22212bdb305447f1799e9ee10e364514b8dcf25 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "mishanti",
"author": "ajose01",
"weight": 10000,
"permlink": "eos-and-scatter-part-1"
}
],
"block": 23541751,
"trx_id": "c22212bdb305447f1799e9ee10e364514b8dcf25",
"op_in_trx": 0,
"timestamp": "2018-06-22T09:52:45",
"virtual_op": false,
"trx_in_block": 29
}krulighupvoted (100.00%) @ajose01 / re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z2018/06/18 15:12:30
krulighupvoted (100.00%) @ajose01 / re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z
2018/06/18 15:12:30
| voter | kruligh |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z |
| Transaction Info | Block #23432993/Trx e7c5ec3e0ea2428eb1c24930b2ad9cee4869f9b6 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "kruligh",
"author": "ajose01",
"weight": 10000,
"permlink": "re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z"
}
],
"block": 23432993,
"trx_id": "e7c5ec3e0ea2428eb1c24930b2ad9cee4869f9b6",
"op_in_trx": 0,
"timestamp": "2018-06-18T15:12:30",
"virtual_op": false,
"trx_in_block": 36
}2018/06/14 19:17:33
2018/06/14 19:17:33
| body | Good article. I have one question. Currently i don't have eos token. After mainnet launch, I have to create account. Some KYC will be required? What will I have to do this? |
| title | |
| author | kruligh |
| permlink | re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180614t191729399z |
| json metadata | {"tags":["eos"],"app":"steemit/0.1"} |
| parent author | ajose01 |
| parent permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23322714/Trx 8c805d45f025097e82db94094d9d846337fcc01e |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "Good article. I have one question. Currently i don't have eos token. After mainnet launch, I have to create account. Some KYC will be required? What will I have to do this?",
"title": "",
"author": "kruligh",
"permlink": "re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180614t191729399z",
"json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}",
"parent_author": "ajose01",
"parent_permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23322714,
"trx_id": "8c805d45f025097e82db94094d9d846337fcc01e",
"op_in_trx": 0,
"timestamp": "2018-06-14T19:17:33",
"virtual_op": false,
"trx_in_block": 32
}2018/06/13 20:39:39
2018/06/13 20:39:39
| author | ajose01 |
| permlink | re-eosvenezuela-re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t203940786z |
| Transaction Info | Block #23295566/Virtual Operation 4294967295:19 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "ajose01",
"permlink": "re-eosvenezuela-re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t203940786z"
}
],
"block": 23295566,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 19,
"timestamp": "2018-06-13T20:39:39",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01updated payout for ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/13 06:24:27
ajose01updated payout for ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/13 06:24:27
| author | ajose01 |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23278463/Virtual Operation 4294967295:14 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "ajose01",
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23278463,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 14,
"timestamp": "2018-06-13T06:24:27",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01received 3.969 HBD reward share for ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/13 06:24:27
ajose01received 3.969 HBD reward share for ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/13 06:24:27
| author | ajose01 |
| payout | 3.969 HBD |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| author rewards | 1658 |
| total payout value | 3.071 HBD |
| curator payout value | 0.896 HBD |
| beneficiary payout value | 0.000 HBD |
| Transaction Info | Block #23278463/Virtual Operation 4294967295:13 |
View Raw JSON Data
{
"op": [
"comment_reward",
{
"author": "ajose01",
"payout": "3.969 HBD",
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer",
"author_rewards": 1658,
"total_payout_value": "3.071 HBD",
"curator_payout_value": "0.896 HBD",
"beneficiary_payout_value": "0.000 HBD"
}
],
"block": 23278463,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 13,
"timestamp": "2018-06-13T06:24:27",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01received 0.255 HIVE, 1.063 HBD, 1.038 HP author reward for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/13 06:24:27
ajose01received 0.255 HIVE, 1.063 HBD, 1.038 HP author reward for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/13 06:24:27
| author | ajose01 |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| hbd payout | 1.063 HBD |
| hive payout | 0.255 HIVE |
| vesting payout | 1684.484613 VESTS |
| payout must be claimed | true |
| curators vesting payout | 983.462669 VESTS |
| Transaction Info | Block #23278463/Virtual Operation 4294967295:12 |
View Raw JSON Data
{
"op": [
"author_reward",
{
"author": "ajose01",
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer",
"hbd_payout": "1.063 HBD",
"hive_payout": "0.255 HIVE",
"vesting_payout": "1684.484613 VESTS",
"payout_must_be_claimed": true,
"curators_vesting_payout": "983.462669 VESTS"
}
],
"block": 23278463,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 12,
"timestamp": "2018-06-13T06:24:27",
"virtual_op": true,
"trx_in_block": 4294967295
}2018/06/12 17:02:42
2018/06/12 17:02:42
| author | ajose01 |
| permlink | re-facer-re-ajose01-scatter-and-the-jungle-testnet-20180605t170243529z |
| Transaction Info | Block #23262430/Virtual Operation 4294967295:13 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "ajose01",
"permlink": "re-facer-re-ajose01-scatter-and-the-jungle-testnet-20180605t170243529z"
}
],
"block": 23262430,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 13,
"timestamp": "2018-06-12T17:02:42",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01updated payout for scatter-and-the-jungle-testnet2018/06/12 04:41:09
ajose01updated payout for scatter-and-the-jungle-testnet
2018/06/12 04:41:09
| author | ajose01 |
| permlink | scatter-and-the-jungle-testnet |
| Transaction Info | Block #23247602/Virtual Operation 4294967295:11 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "ajose01",
"permlink": "scatter-and-the-jungle-testnet"
}
],
"block": 23247602,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 11,
"timestamp": "2018-06-12T04:41:09",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01received 2.370 HBD reward share for scatter-and-the-jungle-testnet2018/06/12 04:41:09
ajose01received 2.370 HBD reward share for scatter-and-the-jungle-testnet
2018/06/12 04:41:09
| author | ajose01 |
| payout | 2.370 HBD |
| permlink | scatter-and-the-jungle-testnet |
| author rewards | 927 |
| total payout value | 1.927 HBD |
| curator payout value | 0.442 HBD |
| beneficiary payout value | 0.000 HBD |
| Transaction Info | Block #23247602/Virtual Operation 4294967295:10 |
View Raw JSON Data
{
"op": [
"comment_reward",
{
"author": "ajose01",
"payout": "2.370 HBD",
"permlink": "scatter-and-the-jungle-testnet",
"author_rewards": 927,
"total_payout_value": "1.927 HBD",
"curator_payout_value": "0.442 HBD",
"beneficiary_payout_value": "0.000 HBD"
}
],
"block": 23247602,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 10,
"timestamp": "2018-06-12T04:41:09",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01received 0.093 HIVE, 0.769 HBD, 0.581 HP author reward for @ajose01 / scatter-and-the-jungle-testnet2018/06/12 04:41:09
ajose01received 0.093 HIVE, 0.769 HBD, 0.581 HP author reward for @ajose01 / scatter-and-the-jungle-testnet
2018/06/12 04:41:09
| author | ajose01 |
| permlink | scatter-and-the-jungle-testnet |
| hbd payout | 0.769 HBD |
| hive payout | 0.093 HIVE |
| vesting payout | 942.876736 VESTS |
| payout must be claimed | true |
| curators vesting payout | 432.829191 VESTS |
| Transaction Info | Block #23247602/Virtual Operation 4294967295:9 |
View Raw JSON Data
{
"op": [
"author_reward",
{
"author": "ajose01",
"permlink": "scatter-and-the-jungle-testnet",
"hbd_payout": "0.769 HBD",
"hive_payout": "0.093 HIVE",
"vesting_payout": "942.876736 VESTS",
"payout_must_be_claimed": true,
"curators_vesting_payout": "432.829191 VESTS"
}
],
"block": 23247602,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 9,
"timestamp": "2018-06-12T04:41:09",
"virtual_op": true,
"trx_in_block": 4294967295
}pelvieroupvoted (100.00%) @ajose01 / eos-and-scatter-part-12018/06/11 10:42:21
pelvieroupvoted (100.00%) @ajose01 / eos-and-scatter-part-1
2018/06/11 10:42:21
| voter | pelviero |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | eos-and-scatter-part-1 |
| Transaction Info | Block #23226298/Trx a3aab0430f4846caa041172e66167217b203dc70 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "pelviero",
"author": "ajose01",
"weight": 10000,
"permlink": "eos-and-scatter-part-1"
}
],
"block": 23226298,
"trx_id": "a3aab0430f4846caa041172e66167217b203dc70",
"op_in_trx": 0,
"timestamp": "2018-06-11T10:42:21",
"virtual_op": false,
"trx_in_block": 31
}ajose01updated payout for re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z2018/06/08 17:38:39
ajose01updated payout for re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z
2018/06/08 17:38:39
| author | ajose01 |
| permlink | re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z |
| Transaction Info | Block #23148539/Virtual Operation 4294967295:7 |
View Raw JSON Data
{
"op": [
"comment_payout_update",
{
"author": "ajose01",
"permlink": "re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z"
}
],
"block": 23148539,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 7,
"timestamp": "2018-06-08T17:38:39",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01received 0.103 HBD reward share for re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z2018/06/08 17:38:39
ajose01received 0.103 HBD reward share for re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z
2018/06/08 17:38:39
| author | ajose01 |
| payout | 0.103 HBD |
| permlink | re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z |
| author rewards | 33 |
| total payout value | 0.076 HBD |
| curator payout value | 0.025 HBD |
| beneficiary payout value | 0.000 HBD |
| Transaction Info | Block #23148539/Virtual Operation 4294967295:6 |
View Raw JSON Data
{
"op": [
"comment_reward",
{
"author": "ajose01",
"payout": "0.103 HBD",
"permlink": "re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z",
"author_rewards": 33,
"total_payout_value": "0.076 HBD",
"curator_payout_value": "0.025 HBD",
"beneficiary_payout_value": "0.000 HBD"
}
],
"block": 23148539,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 6,
"timestamp": "2018-06-08T17:38:39",
"virtual_op": true,
"trx_in_block": 4294967295
}ajose01received 0.002 HIVE, 0.032 HBD, 0.021 HP author reward for @ajose01 / re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z2018/06/08 17:38:39
ajose01received 0.002 HIVE, 0.032 HBD, 0.021 HP author reward for @ajose01 / re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z
2018/06/08 17:38:39
| author | ajose01 |
| permlink | re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z |
| hbd payout | 0.032 HBD |
| hive payout | 0.002 HIVE |
| vesting payout | 34.551274 VESTS |
| payout must be claimed | true |
| curators vesting payout | 22.356707 VESTS |
| Transaction Info | Block #23148539/Virtual Operation 4294967295:5 |
View Raw JSON Data
{
"op": [
"author_reward",
{
"author": "ajose01",
"permlink": "re-kruligh-re-ajose01-eos-and-scatter-part-1-20180601t173840149z",
"hbd_payout": "0.032 HBD",
"hive_payout": "0.002 HIVE",
"vesting_payout": "34.551274 VESTS",
"payout_must_be_claimed": true,
"curators_vesting_payout": "22.356707 VESTS"
}
],
"block": 23148539,
"trx_id": "0000000000000000000000000000000000000000",
"op_in_trx": 5,
"timestamp": "2018-06-08T17:38:39",
"virtual_op": true,
"trx_in_block": 4294967295
}chilieceffective vote applied for @ajose01 / scatter-and-the-jungle-testnet2018/06/08 04:27:12
chilieceffective vote applied for @ajose01 / scatter-and-the-jungle-testnet
2018/06/08 04:27:12
| voter | chiliec |
| author | ajose01 |
| weight | 842 (8.42%) |
| rshares | 1765062022 |
| permlink | scatter-and-the-jungle-testnet |
| pending payout | 2.697 HBD |
| total vote weight | 866845 |
| Transaction Info | Block #23132714/Trx b5cf8cb956b699f927d3fe106a3fb309b8f90331 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "chiliec",
"author": "ajose01",
"weight": 842,
"rshares": 1765062022,
"permlink": "scatter-and-the-jungle-testnet",
"pending_payout": "2.697 HBD",
"total_vote_weight": 866845
}
],
"block": 23132714,
"trx_id": "b5cf8cb956b699f927d3fe106a3fb309b8f90331",
"op_in_trx": 1,
"timestamp": "2018-06-08T04:27:12",
"virtual_op": true,
"trx_in_block": 36
}chiliecupvoted (100.00%) @ajose01 / scatter-and-the-jungle-testnet2018/06/08 04:27:12
chiliecupvoted (100.00%) @ajose01 / scatter-and-the-jungle-testnet
2018/06/08 04:27:12
| voter | chiliec |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | scatter-and-the-jungle-testnet |
| Transaction Info | Block #23132714/Trx b5cf8cb956b699f927d3fe106a3fb309b8f90331 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "chiliec",
"author": "ajose01",
"weight": 10000,
"permlink": "scatter-and-the-jungle-testnet"
}
],
"block": 23132714,
"trx_id": "b5cf8cb956b699f927d3fe106a3fb309b8f90331",
"op_in_trx": 0,
"timestamp": "2018-06-08T04:27:12",
"virtual_op": false,
"trx_in_block": 36
}leordeveffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/08 01:29:57
leordeveffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/08 01:29:57
| voter | leordev |
| author | ajose01 |
| weight | 291 (2.91%) |
| rshares | 610992211 |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| pending payout | 5.058 HBD |
| total vote weight | 1169080 |
| Transaction Info | Block #23129170/Trx 39d4394694d77c4fb9650d2137dc2766c261afa0 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "leordev",
"author": "ajose01",
"weight": 291,
"rshares": 610992211,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer",
"pending_payout": "5.058 HBD",
"total_vote_weight": 1169080
}
],
"block": 23129170,
"trx_id": "39d4394694d77c4fb9650d2137dc2766c261afa0",
"op_in_trx": 1,
"timestamp": "2018-06-08T01:29:57",
"virtual_op": true,
"trx_in_block": 15
}leordevupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/08 01:29:57
leordevupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/08 01:29:57
| voter | leordev |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23129170/Trx 39d4394694d77c4fb9650d2137dc2766c261afa0 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "leordev",
"author": "ajose01",
"weight": 10000,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23129170,
"trx_id": "39d4394694d77c4fb9650d2137dc2766c261afa0",
"op_in_trx": 0,
"timestamp": "2018-06-08T01:29:57",
"virtual_op": false,
"trx_in_block": 15
}slavixeffective vote applied for @ajose01 / scatter-and-the-jungle-testnet2018/06/07 18:26:30
slavixeffective vote applied for @ajose01 / scatter-and-the-jungle-testnet
2018/06/07 18:26:30
| voter | slavix |
| author | ajose01 |
| weight | 272423 |
| rshares | 369093300957 |
| permlink | scatter-and-the-jungle-testnet |
| pending payout | 2.692 HBD |
| total vote weight | 866003 |
| Transaction Info | Block #23120709/Trx 08b1d496c812898311b89e3ef65fecb1608194fb |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "slavix",
"author": "ajose01",
"weight": 272423,
"rshares": 369093300957,
"permlink": "scatter-and-the-jungle-testnet",
"pending_payout": "2.692 HBD",
"total_vote_weight": 866003
}
],
"block": 23120709,
"trx_id": "08b1d496c812898311b89e3ef65fecb1608194fb",
"op_in_trx": 1,
"timestamp": "2018-06-07T18:26:30",
"virtual_op": true,
"trx_in_block": 57
}slavixupvoted (100.00%) @ajose01 / scatter-and-the-jungle-testnet2018/06/07 18:26:30
slavixupvoted (100.00%) @ajose01 / scatter-and-the-jungle-testnet
2018/06/07 18:26:30
| voter | slavix |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | scatter-and-the-jungle-testnet |
| Transaction Info | Block #23120709/Trx 08b1d496c812898311b89e3ef65fecb1608194fb |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "slavix",
"author": "ajose01",
"weight": 10000,
"permlink": "scatter-and-the-jungle-testnet"
}
],
"block": 23120709,
"trx_id": "08b1d496c812898311b89e3ef65fecb1608194fb",
"op_in_trx": 0,
"timestamp": "2018-06-07T18:26:30",
"virtual_op": false,
"trx_in_block": 57
}tomaszbeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/07 08:26:00
tomaszbeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/07 08:26:00
| voter | tomaszb |
| author | ajose01 |
| weight | 291 (2.91%) |
| rshares | 610235453 |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| pending payout | 5.147 HBD |
| total vote weight | 1168789 |
| Transaction Info | Block #23108708/Trx 831fe18be4a7aaa2dc31f708ba5848dfe668beab |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "tomaszb",
"author": "ajose01",
"weight": 291,
"rshares": 610235453,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer",
"pending_payout": "5.147 HBD",
"total_vote_weight": 1168789
}
],
"block": 23108708,
"trx_id": "831fe18be4a7aaa2dc31f708ba5848dfe668beab",
"op_in_trx": 1,
"timestamp": "2018-06-07T08:26:00",
"virtual_op": true,
"trx_in_block": 29
}tomaszbupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/07 08:26:00
tomaszbupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/07 08:26:00
| voter | tomaszb |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23108708/Trx 831fe18be4a7aaa2dc31f708ba5848dfe668beab |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "tomaszb",
"author": "ajose01",
"weight": 10000,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23108708,
"trx_id": "831fe18be4a7aaa2dc31f708ba5848dfe668beab",
"op_in_trx": 0,
"timestamp": "2018-06-07T08:26:00",
"virtual_op": false,
"trx_in_block": 29
}ne0thrilleffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/07 05:15:03
ne0thrilleffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/07 05:15:03
| voter | ne0thrill |
| author | ajose01 |
| weight | 291 (2.91%) |
| rshares | 610361074 |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| pending payout | 5.125 HBD |
| total vote weight | 1168498 |
| Transaction Info | Block #23104889/Trx 4e15bc7778d51379125e9242991f1758a8ab48ac |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "ne0thrill",
"author": "ajose01",
"weight": 291,
"rshares": 610361074,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer",
"pending_payout": "5.125 HBD",
"total_vote_weight": 1168498
}
],
"block": 23104889,
"trx_id": "4e15bc7778d51379125e9242991f1758a8ab48ac",
"op_in_trx": 1,
"timestamp": "2018-06-07T05:15:03",
"virtual_op": true,
"trx_in_block": 69
}ne0thrillupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/07 05:15:03
ne0thrillupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/07 05:15:03
| voter | ne0thrill |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23104889/Trx 4e15bc7778d51379125e9242991f1758a8ab48ac |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "ne0thrill",
"author": "ajose01",
"weight": 10000,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23104889,
"trx_id": "4e15bc7778d51379125e9242991f1758a8ab48ac",
"op_in_trx": 0,
"timestamp": "2018-06-07T05:15:03",
"virtual_op": false,
"trx_in_block": 69
}2018/06/07 01:08:15
2018/06/07 01:08:15
| body | This is great info! Thanks! I upvoted 100%. I am friends with Gustavo and Kirill. We are neighbors. I hope we cross paths soon! Check out my first blog here. Thanks! https://steemit.com/fundinggym/@fundinggym/iprn4yf1 |
| title | |
| author | fundinggym |
| permlink | re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180607t010811344z |
| json metadata | {"tags":["eos"],"links":["https://steemit.com/fundinggym/@fundinggym/iprn4yf1"],"app":"steemit/0.1"} |
| parent author | ajose01 |
| parent permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23099955/Trx e581882492d6b8dfaee8c6a0c0a4cb7e02e4dfea |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "This is great info! Thanks! I upvoted 100%.\nI am friends with Gustavo and Kirill. We are neighbors. I hope we cross paths soon!\nCheck out my first blog here. Thanks!\nhttps://steemit.com/fundinggym/@fundinggym/iprn4yf1",
"title": "",
"author": "fundinggym",
"permlink": "re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180607t010811344z",
"json_metadata": "{\"tags\":[\"eos\"],\"links\":[\"https://steemit.com/fundinggym/@fundinggym/iprn4yf1\"],\"app\":\"steemit/0.1\"}",
"parent_author": "ajose01",
"parent_permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23099955,
"trx_id": "e581882492d6b8dfaee8c6a0c0a4cb7e02e4dfea",
"op_in_trx": 0,
"timestamp": "2018-06-07T01:08:15",
"virtual_op": false,
"trx_in_block": 10
}fundinggymeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/07 01:06:36
fundinggymeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/07 01:06:36
| voter | fundinggym |
| author | ajose01 |
| weight | 244503 |
| rshares | 512758375771 |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| pending payout | 5.104 HBD |
| total vote weight | 1168207 |
| Transaction Info | Block #23099922/Trx 36add1efe19e64209ee4018912e4548eb875f2b1 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "fundinggym",
"author": "ajose01",
"weight": 244503,
"rshares": 512758375771,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer",
"pending_payout": "5.104 HBD",
"total_vote_weight": 1168207
}
],
"block": 23099922,
"trx_id": "36add1efe19e64209ee4018912e4548eb875f2b1",
"op_in_trx": 1,
"timestamp": "2018-06-07T01:06:36",
"virtual_op": true,
"trx_in_block": 9
}fundinggymupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/07 01:06:36
fundinggymupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/07 01:06:36
| voter | fundinggym |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23099922/Trx 36add1efe19e64209ee4018912e4548eb875f2b1 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "fundinggym",
"author": "ajose01",
"weight": 10000,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23099922,
"trx_id": "36add1efe19e64209ee4018912e4548eb875f2b1",
"op_in_trx": 0,
"timestamp": "2018-06-07T01:06:36",
"virtual_op": false,
"trx_in_block": 9
}2018/06/06 20:39:57
2018/06/06 20:39:57
| body | Hola amigos! 🇲🇽👋🇻🇪 |
| title | |
| author | ajose01 |
| permlink | re-eosvenezuela-re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t203940786z |
| json metadata | {"tags":["eos"],"app":"steemit/0.1"} |
| parent author | eosvenezuela |
| parent permlink | re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t191741048z |
| Transaction Info | Block #23094589/Trx 8d276621d30b36523e88e9fbd308e122ee682da6 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "Hola amigos! 🇲🇽👋🇻🇪",
"title": "",
"author": "ajose01",
"permlink": "re-eosvenezuela-re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t203940786z",
"json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}",
"parent_author": "eosvenezuela",
"parent_permlink": "re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t191741048z"
}
],
"block": 23094589,
"trx_id": "8d276621d30b36523e88e9fbd308e122ee682da6",
"op_in_trx": 0,
"timestamp": "2018-06-06T20:39:57",
"virtual_op": false,
"trx_in_block": 41
}2018/06/06 20:39:42
2018/06/06 20:39:42
| body | Hola amigos! 🇲🇽 |
| title | |
| author | ajose01 |
| permlink | re-eosvenezuela-re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t203940786z |
| json metadata | {"tags":["eos"],"app":"steemit/0.1"} |
| parent author | eosvenezuela |
| parent permlink | re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t191741048z |
| Transaction Info | Block #23094584/Trx 38a797c28fd9ce3070f524e44afd71521f5ee6a8 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "Hola amigos! 🇲🇽",
"title": "",
"author": "ajose01",
"permlink": "re-eosvenezuela-re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t203940786z",
"json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}",
"parent_author": "eosvenezuela",
"parent_permlink": "re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t191741048z"
}
],
"block": 23094584,
"trx_id": "38a797c28fd9ce3070f524e44afd71521f5ee6a8",
"op_in_trx": 0,
"timestamp": "2018-06-06T20:39:42",
"virtual_op": false,
"trx_in_block": 40
}2018/06/06 19:17:45
2018/06/06 19:17:45
| body | Great post @ajose01. Greetings from #EOSVenezuela https://s33.postimg.cc/nnqmdgzwf/instagram_format_32.jpg |
| title | |
| author | eosvenezuela |
| permlink | re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t191741048z |
| json metadata | {"tags":["eos","eosvenezuela"],"users":["ajose01"],"image":["https://s33.postimg.cc/nnqmdgzwf/instagram_format_32.jpg"],"app":"steemit/0.1"} |
| parent author | ajose01 |
| parent permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23092945/Trx c1b6960a13110f408ffd7c48c9c10e9b0391a0af |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "Great post @ajose01. Greetings from #EOSVenezuela \n\nhttps://s33.postimg.cc/nnqmdgzwf/instagram_format_32.jpg",
"title": "",
"author": "eosvenezuela",
"permlink": "re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t191741048z",
"json_metadata": "{\"tags\":[\"eos\",\"eosvenezuela\"],\"users\":[\"ajose01\"],\"image\":[\"https://s33.postimg.cc/nnqmdgzwf/instagram_format_32.jpg\"],\"app\":\"steemit/0.1\"}",
"parent_author": "ajose01",
"parent_permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23092945,
"trx_id": "c1b6960a13110f408ffd7c48c9c10e9b0391a0af",
"op_in_trx": 0,
"timestamp": "2018-06-06T19:17:45",
"virtual_op": false,
"trx_in_block": 8
}eosvenezuelaeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/06 19:17:24
eosvenezuelaeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/06 19:17:24
| voter | eosvenezuela |
| author | ajose01 |
| weight | 155 (1.55%) |
| rshares | 326506690 |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| pending payout | 3.161 HBD |
| total vote weight | 923704 |
| Transaction Info | Block #23092938/Trx c860e3c3fa14f1326286c289e1de8c6c74694a28 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "eosvenezuela",
"author": "ajose01",
"weight": 155,
"rshares": 326506690,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer",
"pending_payout": "3.161 HBD",
"total_vote_weight": 923704
}
],
"block": 23092938,
"trx_id": "c860e3c3fa14f1326286c289e1de8c6c74694a28",
"op_in_trx": 1,
"timestamp": "2018-06-06T19:17:24",
"virtual_op": true,
"trx_in_block": 22
}eosvenezuelaupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/06 19:17:24
eosvenezuelaupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/06 19:17:24
| voter | eosvenezuela |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23092938/Trx c860e3c3fa14f1326286c289e1de8c6c74694a28 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "eosvenezuela",
"author": "ajose01",
"weight": 10000,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23092938,
"trx_id": "c860e3c3fa14f1326286c289e1de8c6c74694a28",
"op_in_trx": 0,
"timestamp": "2018-06-06T19:17:24",
"virtual_op": false,
"trx_in_block": 22
}mariusfebruaryeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/06 14:52:39
mariusfebruaryeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/06 14:52:39
| voter | mariusfebruary |
| author | ajose01 |
| weight | 699783 |
| rshares | 788712979122 |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| pending payout | 3.192 HBD |
| total vote weight | 923549 |
| Transaction Info | Block #23087644/Trx 2f325661044ce48b75588f1c87751c109cfb93a1 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "mariusfebruary",
"author": "ajose01",
"weight": 699783,
"rshares": 788712979122,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer",
"pending_payout": "3.192 HBD",
"total_vote_weight": 923549
}
],
"block": 23087644,
"trx_id": "2f325661044ce48b75588f1c87751c109cfb93a1",
"op_in_trx": 1,
"timestamp": "2018-06-06T14:52:39",
"virtual_op": true,
"trx_in_block": 78
}mariusfebruaryupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/06 14:52:39
mariusfebruaryupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/06 14:52:39
| voter | mariusfebruary |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23087644/Trx 2f325661044ce48b75588f1c87751c109cfb93a1 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "mariusfebruary",
"author": "ajose01",
"weight": 10000,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23087644,
"trx_id": "2f325661044ce48b75588f1c87751c109cfb93a1",
"op_in_trx": 0,
"timestamp": "2018-06-06T14:52:39",
"virtual_op": false,
"trx_in_block": 78
}antimeticaeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/06 08:16:39
antimeticaeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/06 08:16:39
| voter | antimetica |
| author | ajose01 |
| weight | 3238 (32.38%) |
| rshares | 1697808322 |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| pending payout | 0.186 HBD |
| total vote weight | 223766 |
| Transaction Info | Block #23079725/Trx 8e3a1e8f0536810b5c10be5ec86196f9e38b91d7 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "antimetica",
"author": "ajose01",
"weight": 3238,
"rshares": 1697808322,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer",
"pending_payout": "0.186 HBD",
"total_vote_weight": 223766
}
],
"block": 23079725,
"trx_id": "8e3a1e8f0536810b5c10be5ec86196f9e38b91d7",
"op_in_trx": 1,
"timestamp": "2018-06-06T08:16:39",
"virtual_op": true,
"trx_in_block": 22
}antimeticaupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/06 08:16:39
antimeticaupvoted (100.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/06 08:16:39
| voter | antimetica |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23079725/Trx 8e3a1e8f0536810b5c10be5ec86196f9e38b91d7 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "antimetica",
"author": "ajose01",
"weight": 10000,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23079725,
"trx_id": "8e3a1e8f0536810b5c10be5ec86196f9e38b91d7",
"op_in_trx": 0,
"timestamp": "2018-06-06T08:16:39",
"virtual_op": false,
"trx_in_block": 22
}2018/06/06 07:52:06
2018/06/06 07:52:06
| body | thats gives a good understanding why generating key pairs wasnt working on scatter & always gave the error.. "no account" |
| title | |
| author | ivrmakers |
| permlink | re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t075200104z |
| json metadata | {"tags":["eos"],"app":"steemit/0.1"} |
| parent author | ajose01 |
| parent permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23079234/Trx d1cb65caeb5011d27c7a3bbc8b6fbbcd244c0a88 |
View Raw JSON Data
{
"op": [
"comment",
{
"body": "thats gives a good understanding why generating key pairs wasnt working on scatter & always gave the error.. \"no account\"",
"title": "",
"author": "ivrmakers",
"permlink": "re-ajose01-ethereum-addresses-vs-eos-accounts-a-long-ish-explainer-20180606t075200104z",
"json_metadata": "{\"tags\":[\"eos\"],\"app\":\"steemit/0.1\"}",
"parent_author": "ajose01",
"parent_permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23079234,
"trx_id": "d1cb65caeb5011d27c7a3bbc8b6fbbcd244c0a88",
"op_in_trx": 0,
"timestamp": "2018-06-06T07:52:06",
"virtual_op": false,
"trx_in_block": 68
}ivrmakerseffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/06 07:44:57
ivrmakerseffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/06 07:44:57
| voter | ivrmakers |
| author | ajose01 |
| weight | 9853 (98.53%) |
| rshares | 5165847292 |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| pending payout | 0.180 HBD |
| total vote weight | 220528 |
| Transaction Info | Block #23079091/Trx 665bf842fe4868cb8e2ae939a19ec4735892b997 |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "ivrmakers",
"author": "ajose01",
"weight": 9853,
"rshares": 5165847292,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer",
"pending_payout": "0.180 HBD",
"total_vote_weight": 220528
}
],
"block": 23079091,
"trx_id": "665bf842fe4868cb8e2ae939a19ec4735892b997",
"op_in_trx": 1,
"timestamp": "2018-06-06T07:44:57",
"virtual_op": true,
"trx_in_block": 28
}ivrmakersupvoted (33.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/06 07:44:57
ivrmakersupvoted (33.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/06 07:44:57
| voter | ivrmakers |
| author | ajose01 |
| weight | 3300 (33.00%) |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23079091/Trx 665bf842fe4868cb8e2ae939a19ec4735892b997 |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "ivrmakers",
"author": "ajose01",
"weight": 3300,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23079091,
"trx_id": "665bf842fe4868cb8e2ae939a19ec4735892b997",
"op_in_trx": 0,
"timestamp": "2018-06-06T07:44:57",
"virtual_op": false,
"trx_in_block": 28
}anomalyeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/06 06:56:30
anomalyeffective vote applied for @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/06 06:56:30
| voter | anomaly |
| author | ajose01 |
| weight | 444 (4.44%) |
| rshares | 232382246 |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| pending payout | 0.160 HBD |
| total vote weight | 210675 |
| Transaction Info | Block #23078122/Trx c263202440df48877afec4b9d4e89d6142489c8b |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "anomaly",
"author": "ajose01",
"weight": 444,
"rshares": 232382246,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer",
"pending_payout": "0.160 HBD",
"total_vote_weight": 210675
}
],
"block": 23078122,
"trx_id": "c263202440df48877afec4b9d4e89d6142489c8b",
"op_in_trx": 1,
"timestamp": "2018-06-06T06:56:30",
"virtual_op": true,
"trx_in_block": 73
}anomalyupvoted (1.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer2018/06/06 06:56:30
anomalyupvoted (1.00%) @ajose01 / ethereum-addresses-vs-eos-accounts-a-long-ish-explainer
2018/06/06 06:56:30
| voter | anomaly |
| author | ajose01 |
| weight | 100 (1.00%) |
| permlink | ethereum-addresses-vs-eos-accounts-a-long-ish-explainer |
| Transaction Info | Block #23078122/Trx c263202440df48877afec4b9d4e89d6142489c8b |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "anomaly",
"author": "ajose01",
"weight": 100,
"permlink": "ethereum-addresses-vs-eos-accounts-a-long-ish-explainer"
}
],
"block": 23078122,
"trx_id": "c263202440df48877afec4b9d4e89d6142489c8b",
"op_in_trx": 0,
"timestamp": "2018-06-06T06:56:30",
"virtual_op": false,
"trx_in_block": 73
}virtualgrowtheffective vote applied for @ajose01 / scatter-and-the-jungle-testnet2018/06/06 06:41:18
virtualgrowtheffective vote applied for @ajose01 / scatter-and-the-jungle-testnet
2018/06/06 06:41:18
| voter | virtualgrowth |
| author | ajose01 |
| weight | 34868 |
| rshares | 36561401000 |
| permlink | scatter-and-the-jungle-testnet |
| pending payout | 1.336 HBD |
| total vote weight | 593580 |
| Transaction Info | Block #23077818/Trx 035c002d7ac13d3530020fd4fd636e800d72b53e |
View Raw JSON Data
{
"op": [
"effective_comment_vote",
{
"voter": "virtualgrowth",
"author": "ajose01",
"weight": 34868,
"rshares": 36561401000,
"permlink": "scatter-and-the-jungle-testnet",
"pending_payout": "1.336 HBD",
"total_vote_weight": 593580
}
],
"block": 23077818,
"trx_id": "035c002d7ac13d3530020fd4fd636e800d72b53e",
"op_in_trx": 1,
"timestamp": "2018-06-06T06:41:18",
"virtual_op": true,
"trx_in_block": 21
}virtualgrowthupvoted (100.00%) @ajose01 / scatter-and-the-jungle-testnet2018/06/06 06:41:18
virtualgrowthupvoted (100.00%) @ajose01 / scatter-and-the-jungle-testnet
2018/06/06 06:41:18
| voter | virtualgrowth |
| author | ajose01 |
| weight | 10000 (100.00%) |
| permlink | scatter-and-the-jungle-testnet |
| Transaction Info | Block #23077818/Trx 035c002d7ac13d3530020fd4fd636e800d72b53e |
View Raw JSON Data
{
"op": [
"vote",
{
"voter": "virtualgrowth",
"author": "ajose01",
"weight": 10000,
"permlink": "scatter-and-the-jungle-testnet"
}
],
"block": 23077818,
"trx_id": "035c002d7ac13d3530020fd4fd636e800d72b53e",
"op_in_trx": 0,
"timestamp": "2018-06-06T06:41:18",
"virtual_op": false,
"trx_in_block": 21
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress0.00%
{
"voting_manabar": {
"current_mana": 29393378778,
"last_update_time": 1555054128
},
"downvote_manabar": {
"current_mana": 0,
"last_update_time": 1525719147
},
"rc_account": {
"account": "ajose01",
"delegated_rc": 0,
"max_rc": 31414127751,
"max_rc_creation_adjustment": {
"amount": "2020748973",
"nai": "@@000000037",
"precision": 6
},
"rc_manabar": {
"current_mana": 24067113184,
"last_update_time": 1555054215
},
"received_delegated_rc": 0
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"profile_image":"https://steemitimages.com/DQmQKiEhpoZV9oVgEMpkFji1M8CxVsaUQ7qSki3HhZkuVZQ/angel_social.JPG","name":"Angel Jose","about":"Blockchain / bot builder / engineering lead for @sensay / http://makesense.com . Exploring crypto, blockchains and bots :) #EOS_IO $SENSE"} |
| JSON METADATA | |
| profile | {"profile_image":"https://steemitimages.com/DQmQKiEhpoZV9oVgEMpkFji1M8CxVsaUQ7qSki3HhZkuVZQ/angel_social.JPG","name":"Angel Jose","about":"Blockchain / bot builder / engineering lead for @sensay / http://makesense.com . Exploring crypto, blockchains and bots :) #EOS_IO $SENSE"} |
{
"posting_json_metadata": {
"profile": {
"profile_image": "https://steemitimages.com/DQmQKiEhpoZV9oVgEMpkFji1M8CxVsaUQ7qSki3HhZkuVZQ/angel_social.JPG",
"name": "Angel Jose",
"about": "Blockchain / bot builder / engineering lead for @sensay / http://makesense.com . Exploring crypto, blockchains and bots :) #EOS_IO $SENSE"
}
},
"json_metadata": {
"profile": {
"profile_image": "https://steemitimages.com/DQmQKiEhpoZV9oVgEMpkFji1M8CxVsaUQ7qSki3HhZkuVZQ/angel_social.JPG",
"name": "Angel Jose",
"about": "Blockchain / bot builder / engineering lead for @sensay / http://makesense.com . Exploring crypto, blockchains and bots :) #EOS_IO $SENSE"
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM7wd6bDHaccjZtVcEh4MRby2qkv23sWR5XXrVyynLabG7uHackF1/1
Active
Single Signature
Public Keys
STM5cb2xX7FRdEZvwUBLsJvTVkzieSDpStJbF16T2g4BxF9WFSxZi1/1
Posting
Single Signature
Public Keys
STM7e2edM8YhV6vM6zASK33AGXCWijwvexKYvnsrXzMjcKjJiw5Qm1/1
App Permissions
@dlive.app1/1
Memo
STM6yYFUmm4tg74FNeZ5QMioTq45hyuhvW9opk4cEZ3UYpZStWLac
{
"owner": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM7wd6bDHaccjZtVcEh4MRby2qkv23sWR5XXrVyynLabG7uHackF",
1
]
]
},
"active": {
"weight_threshold": 1,
"account_auths": [],
"key_auths": [
[
"STM5cb2xX7FRdEZvwUBLsJvTVkzieSDpStJbF16T2g4BxF9WFSxZi",
1
]
]
},
"posting": {
"weight_threshold": 1,
"account_auths": [
[
"dlive.app",
1
]
],
"key_auths": [
[
"STM7e2edM8YhV6vM6zASK33AGXCWijwvexKYvnsrXzMjcKjJiw5Qm",
1
]
]
},
"memo": "STM6yYFUmm4tg74FNeZ5QMioTq45hyuhvW9opk4cEZ3UYpZStWLac"
}Witness Votes
0 / 30
No active witness votes.
[]