SHARE
TWEET

Scam or legit? Metronome [ENG/RU]

c1s0r Jul 12th, 2018 56 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # ENG
  2. The contract and all its possibilities are regulated by just **one** address that decides which address will have the **Validator**, **СhainLedger**, and **TokenPorter**.
  3.  
  4. # Overview
  5. We checked up on all the the parts that half a year ago we found questionable, when we first heard about the project.
  6.  
  7. We analized current smart contracts from Etherscan.
  8.  
  9. # Smart contracts
  10. The **Validator** contract can:
  11. - Set a **TokenPorter** for itself
  12. - Set new validators that will decide whether to create a cross-chain exchange or not (can be executed by the owner)
  13. - Delete old validators
  14.  
  15. Current **Validator**:
  16. - https://etherscan.io/address/0xa5474b3ee0f86f75528b525c37440d61665f93c4
  17.  
  18. (screenshot 1)
  19.  
  20. **3 VALIDATORS ARE HARD CODED!!!**
  21.  
  22. These are:
  23.  
  24. - https://etherscan.io/address/0x006b24a61f8391357d9cc00d9b191de6439e9df7
  25. - https://etherscan.io/address/0x92c6324947f5e4ed2b7f6b94270bc48b33621365
  26. - https://etherscan.io/address/0x2b448e4d78293f1c6fc47230306d6297cabb5f46
  27.  
  28. The **TokenPorter** contract can:
  29. - Set **Validator** for itself
  30. - Set **ChainLedger** for itself
  31. - Import MET
  32. - Export MET
  33.  
  34. Current **TokenPorter**:
  35. - https://etherscan.io/address/0xd75a3e27ce57bb7738d3b0c47b88f76f423eb056
  36.  
  37. (screenshot 2)
  38.  
  39. The **chainLedger** contract can register (functions can be executed by the owner without any verifications nor voting):
  40. - new Chain
  41. - export
  42. - import
  43.  
  44. Current **ChainLedger**:
  45.  
  46. - https://etherscan.io/address/0x3f559999d3cd004dfc23db22c9c24ff24d88afee
  47.  
  48. (screenshot 3)
  49.  
  50. Current **Proceeds** (balance of ~$11,185,783.55):
  51.  
  52. - https://etherscan.io/address/0x68c4b7d05fae45bcb6192bb93e246c77e98360e1
  53.  
  54. In every contract, the **creator** indicated the following address:
  55. - https://etherscan.io/address/0x92da8f5c7f4dc96a080b5d4e8183c1bf6510ae18
  56.  
  57. Current **Owner** of all contracts:
  58. - https://etherscan.io/address/0x98579428140acad902f30ea2731a49396cb0284f
  59.  
  60. The most important and most questionable part of this project are the cross-chain operations.
  61.  
  62. Executing via Exporting/Importing MET.
  63.  
  64. ## Export algorithm
  65. - The main smart contract launches the the export function in the TokenPorter contract (TokenPorter is used like a library)
  66. - The tokens are destroyed in the current blockchain
  67. - The number of tokens, wallet address, and the deleted chain address are added to the claimables list (this info is only used in the claimReceivables funciton, which shows that the tokens destroyed in the old blockchain are recreated in the new one - but this function is not executed anywhere...)
  68. - A hash is formed into which a bunch of parameters are recorded, along with timestamps, number of tokens to transfer, total number of tokens in the network, currentTick, previous hash, etc.
  69. - Hash is recorded into exportedBurns
  70. - chainLedger register the Export (just chekcks both the current and remote chains for validity and that's it)
  71.  
  72. ## Import algorithm
  73. - The main smart contract launches the import function in the TokenPorter contract
  74. - In the Validator contract there is a verification of isReceiptClaimable
  75.     - All the parameters hashed as well as the previous and current hash go here
  76.     - If the current hash matches the hash of all these parameters, the verification continues
  77.     - If hashClaimable(current hash) - OK (if the hash is not hashClaimed, the smart contract checks if enough verificators: verificators=3, threshold=2). The voting is manual, without any algorithms. Each verificator simply votes YES or NO.
  78. - Execution of claimHash(_burnHashes[1] current hash) (if hashClaimable(current hash) then hashClaimed = true for the current hash)
  79. - Checking the number of tokens (tokens to import)+(tokens in the system) <= (all issued tokens)
  80. - For the first import, prepare auction when first import is done on a non ETH chain
  81. - New tokens are created and added to the new address in the new blockchain
  82. - chainLedger registeres the Import (just checks the current and remote chains for validity)
  83.  
  84. # So what do we get out of all this?
  85. It's bad to have all three verificators hard coded. Especially since they are set by one person (rather than some autonomous algorithm). Btw, the White Paper barely talks about the verificators... Verificators in turn vote not via some advanced algorithm but rather via "approve/not approve." This results in the centralization of the entire system - thus diverging from the project's own goals.
  86.  
  87. There is no autonomy nor decentralization. Instead, they have **automatization** and **centralization** of governance. So the question is - why the fuck do they need a blockchain for this?
  88.  
  89. Everything can be regulated by **one** person.
  90.  
  91. That **one** person solely decides which smart contract is responsible for which operations. He can replace current contracts with other ones - with completely different logic and at any time.
  92.  
  93. There are no consensus algorithm that would - in a decentralized manner and without human interference - verify and execute cross-chain transactions.
  94.  
  95. **Auction and Autonomous Converter**
  96.  
  97. If the token price in the сonverter is lower than in the auction, people will most likely buy the tokens in the сonverter.
  98.  
  99. If the price is lower in the auction, people will buy the tokens there and then dump them onto the сonverter with a profit.
  100.  
  101. Thus, the **auction** and **сonverter** will cancel each other out in favor of keeping the price more or less stable.
  102.  
  103. But this just looks like exchanging funds for the sake of the exchange - someone will make money, someone will lose it.
  104.  
  105. The exchange rate is determined via two formulas:
  106.  
  107. (screenshot 4)
  108.  
  109. (screenshot 5)
  110.  
  111. If we want to sell 100 MET for ETH. Here's how it works:
  112.  
  113. - MET tokens are exchanged for smart-tokens. (Smart-tokens are an intermediary currency; their number of 10,000 tokens listed as an example in the White Paper is not explained in any way.)
  114. - Smart-tokens are exchanged for ETH.
  115.  
  116. If the **сonverter** has 1,000 ETH, 2,000 MET, and 10,000 smart-tokens, the price will accordingly be 1 MET = 0.5 ETH (1000/2000).
  117.  
  118. For 100 MET we expect to receive 50 ETH. According to formulas, we actually receive 47 ETH. 3 ETH remain in the smart contract. Consider them a commission (with the goal there to gather enough liquidity for a convenient exchange of funds).
  119.  
  120. After that operation is performed, 953 ETH and 2100 MET will remain in the contract -> the exchange rate will be 1 MET = 0.4538095238095238 ETH (953/2100)
  121.  
  122. # Couple of examples
  123. Let's assume that the owner was tortured via a thermorectal cryptoanalizer and gave up all passwords for everything. Via the changeOwnership function, the hackers will change the owner in the main contract-token (using the owner's wallet and hence his address) and will control all the contracts they want to control.
  124.  
  125. Or the owner himself decides to go rogue - remember, the owner of all contracts is the same address.
  126.  
  127. Or this can be done via the setTokenPorter function in the Validator contract, which sets the new TokenPorter. The new TokenPorter can have an absolutely new logic of processing old functions.
  128.  
  129. Thus, the export and import functions for MET could be modified. All the verifications will be removed. Exporting will burn MET, while importing will add MET to the owner's address.
  130.  
  131. # Conclusion
  132. So they just happened to forget to mention their centralization? Plus, feels like they deliberately overcomplicated (or even hid) the principles of the workings and logic of their smart contracts.
  133.  
  134. But the smart contracts themselves are written, work has been done, the coin is being traded.
  135.  
  136. # Verdict
  137. Scam!
  138.  
  139.  
  140. # RU
  141. Ситуация следующая. Контракт и все его возможности регулируются **одним** адресом.
  142. Данный адрес решает по какому адресу будет находится смарт-контракт **Validator**, **СhainLedger** и **TokenPorter**.
  143.  
  144. # Overview
  145. Мы перепроверили спорные моменты в Metronome, которые нам не понравились еще пол года назад, когда мы впервые узнали про этот проект.
  146.  
  147. Проанализировали действующие смарт-контракты с etherscan.
  148.  
  149. # Smart contracts
  150. Контракт **Validator** может:
  151. - назначать себе **TokenPorter**
  152. - задавать новых валидаторов, которые будут решать - производить кроссчейн обмен или нет (может вызваться овнером)
  153. - удалять старых валидаторов
  154.  
  155. Текущий **Validator**:
  156. - https://etherscan.io/address/0xa5474b3ee0f86f75528b525c37440d61665f93c4
  157.  
  158. (скриншот 1)
  159.  
  160. **ЗАХАРДКОЖЕНО ТРИ ВАЛИДАТОРА!!!**
  161.  
  162. Собственно сами валидаторы:
  163.  
  164. - https://etherscan.io/address/0x006b24a61f8391357d9cc00d9b191de6439e9df7
  165. - https://etherscan.io/address/0x92c6324947f5e4ed2b7f6b94270bc48b33621365
  166. - https://etherscan.io/address/0x2b448e4d78293f1c6fc47230306d6297cabb5f46
  167.  
  168. Контракт **TokenPorter** может:
  169. - назначать себе **Validator**
  170. - назначать себе **ChainLedger**
  171. - импортировать MET
  172. - экспортировать MET
  173.  
  174. Текущий **TokenPorter**:
  175. - https://etherscan.io/address/0xd75a3e27ce57bb7738d3b0c47b88f76f423eb056
  176.  
  177. (скриншот 2)
  178.  
  179. Контракт **chainLedger** может регистрировать (функции могут быть вызваны овнером, без проверок или голосований):
  180. - новый Чейн
  181. - экспорт
  182. - импорт
  183.  
  184. Текущий **ChainLedger**:
  185.  
  186. - https://etherscan.io/address/0x3f559999d3cd004dfc23db22c9c24ff24d88afee
  187.  
  188. (скриншот 3)
  189.  
  190. Текущий **Proceeds** (~$11,185,783.55 на счету):
  191.  
  192. - https://etherscan.io/address/0x68c4b7d05fae45bcb6192bb93e246c77e98360e1
  193.  
  194. Во всех контрактах **создателем** указан этот адрес:
  195. - https://etherscan.io/address/0x92da8f5c7f4dc96a080b5d4e8183c1bf6510ae18
  196.  
  197. Текущий **Owner** всех контрактов:
  198. - https://etherscan.io/address/0x98579428140acad902f30ea2731a49396cb0284f
  199.  
  200. Самая важная и спорная часть - кроссчейн операции.
  201. Производятся с помощью Экспорта Импорта MET.
  202.  
  203. ## Алгоритм экспорта
  204. - главный смарт-контракт запускает экспорт в контракте TokenPorter (TokenPorter - используется как библиотека)
  205. - токены уничтожаются в текущем блокчейне
  206. - в список claimables складываются количество токенов, адрес кошелька, адрес удаленного чейна (эти данные используются только в функции claimReceivables, которая укажет, что уничтоженные токены в старом блокчейне были воссозданны в новом. Но она нигде не вызывается...)
  207. - формируется хэш в который записывается куча параметров, таймштампы, количество токенов для передачи, общее количество токенов в системе, текущий тик, предыдущий хэш и т.п.
  208. - хэш записывается в exportedBurns
  209. - chainLedger регистрирует Экспорт (просто проверяет на валидность текущий и удаленный чейн и всё)
  210.  
  211. ## Алгоритм импорта
  212. - главный смарт-контракт запускает импорт в контракте TokenPorter
  213. - в контракте Validator проходит проверка isReceiptClaimable
  214.     - сюда летят все параметры которые хэшировались + предыдущий и текущий хэши
  215.     - если текущий хэш совпадает с хэшом всех этих параметров то проверка продолжается
  216.     - если hashClaimable(текущих хэш) то ОК (если хэш не hashClaimed то проверяется, чтобы за хэш проголосовало достаточно верификаторов (verificators=3, threshold=2) голосование вручную, без каких-либо алгоритмов. просто верификатор дает голос ЗА или ПРОТИВ)
  217. - вызов claimHash(_burnHashes[1] текущий хэш) (если hashClaimable(текущий хэш) то ставим hashClaimed = true для текущего хэша)
  218. - проверка количества токенов. (токены для импорта)+(токены в системе) <= (всех произведенных токенов)
  219. - во время первого импорта prepare auction when first import is done on a non ETH chain
  220. - производятся новые токены и начисляются на новый адрес в новом блокчейне
  221. - chainLedger регестрирует Импорт (просто проверяет на валидность текущий и удаленный чейн и всё)
  222.  
  223. # Что мы имеем?
  224. Захардкоженность трех верификаторов - это плохо. Причем этих верификаторов назначает 1 человек, а не какой-нибудь автономный алгоритм. В ВП, кстати, про верификаторов написано очень поверхностно... Сами верификаторы голосуют не по хитрому алгоритму, а просто "одобрил\не одобрил". Как следствие централизованность всей системы и несоответствие своим же целям у проекта.
  225.  
  226. Автономности и децентрализованности - нет. Вместо этого здесь **автоматизация** и **централизованное** управление. Вопрос - нахрена тут блокчейн?
  227.  
  228. Всё может регулироваться **одним** человеком.
  229.  
  230. Этот **один** человек сам решает, какой смарт-контракт отвечает за какие операции. Он может заменять текущие контракты другими, с любой другой логикой, в любой момент.  
  231.  
  232. Нет алгоритма консенсуса, который бы децентрализовано и без участия людей позволил бы верифицировать, проводить кроссчейн операции.
  233.  
  234. **Аукцион и Обменник**
  235.  
  236. Если цена на токен в обменнике меншье чем на аукционе - скоей всего все будут скупать токены с обменника.
  237.  
  238. Если цена на аукционе будет меньше чем в обменнике - все будут стараться скупить токены через аукцион и далее скинуть их в обменнике по выгодной цене.
  239.  
  240. Взаимоисключающие **аукцион** и **обменник** будут постоянно держать цену на более менее стабильном уровне.
  241.  
  242. Но выглядит это как обмен ради обмена и ничего больше. Т.е. кто-то потеряет деньги, а кто-то получит эти потерянные деньги.
  243.  
  244. Курс в обменнике определяется двумя формулами.
  245.  
  246. (скриншот 4)
  247.  
  248. (скриншот 5)
  249.  
  250. Если мы хотим продать 100 MET за эфир. Принцип следующий:
  251.  
  252. - MET токены меняются на смарт-токены. (Смарт токены - промежуточная валюта для обмена, их количество (10,000) в ВП для примера взято без пояснений)
  253. - Смарт токены меняются на ETH
  254.  
  255. Если в смарт-контракте обменнике нахиодится 1000 ETH, 2000 MET и 10,000 смарт-токенов, то цена будет соответствующей 1 MET = 0.5 ETH (1000/2000)
  256.  
  257. Для 100 MET мы ожидаем получить 50 ETH, согласно формулам, мы получим 47 ETH. 3 ETH остаются в смарт-контракте. Их можно расценивать как комиссию (цель - набрать ликвид для удобного обмена).
  258.  
  259. После данной операции в контракте останутся  953 ETH и 2100 MET -> курс будет 1 MET = 0,4538095238095238 ETH (953/2100)
  260.  
  261. # Пару примеров
  262. Предположим, овнер сдался под напором терморектального криптоанализатора и выдал все пароли от всего подряд. Через функцию changeOwnership в главном контракте-токене хацкеры с его кошельком, на котором будет адрес овнера, сменят овнера и будут рулить всеми контрактами как им вздумается.
  263. Ну или он сам так решит, во всех контрактах овнер - это один и тот же адрес.
  264.  
  265. Или через функцию setTokenPorter в контракте Validator, которая задает новый TokenPorter. В новом TokenPorter может быть абсолютно другая логика обработки старых функций.
  266. Так функции эксопрт импорт MET могут быть модифицированны. Все проверки будут убраны. При экспорте будут сгорать MET, а при импорте они будут зачисляться на адрес овнера.
  267.  
  268. # Conclusion
  269. Недосказанность в виде централизации, а так же специального запутывания принципов работы и логики смартконтрактов.
  270.  
  271. Но сами смарт-контракты написаны, работа проделана, монета торгуется.
  272.  
  273. # Verdict
  274. Scam!
  275.  
  276. _**Disclaimer:** The above audit is not in any way financial advice or a solicitation to buy - it's merely our collective opinion that we are kind enough to share with you. Don't make us regret that._
  277.  
  278. **Our links:**
  279.  
  280. - https://t.me/c1s0r
  281. - https://twitter.com/c1s0r
  282. - https://medium.com/@c1s0r
  283. - https://steemit.com/@c1s0r
  284. - https://golos.io/@c1s0r
  285. - https://pastebin.com/u/c1s0r
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top