mirror of
https://github.com/tendermint/tendermint.git
synced 2026-02-04 02:52:07 +00:00
235 lines
125 KiB
HTML
235 lines
125 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en-US">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>Method and Types | Tendermint Core</title>
|
||
<meta name="generator" content="VuePress 1.9.7">
|
||
|
||
<meta name="description" content="">
|
||
|
||
<link rel="preload" href="/master/assets/css/0.styles.3ed5e0a6.css" as="style"><link rel="preload" href="/master/assets/js/app.d8230444.js" as="script"><link rel="preload" href="/master/assets/js/24.7da7f2cf.js" as="script"><link rel="preload" href="/master/assets/js/21.92fb7737.js" as="script"><link rel="preload" href="/master/assets/js/44.a966f787.js" as="script"><link rel="preload" href="/master/assets/js/19.a758649d.js" as="script"><link rel="preload" href="/master/assets/js/66.1a996a52.js" as="script"><link rel="preload" href="/master/assets/js/64.602a26f4.js" as="script"><link rel="preload" href="/master/assets/js/65.224ad1ec.js" as="script"><link rel="preload" href="/master/assets/js/25.c1f919e6.js" as="script"><link rel="preload" href="/master/assets/js/56.714e246c.js" as="script"><link rel="preload" href="/master/assets/js/62.c200562d.js" as="script"><link rel="preload" href="/master/assets/js/40.bbfd2b95.js" as="script"><link rel="preload" href="/master/assets/js/10.3cf8ba3a.js" as="script"><link rel="preload" href="/master/assets/js/7.c795f92d.js" as="script"><link rel="preload" href="/master/assets/js/183.a6f8527e.js" as="script"><link rel="preload" href="/master/assets/js/2.21a3b73d.js" as="script"><link rel="preload" href="/master/assets/js/5.4af69dfc.js" as="script"><link rel="preload" href="/master/assets/js/38.933ad5bd.js" as="script"><link rel="preload" href="/master/assets/js/13.cd4f8d8e.js" as="script"><link rel="preload" href="/master/assets/js/12.cf95ee24.js" as="script"><link rel="preload" href="/master/assets/js/16.e0a6886e.js" as="script"><link rel="preload" href="/master/assets/js/45.1110ab59.js" as="script"><link rel="preload" href="/master/assets/js/20.c6a2fb05.js" as="script"><link rel="prefetch" href="/master/assets/js/100.5cc5b1c5.js"><link rel="prefetch" href="/master/assets/js/101.b1686c25.js"><link rel="prefetch" href="/master/assets/js/102.a77f09ff.js"><link rel="prefetch" href="/master/assets/js/103.628a973b.js"><link rel="prefetch" href="/master/assets/js/104.adff3890.js"><link rel="prefetch" href="/master/assets/js/105.5ce65b7f.js"><link rel="prefetch" href="/master/assets/js/106.4eea6346.js"><link rel="prefetch" href="/master/assets/js/107.b576d87a.js"><link rel="prefetch" href="/master/assets/js/108.104f5ed5.js"><link rel="prefetch" href="/master/assets/js/109.b15e9151.js"><link rel="prefetch" href="/master/assets/js/11.00f01e88.js"><link rel="prefetch" href="/master/assets/js/110.0934a099.js"><link rel="prefetch" href="/master/assets/js/111.47e9b185.js"><link rel="prefetch" href="/master/assets/js/112.97ab0e05.js"><link rel="prefetch" href="/master/assets/js/113.55b9e637.js"><link rel="prefetch" href="/master/assets/js/114.e6d24a0b.js"><link rel="prefetch" href="/master/assets/js/115.ae115651.js"><link rel="prefetch" href="/master/assets/js/116.dc5b6048.js"><link rel="prefetch" href="/master/assets/js/117.eb7f1121.js"><link rel="prefetch" href="/master/assets/js/118.3c73b8f0.js"><link rel="prefetch" href="/master/assets/js/119.e78eaee1.js"><link rel="prefetch" href="/master/assets/js/120.3e622c8d.js"><link rel="prefetch" href="/master/assets/js/121.e9172ca7.js"><link rel="prefetch" href="/master/assets/js/122.2477faff.js"><link rel="prefetch" href="/master/assets/js/123.3858ea7c.js"><link rel="prefetch" href="/master/assets/js/124.ae4bf284.js"><link rel="prefetch" href="/master/assets/js/125.f19a08b1.js"><link rel="prefetch" href="/master/assets/js/126.dbab3f37.js"><link rel="prefetch" href="/master/assets/js/127.49556a1a.js"><link rel="prefetch" href="/master/assets/js/128.56bf99ca.js"><link rel="prefetch" href="/master/assets/js/129.ee765751.js"><link rel="prefetch" href="/master/assets/js/130.e5c849d4.js"><link rel="prefetch" href="/master/assets/js/131.a480108f.js"><link rel="prefetch" href="/master/assets/js/132.7eb3a84d.js"><link rel="prefetch" href="/master/assets/js/133.15232f8a.js"><link rel="prefetch" href="/master/assets/js/134.a91c8722.js"><link rel="prefetch" href="/master/assets/js/135.616bb5ec.js"><link rel="prefetch" href="/master/assets/js/136.ea8b592e.js"><link rel="prefetch" href="/master/assets/js/137.4cd52167.js"><link rel="prefetch" href="/master/assets/js/138.a78dd2df.js"><link rel="prefetch" href="/master/assets/js/139.920add1b.js"><link rel="prefetch" href="/master/assets/js/14.54477264.js"><link rel="prefetch" href="/master/assets/js/140.a5b807fb.js"><link rel="prefetch" href="/master/assets/js/141.723d107b.js"><link rel="prefetch" href="/master/assets/js/142.476214d4.js"><link rel="prefetch" href="/master/assets/js/143.686ce60b.js"><link rel="prefetch" href="/master/assets/js/144.c0d5b563.js"><link rel="prefetch" href="/master/assets/js/145.6612f3a3.js"><link rel="prefetch" href="/master/assets/js/146.2d5b17d6.js"><link rel="prefetch" href="/master/assets/js/147.acbb86d8.js"><link rel="prefetch" href="/master/assets/js/148.0cbee9ba.js"><link rel="prefetch" href="/master/assets/js/149.b6267cfe.js"><link rel="prefetch" href="/master/assets/js/15.fd025618.js"><link rel="prefetch" href="/master/assets/js/150.d31241cd.js"><link rel="prefetch" href="/master/assets/js/151.c495db3c.js"><link rel="prefetch" href="/master/assets/js/152.dc828f50.js"><link rel="prefetch" href="/master/assets/js/153.c771569c.js"><link rel="prefetch" href="/master/assets/js/154.abd87751.js"><link rel="prefetch" href="/master/assets/js/155.30665cc5.js"><link rel="prefetch" href="/master/assets/js/156.9f90939a.js"><link rel="prefetch" href="/master/assets/js/157.c8770fc9.js"><link rel="prefetch" href="/master/assets/js/158.bfcecfc8.js"><link rel="prefetch" href="/master/assets/js/159.a60c2f65.js"><link rel="prefetch" href="/master/assets/js/160.a2bdf37d.js"><link rel="prefetch" href="/master/assets/js/161.3034a0ff.js"><link rel="prefetch" href="/master/assets/js/162.27ac6ca6.js"><link rel="prefetch" href="/master/assets/js/163.d9cd6b68.js"><link rel="prefetch" href="/master/assets/js/164.ce8d8e42.js"><link rel="prefetch" href="/master/assets/js/165.eeca2c68.js"><link rel="prefetch" href="/master/assets/js/166.6a7f0cc2.js"><link rel="prefetch" href="/master/assets/js/167.29e50517.js"><link rel="prefetch" href="/master/assets/js/168.ad3e026b.js"><link rel="prefetch" href="/master/assets/js/169.53785d6d.js"><link rel="prefetch" href="/master/assets/js/17.60b16410.js"><link rel="prefetch" href="/master/assets/js/170.b6a4a563.js"><link rel="prefetch" href="/master/assets/js/171.7526d6a5.js"><link rel="prefetch" href="/master/assets/js/172.cd0d0c49.js"><link rel="prefetch" href="/master/assets/js/173.35504fc2.js"><link rel="prefetch" href="/master/assets/js/174.cc976f2e.js"><link rel="prefetch" href="/master/assets/js/175.0b4facea.js"><link rel="prefetch" href="/master/assets/js/176.12a12fc4.js"><link rel="prefetch" href="/master/assets/js/177.630fd5cd.js"><link rel="prefetch" href="/master/assets/js/178.ba8a329b.js"><link rel="prefetch" href="/master/assets/js/179.7fb5d9b0.js"><link rel="prefetch" href="/master/assets/js/18.70b108cc.js"><link rel="prefetch" href="/master/assets/js/180.0d724be1.js"><link rel="prefetch" href="/master/assets/js/181.0e208788.js"><link rel="prefetch" href="/master/assets/js/182.553ee2b1.js"><link rel="prefetch" href="/master/assets/js/184.681becb1.js"><link rel="prefetch" href="/master/assets/js/185.2d4a9a49.js"><link rel="prefetch" href="/master/assets/js/186.0497565b.js"><link rel="prefetch" href="/master/assets/js/187.baf6f121.js"><link rel="prefetch" href="/master/assets/js/188.5a222747.js"><link rel="prefetch" href="/master/assets/js/189.a7c824fa.js"><link rel="prefetch" href="/master/assets/js/190.2642eb15.js"><link rel="prefetch" href="/master/assets/js/191.8db84f5e.js"><link rel="prefetch" href="/master/assets/js/192.10e6303a.js"><link rel="prefetch" href="/master/assets/js/193.fbdff6d5.js"><link rel="prefetch" href="/master/assets/js/194.d473ffb9.js"><link rel="prefetch" href="/master/assets/js/195.943bf237.js"><link rel="prefetch" href="/master/assets/js/196.78f88461.js"><link rel="prefetch" href="/master/assets/js/197.04fb062d.js"><link rel="prefetch" href="/master/assets/js/198.4b7bd369.js"><link rel="prefetch" href="/master/assets/js/199.2fc4251b.js"><link rel="prefetch" href="/master/assets/js/200.e8092982.js"><link rel="prefetch" href="/master/assets/js/201.ad0ca234.js"><link rel="prefetch" href="/master/assets/js/202.ba982f85.js"><link rel="prefetch" href="/master/assets/js/203.58278d59.js"><link rel="prefetch" href="/master/assets/js/204.530c01f4.js"><link rel="prefetch" href="/master/assets/js/205.92a67f57.js"><link rel="prefetch" href="/master/assets/js/206.c5965b0c.js"><link rel="prefetch" href="/master/assets/js/207.6ecd36d8.js"><link rel="prefetch" href="/master/assets/js/208.1fda83e3.js"><link rel="prefetch" href="/master/assets/js/209.97336016.js"><link rel="prefetch" href="/master/assets/js/210.6987519a.js"><link rel="prefetch" href="/master/assets/js/211.a33323ae.js"><link rel="prefetch" href="/master/assets/js/212.c604bd63.js"><link rel="prefetch" href="/master/assets/js/213.5587058c.js"><link rel="prefetch" href="/master/assets/js/214.fa9254c0.js"><link rel="prefetch" href="/master/assets/js/215.f0fce597.js"><link rel="prefetch" href="/master/assets/js/216.d7f22820.js"><link rel="prefetch" href="/master/assets/js/217.758018af.js"><link rel="prefetch" href="/master/assets/js/218.01e70259.js"><link rel="prefetch" href="/master/assets/js/219.b84360b6.js"><link rel="prefetch" href="/master/assets/js/22.f2a7721b.js"><link rel="prefetch" href="/master/assets/js/220.5c0d86a5.js"><link rel="prefetch" href="/master/assets/js/221.cdd41b1d.js"><link rel="prefetch" href="/master/assets/js/222.93860dc0.js"><link rel="prefetch" href="/master/assets/js/223.e657a453.js"><link rel="prefetch" href="/master/assets/js/224.a2b3a252.js"><link rel="prefetch" href="/master/assets/js/225.b6cd6c3c.js"><link rel="prefetch" href="/master/assets/js/226.80cc67c6.js"><link rel="prefetch" href="/master/assets/js/227.c4aa2938.js"><link rel="prefetch" href="/master/assets/js/228.aacbe57c.js"><link rel="prefetch" href="/master/assets/js/229.272ca3bb.js"><link rel="prefetch" href="/master/assets/js/23.3585792b.js"><link rel="prefetch" href="/master/assets/js/230.ac763afc.js"><link rel="prefetch" href="/master/assets/js/231.149f56b4.js"><link rel="prefetch" href="/master/assets/js/232.15826ff6.js"><link rel="prefetch" href="/master/assets/js/233.9fbd25cc.js"><link rel="prefetch" href="/master/assets/js/234.aae0d1d4.js"><link rel="prefetch" href="/master/assets/js/235.8158d914.js"><link rel="prefetch" href="/master/assets/js/236.578d0ba4.js"><link rel="prefetch" href="/master/assets/js/237.576b607d.js"><link rel="prefetch" href="/master/assets/js/238.83492fa9.js"><link rel="prefetch" href="/master/assets/js/239.f3344236.js"><link rel="prefetch" href="/master/assets/js/240.f30a632c.js"><link rel="prefetch" href="/master/assets/js/241.244c1e08.js"><link rel="prefetch" href="/master/assets/js/242.8c617355.js"><link rel="prefetch" href="/master/assets/js/243.cbbbed8a.js"><link rel="prefetch" href="/master/assets/js/244.fe594f7c.js"><link rel="prefetch" href="/master/assets/js/245.bbcf1378.js"><link rel="prefetch" href="/master/assets/js/246.62527ea7.js"><link rel="prefetch" href="/master/assets/js/247.aa90a132.js"><link rel="prefetch" href="/master/assets/js/248.3098aa52.js"><link rel="prefetch" href="/master/assets/js/249.afad9084.js"><link rel="prefetch" href="/master/assets/js/250.b15fdc90.js"><link rel="prefetch" href="/master/assets/js/251.5646fcc2.js"><link rel="prefetch" href="/master/assets/js/252.ecf07444.js"><link rel="prefetch" href="/master/assets/js/253.0bd7f622.js"><link rel="prefetch" href="/master/assets/js/254.d492ac3e.js"><link rel="prefetch" href="/master/assets/js/255.8bd41455.js"><link rel="prefetch" href="/master/assets/js/256.d4462e7d.js"><link rel="prefetch" href="/master/assets/js/257.797cc72d.js"><link rel="prefetch" href="/master/assets/js/258.27f39f23.js"><link rel="prefetch" href="/master/assets/js/259.ad3448ab.js"><link rel="prefetch" href="/master/assets/js/26.922fc32d.js"><link rel="prefetch" href="/master/assets/js/260.0294a586.js"><link rel="prefetch" href="/master/assets/js/261.0eaa0b9f.js"><link rel="prefetch" href="/master/assets/js/262.06819323.js"><link rel="prefetch" href="/master/assets/js/263.05690e0f.js"><link rel="prefetch" href="/master/assets/js/264.8a841edd.js"><link rel="prefetch" href="/master/assets/js/265.7308bbfb.js"><link rel="prefetch" href="/master/assets/js/266.d10b567b.js"><link rel="prefetch" href="/master/assets/js/267.2a830a94.js"><link rel="prefetch" href="/master/assets/js/268.cf9b6e9a.js"><link rel="prefetch" href="/master/assets/js/269.a56e873a.js"><link rel="prefetch" href="/master/assets/js/27.a195c036.js"><link rel="prefetch" href="/master/assets/js/270.ac696056.js"><link rel="prefetch" href="/master/assets/js/271.a56f1c15.js"><link rel="prefetch" href="/master/assets/js/272.23c07599.js"><link rel="prefetch" href="/master/assets/js/273.fbe68aeb.js"><link rel="prefetch" href="/master/assets/js/274.fe2386ad.js"><link rel="prefetch" href="/master/assets/js/275.69282bce.js"><link rel="prefetch" href="/master/assets/js/276.240d659c.js"><link rel="prefetch" href="/master/assets/js/28.384b9a99.js"><link rel="prefetch" href="/master/assets/js/29.e9daa0bc.js"><link rel="prefetch" href="/master/assets/js/3.1cd0e33c.js"><link rel="prefetch" href="/master/assets/js/30.5ab7786b.js"><link rel="prefetch" href="/master/assets/js/31.1e453d18.js"><link rel="prefetch" href="/master/assets/js/32.35268055.js"><link rel="prefetch" href="/master/assets/js/33.30a50a02.js"><link rel="prefetch" href="/master/assets/js/34.9c4a443a.js"><link rel="prefetch" href="/master/assets/js/35.db83baae.js"><link rel="prefetch" href="/master/assets/js/36.da1c5d51.js"><link rel="prefetch" href="/master/assets/js/37.50e455e2.js"><link rel="prefetch" href="/master/assets/js/39.d3b31824.js"><link rel="prefetch" href="/master/assets/js/4.e6373162.js"><link rel="prefetch" href="/master/assets/js/41.88458af2.js"><link rel="prefetch" href="/master/assets/js/42.aef6ffe8.js"><link rel="prefetch" href="/master/assets/js/43.59e6430f.js"><link rel="prefetch" href="/master/assets/js/46.2eee78b0.js"><link rel="prefetch" href="/master/assets/js/47.2d2c9c61.js"><link rel="prefetch" href="/master/assets/js/48.888652e0.js"><link rel="prefetch" href="/master/assets/js/49.7518a020.js"><link rel="prefetch" href="/master/assets/js/50.cb1c2ceb.js"><link rel="prefetch" href="/master/assets/js/51.559ef27c.js"><link rel="prefetch" href="/master/assets/js/52.bb739ede.js"><link rel="prefetch" href="/master/assets/js/53.4603f16f.js"><link rel="prefetch" href="/master/assets/js/54.ca6c6483.js"><link rel="prefetch" href="/master/assets/js/55.3b3a1e0a.js"><link rel="prefetch" href="/master/assets/js/57.53889f56.js"><link rel="prefetch" href="/master/assets/js/58.bc13479f.js"><link rel="prefetch" href="/master/assets/js/59.9025c9ef.js"><link rel="prefetch" href="/master/assets/js/6.f7acf8d3.js"><link rel="prefetch" href="/master/assets/js/60.16551eff.js"><link rel="prefetch" href="/master/assets/js/61.46f5ed80.js"><link rel="prefetch" href="/master/assets/js/63.b20bf942.js"><link rel="prefetch" href="/master/assets/js/67.38659a6f.js"><link rel="prefetch" href="/master/assets/js/68.66aa10ef.js"><link rel="prefetch" href="/master/assets/js/69.2163ef0b.js"><link rel="prefetch" href="/master/assets/js/70.ad5dd2d2.js"><link rel="prefetch" href="/master/assets/js/71.a8b1be45.js"><link rel="prefetch" href="/master/assets/js/72.6e1a24bb.js"><link rel="prefetch" href="/master/assets/js/73.6f5020f1.js"><link rel="prefetch" href="/master/assets/js/74.c3531406.js"><link rel="prefetch" href="/master/assets/js/75.ba272559.js"><link rel="prefetch" href="/master/assets/js/76.54fa3332.js"><link rel="prefetch" href="/master/assets/js/77.20562058.js"><link rel="prefetch" href="/master/assets/js/78.fb2118d8.js"><link rel="prefetch" href="/master/assets/js/79.37c1c8cc.js"><link rel="prefetch" href="/master/assets/js/8.f830f562.js"><link rel="prefetch" href="/master/assets/js/80.abd6c897.js"><link rel="prefetch" href="/master/assets/js/81.28f9ddd9.js"><link rel="prefetch" href="/master/assets/js/82.28920985.js"><link rel="prefetch" href="/master/assets/js/83.6bdc0ed7.js"><link rel="prefetch" href="/master/assets/js/84.67c01fe3.js"><link rel="prefetch" href="/master/assets/js/85.2b3eae25.js"><link rel="prefetch" href="/master/assets/js/86.a7bdae44.js"><link rel="prefetch" href="/master/assets/js/87.b456d7ab.js"><link rel="prefetch" href="/master/assets/js/88.f8ce81fe.js"><link rel="prefetch" href="/master/assets/js/89.f80c82a5.js"><link rel="prefetch" href="/master/assets/js/9.98e56c96.js"><link rel="prefetch" href="/master/assets/js/90.100c678c.js"><link rel="prefetch" href="/master/assets/js/91.9e0eb885.js"><link rel="prefetch" href="/master/assets/js/92.068d4a86.js"><link rel="prefetch" href="/master/assets/js/93.7fbc83f0.js"><link rel="prefetch" href="/master/assets/js/94.182ccb66.js"><link rel="prefetch" href="/master/assets/js/95.c1e6c57d.js"><link rel="prefetch" href="/master/assets/js/96.40381e38.js"><link rel="prefetch" href="/master/assets/js/97.7aaeced9.js"><link rel="prefetch" href="/master/assets/js/98.dae4dd3e.js"><link rel="prefetch" href="/master/assets/js/99.91817ca7.js">
|
||
<link rel="stylesheet" href="/master/assets/css/0.styles.3ed5e0a6.css">
|
||
</head>
|
||
<body>
|
||
<div id="app" data-server-rendered="true"><div data-v-58560e81><div data-v-40401285 data-v-58560e81><div class="banner-wrapper" data-v-40401285 data-v-40401285><div class="wrapper" data-v-40401285><div class="message" data-v-40401285>By using this website, you agree to our <a href="https://www.cookiesandyou.com" target="_blank" rel="noopener" style="color:#505FFF;" data-v-40401285>Cookie Policy</a>.</div> <div class="box" data-v-40401285><span class="icon-cross" data-v-40401285><svg width="16" height="16" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-40401285><path d="M1.66669 1.66669L12.3334 12.3334M12.3334 1.66669L1.66664 12.3334" stroke="#A2A3AD" stroke-width="1.5" stroke-linecap="round" data-v-40401285></path></svg></span></div></div></div></div><!----><div class="layout" data-v-58560e81><div class="layout__sidebar" data-v-58560e81><div style="height:100%;position:relative;" data-v-25cba946 data-v-58560e81><div class="container" data-v-25cba946><a href="/master/" class="logo__container router-link-active" data-v-25cba946><div class="logo" data-v-25cba946><div class="logo__img" data-v-25cba946><svg width="100%" height="100%" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-25cba946><path fill-rule="evenodd" clip-rule="evenodd" d="M100 6.9282L19.3975 53.4641V146.536L100 193.072L180.603 146.536V53.4641L100 6.9282ZM186.603 50L100 0L13.3975 50V150L100 200L186.603 150V50Z" fill="#00BB00"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M118.521 80.989C112.693 78.6912 106.416 77.4911 100.076 77.4911C86.7528 77.4911 74.2205 82.7219 64.7884 92.2196C55.3971 101.676 50.1795 114.236 50.0956 127.588L50.0845 129.381L51.6424 130.267C59.151 134.539 67.6423 136.787 76.2468 136.787C76.4834 136.787 76.7219 136.785 76.9591 136.782C84.4596 136.674 91.8801 134.87 98.6072 131.541C96.486 130.355 94.4533 129.019 92.5209 127.546C80.7952 132.165 67.5061 131.595 56.2598 125.81C57.3537 102.38 76.6441 83.6116 100.076 83.6116C106.594 83.6116 113.031 85.0533 118.845 87.7928C118.92 85.5246 118.812 83.2511 118.521 80.989Z" fill="#00BB00"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M150.057 127.172C149.879 110.572 141.795 95.4272 128.321 86.2016C128.331 88.6306 128.169 91.0582 127.835 93.4714C137.41 101.289 143.247 112.801 143.885 125.413C123.232 136.055 97.4756 128.602 85.743 108.266C82.574 102.772 80.6311 96.6307 80.0601 90.3552C78.0668 91.4421 76.163 92.6927 74.3657 94.0948C75.3134 100.134 77.3729 105.999 80.4462 111.326C87.1202 122.894 97.85 131.188 110.658 134.678C115.004 135.863 119.422 136.449 123.816 136.449C132.377 136.449 140.847 134.224 148.51 129.866L150.076 128.975L150.057 127.172Z" fill="#00BB00"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M101.843 42.9061L100.298 42L98.7531 42.9047C91.1194 47.3722 84.7773 53.7773 80.4121 61.4272C76.6426 68.0338 74.413 75.4344 73.8901 82.9885C75.9799 81.7463 78.1569 80.6541 80.4079 79.7207C82.347 67.2679 89.5887 56.0133 100.295 49.1357C119.96 61.7797 126.427 87.9954 114.615 108.469C111.416 114.013 107.043 118.807 101.861 122.488C103.796 123.668 105.829 124.693 107.94 125.549C112.731 121.666 116.809 116.908 119.912 111.529C133.703 87.6254 125.597 56.8415 101.843 42.9061Z" fill="#00BB00"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M100.268 95.1374C97.4504 95.1374 95.1588 97.431 95.1588 100.25C95.1588 103.069 97.4504 105.363 100.268 105.363C103.085 105.363 105.377 103.069 105.377 100.25C105.377 97.431 103.085 95.1374 100.268 95.1374ZM100.268 111.483C94.0779 111.483 89.0427 106.444 89.0427 100.25C89.0427 94.056 94.0779 89.0169 100.268 89.0169C106.457 89.0169 111.493 94.056 111.493 100.25C111.493 106.444 106.457 111.483 100.268 111.483Z" fill="#00BB00"></path></svg></div><div class="logo__text" data-v-25cba946>Tendermint Core</div></div></a><div class="items footer__compact__false" data-v-25cba946><div class="sidebar" style="display:block;" data-v-25cba946><div class="title" data-v-25cba946></div><!----></div><div class="sidebar" style="display:block;" data-v-25cba946><div class="title" data-v-25cba946>Resources</div><!----></div><div class="sidebar version" data-v-25cba946><div data-v-08503e1b data-v-25cba946><div class="container" data-v-08503e1b><span class="sr-only" data-v-08503e1b>Docs Version Switcher</span><div class="select" data-v-08503e1b><select data-v-08503e1b><option value="" disabled="disabled" data-v-08503e1b>Version</option><option value="v0.33" data-v-08503e1b>v0.33</option><option value="v0.34" data-v-08503e1b>v0.34</option><option value="v0.35" data-v-08503e1b>v0.35</option></select></div></div></div></div></div><div class="footer footer__compact__false" data-v-25cba946><a href="https://docs.cosmos.network/" target="_blank" rel="noreferrer noopener" class="footer__item" style="--color:#5064FB;" data-v-25cba946><div class="footer__item__icon" data-v-25cba946><svg width="100%" height="100%" viewBox="0 0 29 33" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.5249 1.86771L1.62846 9.31346V24.2049L14.5249 31.6507L27.4213 24.2049V9.31346L14.5249 1.86771ZM28.3813 8.7592L14.5249 0.759201L0.668463 8.7592V24.7592L14.5249 32.7592L28.3813 24.7592V8.7592Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5249 14.6144L12.7136 15.6602V17.7516L14.5249 18.7974L16.3362 17.7516V15.6602L14.5249 14.6144ZM17.2962 15.1059L14.5249 13.5059L11.7536 15.1059V18.3059L14.5249 19.9059L17.2962 18.3059V15.1059Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M17.6182 20.0011L15.8069 21.0468V23.1383L17.6182 24.1841L19.4295 23.1383V21.0468L17.6182 20.0011ZM20.3895 20.4926L17.6182 18.8926L14.8469 20.4926V23.6926L17.6182 25.2926L20.3895 23.6926V20.4926Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M20.7115 14.6144L18.9003 15.6602V17.7516L20.7115 18.7974L22.5228 17.7516V15.6602L20.7115 14.6144ZM23.4828 15.1059L20.7115 13.5059L17.9403 15.1059V18.3059L20.7115 19.9059L23.4828 18.3059V15.1059Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M8.33821 14.6144L6.52693 15.6602V17.7516L8.33821 18.7974L10.1495 17.7516V15.6602L8.33821 14.6144ZM11.1095 15.1059L8.33821 13.5059L5.56693 15.1059V18.3059L8.33821 19.9059L11.1095 18.3059V15.1059Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M11.4315 20.0011L9.62026 21.0468V23.1383L11.4315 24.1841L13.2428 23.1383V21.0468L11.4315 20.0011ZM14.2028 20.4926L11.4315 18.8926L8.66026 20.4926V23.6926L11.4315 25.2926L14.2028 23.6926V20.4926Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M17.6182 9.33442L15.8069 10.3802V12.4716L17.6182 13.5174L19.4295 12.4716V10.3802L17.6182 9.33442ZM20.3895 9.82591L17.6182 8.22591L14.8469 9.82591V13.0259L17.6182 14.6259L20.3895 13.0259V9.82591Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M11.4315 9.33442L9.62026 10.3802V12.4716L11.4315 13.5174L13.2428 12.4716V10.3802L11.4315 9.33442ZM14.2028 9.82591L11.4315 8.22591L8.66026 9.82591V13.0259L11.4315 14.6259L14.2028 13.0259V9.82591Z"></path></svg></div><div class="footer__item__title" data-v-25cba946><div>Cosmos<br>SDK</div></div></a><a href="https://hub.cosmos.network/" target="_blank" rel="noreferrer noopener" class="footer__item" style="--color:#BA3FD9;" data-v-25cba946><div class="footer__item__icon" data-v-25cba946><svg width="100%" height="100%" viewBox="0 0 29 33" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.7074 1.86771L1.81101 9.31346V24.2049L14.7074 31.6507L27.6038 24.2049V9.31346L14.7074 1.86771ZM28.5638 8.7592L14.7074 0.759201L0.851009 8.7592V24.7592L14.7074 32.7592L28.5638 24.7592V8.7592Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.702 11.0209C13.7115 11.0209 12.9058 10.2146 12.9058 9.22341C12.9058 8.23228 13.7115 7.42595 14.702 7.42595C15.6924 7.42595 16.4982 8.23228 16.4982 9.22341C16.4982 10.2146 15.6924 11.0209 14.702 11.0209ZM14.702 8.40532C14.2512 8.40532 13.8845 8.77232 13.8845 9.22341C13.8845 9.6745 14.2512 10.0415 14.702 10.0415C15.1528 10.0415 15.5195 9.6745 15.5195 9.22341C15.5195 8.77232 15.1528 8.40532 14.702 8.40532Z"></path> <path d="M14.2392 11.3182C14.3935 11.3538 14.5541 11.3726 14.7191 11.3726C14.8841 11.3726 15.0448 11.3538 15.1992 11.3182V14.6804C15.0448 14.6448 14.8841 14.626 14.7191 14.626C14.5541 14.626 14.3935 14.6448 14.2392 14.6804V11.3182Z"></path> <path d="M13.1599 15.3048L10.247 13.623C10.2007 13.7745 10.1366 13.9231 10.0541 14.066C9.97165 14.2089 9.87502 14.3386 9.76702 14.4544L12.6788 16.1355C12.7749 15.8219 12.9414 15.5388 13.1599 15.3048Z"></path> <path d="M12.6788 17.383L9.767 19.0642C9.87503 19.18 9.97168 19.3098 10.0542 19.4527C10.1367 19.5955 10.2007 19.7441 10.247 19.8955L13.1598 18.2138C12.9414 17.9798 12.7749 17.6967 12.6788 17.383Z"></path> <path d="M14.2392 18.8382V22.2004C14.3935 22.1648 14.5542 22.146 14.7192 22.146C14.8842 22.146 15.0448 22.1648 15.1992 22.2004V18.8382C15.0448 18.8738 14.8841 18.8926 14.7191 18.8926C14.5541 18.8926 14.3935 18.8738 14.2392 18.8382Z"></path> <path d="M16.2784 18.2138L19.1913 19.8955C19.2376 19.7441 19.3017 19.5955 19.3842 19.4526C19.4667 19.3097 19.5633 19.18 19.6713 19.0641L16.7595 17.383C16.6634 17.6966 16.4969 17.9797 16.2784 18.2138Z"></path> <path d="M16.7595 16.1356L19.6713 14.4544C19.5633 14.3386 19.4666 14.2088 19.3841 14.0659C19.3016 13.923 19.2376 13.7745 19.1913 13.623L16.2784 15.3048C16.4969 15.5388 16.6634 15.8219 16.7595 16.1356Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M9.74094 13.905C9.24572 14.7627 8.1446 15.0573 7.28623 14.5617C6.42789 14.0662 6.13243 12.9653 6.62765 12.1075C7.12287 11.2498 8.22408 10.9551 9.08241 11.4506C9.94079 11.9462 10.2362 13.0472 9.74094 13.905ZM7.47581 12.5972C7.25041 12.9876 7.3849 13.4887 7.77555 13.7142C8.16621 13.9397 8.66738 13.8057 8.89278 13.4153C9.11818 13.0249 8.98374 12.5237 8.59309 12.2982C8.20243 12.0726 7.70122 12.2068 7.47581 12.5972Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M9.75813 19.6434C10.2534 20.5011 9.95794 21.602 9.09956 22.0976C8.24122 22.5932 7.14006 22.2986 6.64484 21.4408C6.14962 20.5831 6.44503 19.4821 7.30337 18.9865C8.16175 18.4909 9.26291 18.7856 9.75813 19.6434ZM7.493 20.9512C7.71841 21.3416 8.21958 21.4756 8.61023 21.2501C9.00089 21.0245 9.13537 20.5235 8.90997 20.1331C8.68457 19.7427 8.18336 19.6085 7.7927 19.8341C7.40204 20.0596 7.2676 20.5607 7.493 20.9512Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.7363 22.4977C15.7268 22.4977 16.5325 23.304 16.5325 24.2952C16.5325 25.2863 15.7268 26.0926 14.7363 26.0926C13.7459 26.0926 12.9401 25.2863 12.9401 24.2952C12.9401 23.304 13.7459 22.4977 14.7363 22.4977ZM14.7363 25.1133C15.1871 25.1133 15.5538 24.7463 15.5538 24.2952C15.5538 23.8441 15.1871 23.4771 14.7363 23.4771C14.2855 23.4771 13.9188 23.8441 13.9188 24.2952C13.9188 24.7463 14.2855 25.1133 14.7363 25.1133Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M19.6974 19.6136C20.1926 18.7559 21.2937 18.4613 22.1521 18.9568C23.0104 19.4524 23.3059 20.5533 22.8107 21.4111C22.3154 22.2688 21.2142 22.5635 20.3559 22.0679C19.4975 21.5723 19.2021 20.4714 19.6974 19.6136ZM21.9625 20.9214C22.1879 20.531 22.0534 20.0299 21.6628 19.8044C21.2721 19.5788 20.7709 19.7129 20.5455 20.1033C20.3201 20.4937 20.4546 20.9948 20.8452 21.2204C21.2359 21.4459 21.7371 21.3118 21.9625 20.9214Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M19.6802 13.8752C19.185 13.0174 19.4804 11.9165 20.3387 11.421C21.1971 10.9254 22.2982 11.22 22.7935 12.0777C23.2887 12.9355 22.9933 14.0365 22.1349 14.532C21.2766 15.0276 20.1754 14.7329 19.6802 13.8752ZM21.9453 12.5674C21.7199 12.177 21.2187 12.043 20.8281 12.2685C20.4374 12.494 20.3029 12.9951 20.5283 13.3855C20.7537 13.7759 21.2549 13.9101 21.6456 13.6845C22.0363 13.459 22.1707 12.9578 21.9453 12.5674Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.702 15.9253C14.2512 15.9253 13.8845 16.2923 13.8845 16.7434C13.8845 17.1945 14.2512 17.5615 14.702 17.5615C15.1528 17.5615 15.5195 17.1945 15.5195 16.7434C15.5195 16.2923 15.1528 15.9253 14.702 15.9253ZM14.702 18.5409C13.7115 18.5409 12.9058 17.7346 12.9058 16.7434C12.9058 15.7523 13.7115 14.946 14.702 14.946C15.6924 14.946 16.4982 15.7523 16.4982 16.7434C16.4982 17.7346 15.6924 18.5409 14.702 18.5409Z"></path></svg></div><div class="footer__item__title" data-v-25cba946><div>Cosmos<br>Hub</div></div></a><a href="https://ibc.cosmos.network" target="_blank" rel="noreferrer noopener" class="footer__item" style="--color:#E6900A;" data-v-25cba946><div class="footer__item__icon" data-v-25cba946><svg width="100%" height="100%" viewBox="0 0 28 33" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M14 1.53446L1.10359 8.98021V23.8717L14 31.3174L26.8964 23.8717V8.98021L14 1.53446ZM27.8564 8.42595L14 0.425949L0.143593 8.42595V24.4259L14 32.4259L27.8564 24.4259V8.42595Z"></path> <path d="M13.4305 11.2288C13.1139 11.141 12.8267 10.9819 12.5873 10.7699L8.35975 18.4481C8.67187 18.5487 8.95282 18.7194 9.18397 18.9416L13.4305 11.2288Z"></path> <path d="M9.79716 20.0526C9.82527 20.1905 9.84002 20.3332 9.84002 20.4792C9.84002 20.6633 9.81659 20.8421 9.77254 21.0126H18.2808C18.2368 20.8421 18.2134 20.6633 18.2134 20.4792C18.2134 20.3332 18.2281 20.1905 18.2562 20.0526L9.79716 20.0526Z"></path> <path d="M15.4184 10.7648L19.6862 18.4505C19.3745 18.5522 19.0942 18.7239 18.8638 18.9469L14.5768 11.2267C14.893 11.1378 15.1797 10.9777 15.4184 10.7648Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M20.3295 19.6453C19.8787 19.6453 19.512 20.0123 19.512 20.4634C19.512 20.9145 19.8787 21.2815 20.3295 21.2815C20.7803 21.2815 21.1471 20.9145 21.1471 20.4634C21.1471 20.0123 20.7803 19.6453 20.3295 19.6453ZM20.3295 22.2608C19.3391 22.2608 18.5334 21.4545 18.5334 20.4634C18.5334 19.4722 19.3391 18.6659 20.3295 18.6659C21.3199 18.6659 22.1257 19.4722 22.1257 20.4634C22.1257 21.4545 21.3199 22.2608 20.3295 22.2608Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M13.9828 8.33862C13.532 8.33862 13.1653 8.70561 13.1653 9.1567C13.1653 9.60779 13.532 9.97479 13.9828 9.97479C14.4336 9.97479 14.8004 9.60779 14.8004 9.1567C14.8004 8.70561 14.4336 8.33862 13.9828 8.33862ZM13.9828 10.9542C12.9924 10.9542 12.1867 10.1479 12.1867 9.1567C12.1867 8.16558 12.9924 7.35925 13.9828 7.35925C14.9733 7.35925 15.7791 8.16558 15.7791 9.1567C15.7791 10.1479 14.9733 10.9542 13.9828 10.9542Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M7.6895 19.6453C7.2387 19.6453 6.87201 20.0123 6.87201 20.4634C6.87201 20.9145 7.2387 21.2815 7.6895 21.2815C8.1403 21.2815 8.50708 20.9145 8.50708 20.4634C8.50708 20.0123 8.1403 19.6453 7.6895 19.6453ZM7.6895 22.2608C6.69906 22.2608 5.89336 21.4545 5.89336 20.4634C5.89336 19.4722 6.69906 18.6659 7.6895 18.6659C8.67994 18.6659 9.48573 19.4722 9.48573 20.4634C9.48573 21.4545 8.67994 22.2608 7.6895 22.2608Z"></path></svg></div><div class="footer__item__title" data-v-25cba946><div>IBC<br>Go</div></div></a><!----></div></div></div></div><div class="layout__main" data-v-58560e81><div class="layout__main__navbar" data-v-58560e81><div data-v-19189c02 data-v-58560e81><div class="container" data-v-19189c02><div class="menu" data-v-19189c02><div class="menu__icon" data-v-19189c02><svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="#888" data-v-19189c02><path d="M2 5H22M2 12H22M2 19H22" stroke-width="1.5" stroke-linecap="round"></path></svg></div></div><div class="logo" data-v-19189c02><div class="logo__wrapper router-link-active" data-v-19189c02><div class="logo__image" data-v-19189c02><div data-v-19189c02><svg width="100%" height="100%" viewBox="0 0 29 33" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M14.3333 1.20113L1.43693 8.64688V23.5383L14.3333 30.9841L27.2297 23.5383V8.64688L14.3333 1.20113ZM28.1897 8.09262L14.3333 0.0926208L0.476929 8.09262V24.0926L14.3333 32.0926L28.1897 24.0926V8.09262Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M17.2967 13.0508C16.3642 12.6832 15.3599 12.4911 14.3456 12.4911C12.2139 12.4911 10.2087 13.3281 8.6995 14.8477C7.19695 16.3607 6.36214 18.3704 6.3487 20.5067L6.34692 20.7935L6.59619 20.9353C7.79757 21.6189 9.1562 21.9785 10.5329 21.9785C10.5708 21.9785 10.6089 21.9782 10.6469 21.9776C11.8469 21.9604 13.0342 21.6718 14.1106 21.1392C13.7712 20.9493 13.4459 20.7355 13.1367 20.4998C11.2606 21.2389 9.1344 21.1478 7.33497 20.2221C7.51 16.4733 10.5965 13.4704 14.3456 13.4704C15.3884 13.4704 16.4184 13.7011 17.3486 14.1394C17.3606 13.7765 17.3434 13.4127 17.2967 13.0508Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M22.3425 20.4401C22.314 17.7841 21.0207 15.3609 18.8648 13.8848C18.8664 14.2735 18.8404 14.6619 18.787 15.048C20.3189 16.2988 21.2529 18.1407 21.355 20.1586C18.0506 21.8613 13.9295 20.6688 12.0523 17.4151C11.5453 16.5362 11.2344 15.5535 11.143 14.5494C10.8241 14.7233 10.5195 14.9234 10.2319 15.1477C10.3836 16.114 10.7131 17.0524 11.2048 17.9047C12.2726 19.7556 13.9894 21.0826 16.0387 21.6411C16.734 21.8306 17.4409 21.9244 18.1439 21.9244C19.5137 21.9244 20.8689 21.5684 22.095 20.8711L22.3456 20.7285L22.3425 20.4401Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.6283 6.95757L14.3811 6.81259L14.1339 6.95735C12.9125 7.67214 11.8978 8.69696 11.1993 9.92094C10.5962 10.978 10.2395 12.1621 10.1558 13.3707C10.4902 13.172 10.8385 12.9972 11.1987 12.8479C11.5089 10.8554 12.6676 9.05472 14.3807 7.95431C17.527 9.97734 18.5617 14.1718 16.6718 17.4476C16.16 18.3347 15.4602 19.1017 14.6311 19.6906C14.9408 19.8794 15.266 20.0434 15.6038 20.1805C16.3703 19.5591 17.0228 18.7979 17.5193 17.9372C19.7259 14.1126 18.4289 9.18723 14.6283 6.95757Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.3762 15.3146C13.9255 15.3146 13.5588 15.6815 13.5588 16.1326C13.5588 16.5836 13.9255 16.9506 14.3762 16.9506C14.827 16.9506 15.1937 16.5836 15.1937 16.1326C15.1937 15.6815 14.827 15.3146 14.3762 15.3146ZM14.3762 17.9299C13.3859 17.9299 12.5802 17.1237 12.5802 16.1326C12.5802 15.1415 13.3859 14.3353 14.3762 14.3353C15.3666 14.3353 16.1723 15.1415 16.1723 16.1326C16.1723 17.1237 15.3666 17.9299 14.3762 17.9299Z"></path></svg></div></div><div class="logo__text" data-v-19189c02>Tendermint Core</div></div></div><div class="toolbar" data-v-19189c02><div class="toolbar__item" data-v-19189c02><div class="toolbar__item__icon" data-v-19189c02><svg width="100%" height="100%" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="#888" data-v-19189c02><path fill-rule="evenodd" clip-rule="evenodd" d="M11.5 2.75C6.66751 2.75 2.75 6.66751 2.75 11.5C2.75 16.3325 6.66751 20.25 11.5 20.25C13.6462 20.25 15.612 19.4773 17.1342 18.1949L22.6697 23.7303C22.9626 24.0232 23.4374 24.0232 23.7303 23.7303C24.0232 23.4374 24.0232 22.9626 23.7303 22.6697L18.1949 17.1342C19.4773 15.612 20.25 13.6462 20.25 11.5C20.25 6.66751 16.3325 2.75 11.5 2.75ZM16.6923 16.5599C17.9656 15.2535 18.75 13.4684 18.75 11.5C18.75 7.49594 15.5041 4.25 11.5 4.25C7.49594 4.25 4.25 7.49594 4.25 11.5C4.25 15.5041 7.49594 18.75 11.5 18.75C13.4684 18.75 15.2535 17.9656 16.5599 16.6923C16.5789 16.6679 16.5996 16.6444 16.622 16.622C16.6444 16.5996 16.6679 16.5789 16.6923 16.5599Z"></path></svg></div></div></div></div></div></div><div class="layout__main__content aside__true" data-v-58560e81><div id="content-scroll" class="layout__main__content__body" data-v-58560e81><div class="layout__main__content__body__breadcrumbs" data-v-58560e81><div data-v-48fb2d7a data-v-58560e81><div class="container" data-v-48fb2d7a><div class="crumbs" data-v-48fb2d7a><a href="/master/" class="crumbs__item router-link-active" data-v-48fb2d7a>Tendermint Core</a><a href="/master/spec/" class="crumbs__item router-link-active" data-v-48fb2d7a>Tendermint Specifications</a><a href="/master/spec/abci/" class="crumbs__item router-link-active" data-v-48fb2d7a>ABCI</a><a href="/master/spec/abci/abci.html" aria-current="page" class="crumbs__item router-link-exact-active router-link-active" data-v-48fb2d7a>Methods and Types</a></div><div class="menu" data-v-48fb2d7a><div class="menu__item" style="visibility:visible;" data-v-48fb2d7a><svg width="100%" height="100%" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="menu__item__icon menu__item__icon__active__false" data-v-48fb2d7a><path fill-rule="evenodd" clip-rule="evenodd" d="M0.25 2C0.25 1.58579 0.585786 1.25 1 1.25H6C6.41421 1.25 6.75 1.58579 6.75 2C6.75 2.41421 6.41421 2.75 6 2.75H1C0.585786 2.75 0.25 2.41421 0.25 2ZM17.53 22.7803L16.9997 22.25L17.53 22.7803L17.5301 22.7802L17.5305 22.7798L17.5322 22.7781L17.5388 22.7715L17.5647 22.7456L17.6647 22.6456L18.0367 22.2737L19.2978 21.0126L22.53 17.7803C22.8229 17.4874 22.8229 17.0126 22.53 16.7197C22.2371 16.4268 21.7622 16.4268 21.4693 16.7197L18.2371 19.9519L17.7497 20.4393V8.5C17.7497 6.34186 17.0721 4.51182 15.7802 3.21983C14.4882 1.92783 12.6581 1.25031 10.5 1.25031C10.0858 1.25031 9.75 1.5861 9.75 2.00031C9.75 2.41453 10.0858 2.75031 10.5 2.75031C12.3419 2.75031 13.7617 3.32264 14.7195 4.28049C15.6773 5.23834 16.2497 6.65814 16.2497 8.5L16.2497 20.4393L12.53 16.7197C12.2371 16.4268 11.7622 16.4268 11.4693 16.7197C11.1764 17.0126 11.1764 17.4874 11.4693 17.7803L16.4693 22.7803L16.9997 23.3107L17.53 22.7803ZM1 6.25C0.585786 6.25 0.25 6.58579 0.25 7C0.25 7.41421 0.585786 7.75 1 7.75H10C10.4142 7.75 10.75 7.41421 10.75 7C10.75 6.58579 10.4142 6.25 10 6.25H1ZM0.25 12C0.25 11.5858 0.585786 11.25 1 11.25H12C12.4142 11.25 12.75 11.5858 12.75 12C12.75 12.4142 12.4142 12.75 12 12.75H1C0.585786 12.75 0.25 12.4142 0.25 12ZM1 16.25C0.585786 16.25 0.25 16.5858 0.25 17C0.25 17.4142 0.585786 17.75 1 17.75H8C8.41421 17.75 8.75 17.4142 8.75 17C8.75 16.5858 8.41421 16.25 8 16.25H1Z" data-v-48fb2d7a></path></svg><!----></div></div></div></div></div><div class="layout__main__content__body__wrapper" data-v-58560e81><div style="width:100%;" data-v-c85ed208 data-v-58560e81><div class="search__container" data-v-c85ed208><div class="search" data-v-c85ed208><div class="search__icon" data-v-c85ed208><svg width="100%" height="100%" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" data-v-c85ed208><path fill-rule="evenodd" clip-rule="evenodd" d="M11.5 2.75C6.66751 2.75 2.75 6.66751 2.75 11.5C2.75 16.3325 6.66751 20.25 11.5 20.25C13.6462 20.25 15.612 19.4773 17.1342 18.1949L22.6697 23.7303C22.9626 24.0232 23.4374 24.0232 23.7303 23.7303C24.0232 23.4374 24.0232 22.9626 23.7303 22.6697L18.1949 17.1342C19.4773 15.612 20.25 13.6462 20.25 11.5C20.25 6.66751 16.3325 2.75 11.5 2.75ZM16.6923 16.5599C17.9656 15.2535 18.75 13.4684 18.75 11.5C18.75 7.49594 15.5041 4.25 11.5 4.25C7.49594 4.25 4.25 7.49594 4.25 11.5C4.25 15.5041 7.49594 18.75 11.5 18.75C13.4684 18.75 15.2535 17.9656 16.5599 16.6923C16.5789 16.6679 16.5996 16.6444 16.622 16.622C16.6444 16.5996 16.6679 16.5789 16.6923 16.5599Z"></path></svg></div><div class="search__text" data-v-c85ed208>Search</div></div></div><div class="container" data-v-c85ed208><div class="content__default" data-v-58560e81><h1 id="methods-and-types"><a href="#methods-and-types" class="header-anchor">#</a> Methods and Types</h1> <h2 id="connections"><a href="#connections" class="header-anchor">#</a> Connections</h2> <p>ABCI applications can run either within the <em>same</em> process as the Tendermint
|
||
state-machine replication engine, or as a <em>separate</em> process from the state-machine
|
||
replication engine. When run within the same process, Tendermint will call the ABCI
|
||
application methods directly as Go method calls.</p> <p>When Tendermint and the ABCI application are run as separate processes, Tendermint
|
||
opens maintains a connection over either a native socket protocol or
|
||
gRPC.</p> <p>More details on managing state across connections can be found in the
|
||
section on <a href="/master/spec/abci/apps.html">ABCI Applications</a>.</p> <h2 id="errors"><a href="#errors" class="header-anchor">#</a> Errors</h2> <p>The <code>Query</code>, <code>CheckTx</code> and <code>DeliverTx</code> methods include a <code>Code</code> field in their <code>Response*</code>.
|
||
This field is meant to contain an application-specific response code.
|
||
A response code of <code>0</code> indicates no error. Any other response code
|
||
indicates to Tendermint that an error occurred.</p> <p>These methods also return a <code>Codespace</code> string to Tendermint. This field is
|
||
used to disambiguate <code>Code</code> values returned by different domains of the
|
||
application. The <code>Codespace</code> is a namespace for the <code>Code</code>.</p> <p>The handling of non-zero response codes by Tendermint is described
|
||
below.</p> <p>Applications should always terminate if they encounter an issue in a
|
||
method where continuing would corrupt their own state, or for which
|
||
tendermint should not continue.</p> <p>In the Go implementation these methods take a context and may return
|
||
an error. The context exists so that applications can terminate
|
||
gracefully during shutdown, and the error return value makes it
|
||
possible for applications to signal transient errors to Tendermint.</p> <h3 id="checktx"><a href="#checktx" class="header-anchor">#</a> CheckTx</h3> <p>The <code>CheckTx</code> ABCI method controls what transactions are considered for inclusion in a block.
|
||
When Tendermint receives a <code>ResponseCheckTx</code> with a non-zero <code>Code</code>, the associated
|
||
transaction will not be added to Tendermint's mempool or it will be removed if
|
||
it is already included.</p> <h3 id="delivertx"><a href="#delivertx" class="header-anchor">#</a> DeliverTx</h3> <p>The <code>DeliverTx</code> ABCI method delivers transactions from Tendermint to the application.
|
||
When Tendermint recieves a <code>ResponseDeliverTx</code> with a non-zero <code>Code</code>, the response code is logged.
|
||
The transaction was already included in a block, so the <code>Code</code> does not influence
|
||
Tendermint consensus.</p> <h3 id="query"><a href="#query" class="header-anchor">#</a> Query</h3> <p>The <code>Query</code> ABCI method query queries the application for information about application state.
|
||
When Tendermint receives a <code>ResponseQuery</code> with a non-zero <code>Code</code>, this code is
|
||
returned directly to the client that initiated the query.</p> <h2 id="events"><a href="#events" class="header-anchor">#</a> Events</h2> <p>The <code>CheckTx</code>, <code>BeginBlock</code>, <code>DeliverTx</code>, <code>EndBlock</code> methods include an <code>Events</code>
|
||
field in their <code>Response*</code>. Applications may respond to these ABCI methods with a set of events.
|
||
Events allow applications to associate metadata about ABCI method execution with the
|
||
transactions and blocks this metadata relates to.
|
||
Events returned via these ABCI methods do not impact Tendermint consensus in any way
|
||
and instead exist to power subscriptions and queries of Tendermint state.</p> <p>An <code>Event</code> contains a <code>type</code> and a list of <code>EventAttributes</code>, which are key-value
|
||
string pairs denoting metadata about what happened during the method's execution.
|
||
<code>Event</code> values can be used to index transactions and blocks according to what happened
|
||
during their execution. Note that the set of events returned for a block from
|
||
<code>BeginBlock</code> and <code>EndBlock</code> are merged. In case both methods return the same
|
||
key, only the value defined in <code>EndBlock</code> is used.</p> <p>Each event has a <code>type</code> which is meant to categorize the event for a particular
|
||
<code>Response*</code> or <code>Tx</code>. A <code>Response*</code> or <code>Tx</code> may contain multiple events with duplicate
|
||
<code>type</code> values, where each distinct entry is meant to categorize attributes for a
|
||
particular event. Every key and value in an event's attributes must be UTF-8
|
||
encoded strings along with the event type itself.</p> <span class="codeblock" data-v-1eda75b2><span class="container codeblock__hasfooter__false codeblock__is-expandable__false codeblock__expanded__false" data-v-1eda75b2><span class="body__container" data-v-1eda75b2><span class="body__block" data-v-1eda75b2><span class="icons" data-v-1eda75b2><!----> <span class="icons__item" data-v-1eda75b2><svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="icons__item__icon" data-v-1eda75b2><path fill-rule="evenodd" clip-rule="evenodd" d="M11 0.25C10.0335 0.25 9.25 1.0335 9.25 2V4.5H10.75V2C10.75 1.86193 10.8619 1.75 11 1.75H21C21.1381 1.75 21.25 1.86193 21.25 2V16C21.25 16.1381 21.1381 16.25 21 16.25H16.5V17.75H21C21.9665 17.75 22.75 16.9665 22.75 16V2C22.75 1.0335 21.9665 0.25 21 0.25H11ZM3 6.25C2.0335 6.25 1.25 7.0335 1.25 8V22C1.25 22.9665 2.0335 23.75 3 23.75H13C13.9665 23.75 14.75 22.9665 14.75 22V8C14.75 7.0335 13.9665 6.25 13 6.25H3ZM2.75 8C2.75 7.86193 2.86193 7.75 3 7.75H13C13.1381 7.75 13.25 7.86193 13.25 8V22C13.25 22.1381 13.1381 22.25 13 22.25H3C2.86193 22.25 2.75 22.1381 2.75 22V8Z" data-v-1eda75b2></path></svg> <span class="icons__item__tooltip" data-v-1eda75b2>
|
||
Copy
|
||
</span></span></span> <span class="body" data-v-1eda75b2><span class="body__wrapper" data-v-1eda75b2><span class="body__code" data-v-1eda75b2><span class="token keyword">message</span> <span class="token class-name">Event</span> <span class="token punctuation">{</span>
|
||
<span class="token builtin">string</span> type <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">repeated</span> <span class="token positional-class-name class-name">EventAttribute</span> attributes <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
</span></span></span></span> <!----></span> <!----></span></span> <p>The attributes of an <code>Event</code> consist of a <code>key</code>, a <code>value</code>, and an <code>index</code> flag. The
|
||
index flag notifies the Tendermint indexer to index the attribute. The value of
|
||
the <code>index</code> flag is non-deterministic and may vary across different nodes in the network.</p> <span class="codeblock" data-v-1eda75b2><span class="container codeblock__hasfooter__false codeblock__is-expandable__false codeblock__expanded__false" data-v-1eda75b2><span class="body__container" data-v-1eda75b2><span class="body__block" data-v-1eda75b2><span class="icons" data-v-1eda75b2><!----> <span class="icons__item" data-v-1eda75b2><svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="icons__item__icon" data-v-1eda75b2><path fill-rule="evenodd" clip-rule="evenodd" d="M11 0.25C10.0335 0.25 9.25 1.0335 9.25 2V4.5H10.75V2C10.75 1.86193 10.8619 1.75 11 1.75H21C21.1381 1.75 21.25 1.86193 21.25 2V16C21.25 16.1381 21.1381 16.25 21 16.25H16.5V17.75H21C21.9665 17.75 22.75 16.9665 22.75 16V2C22.75 1.0335 21.9665 0.25 21 0.25H11ZM3 6.25C2.0335 6.25 1.25 7.0335 1.25 8V22C1.25 22.9665 2.0335 23.75 3 23.75H13C13.9665 23.75 14.75 22.9665 14.75 22V8C14.75 7.0335 13.9665 6.25 13 6.25H3ZM2.75 8C2.75 7.86193 2.86193 7.75 3 7.75H13C13.1381 7.75 13.25 7.86193 13.25 8V22C13.25 22.1381 13.1381 22.25 13 22.25H3C2.86193 22.25 2.75 22.1381 2.75 22V8Z" data-v-1eda75b2></path></svg> <span class="icons__item__tooltip" data-v-1eda75b2>
|
||
Copy
|
||
</span></span></span> <span class="body" data-v-1eda75b2><span class="body__wrapper" data-v-1eda75b2><span class="body__code" data-v-1eda75b2><span class="token keyword">message</span> <span class="token class-name">EventAttribute</span> <span class="token punctuation">{</span>
|
||
<span class="token builtin">bytes</span> key <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token builtin">bytes</span> value <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
<span class="token builtin">bool</span> index <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">;</span> <span class="token comment">// nondeterministic</span>
|
||
<span class="token punctuation">}</span>
|
||
</span></span></span></span> <!----></span> <!----></span></span> <p>Example:</p> <span class="codeblock" data-v-1eda75b2><span class="container codeblock__hasfooter__false codeblock__is-expandable__false codeblock__expanded__false" data-v-1eda75b2><span class="body__container" data-v-1eda75b2><span class="body__block" data-v-1eda75b2><span class="icons" data-v-1eda75b2><!----> <span class="icons__item" data-v-1eda75b2><svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="icons__item__icon" data-v-1eda75b2><path fill-rule="evenodd" clip-rule="evenodd" d="M11 0.25C10.0335 0.25 9.25 1.0335 9.25 2V4.5H10.75V2C10.75 1.86193 10.8619 1.75 11 1.75H21C21.1381 1.75 21.25 1.86193 21.25 2V16C21.25 16.1381 21.1381 16.25 21 16.25H16.5V17.75H21C21.9665 17.75 22.75 16.9665 22.75 16V2C22.75 1.0335 21.9665 0.25 21 0.25H11ZM3 6.25C2.0335 6.25 1.25 7.0335 1.25 8V22C1.25 22.9665 2.0335 23.75 3 23.75H13C13.9665 23.75 14.75 22.9665 14.75 22V8C14.75 7.0335 13.9665 6.25 13 6.25H3ZM2.75 8C2.75 7.86193 2.86193 7.75 3 7.75H13C13.1381 7.75 13.25 7.86193 13.25 8V22C13.25 22.1381 13.1381 22.25 13 22.25H3C2.86193 22.25 2.75 22.1381 2.75 22V8Z" data-v-1eda75b2></path></svg> <span class="icons__item__tooltip" data-v-1eda75b2>
|
||
Copy
|
||
</span></span></span> <span class="body" data-v-1eda75b2><span class="body__wrapper" data-v-1eda75b2><span class="body__code" data-v-1eda75b2> abci<span class="token punctuation">.</span>ResponseDeliverTx<span class="token punctuation">{</span>
|
||
<span class="token comment">// ...</span>
|
||
Events<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>abci<span class="token punctuation">.</span>Event<span class="token punctuation">{</span>
|
||
<span class="token punctuation">{</span>
|
||
Type<span class="token punctuation">:</span> <span class="token string">"validator.provisions"</span><span class="token punctuation">,</span>
|
||
Attributes<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>
|
||
abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>Key<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"address"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Value<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"..."</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Index<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>Key<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"amount"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Value<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"..."</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Index<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>Key<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"balance"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Value<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"..."</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Index<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">{</span>
|
||
Type<span class="token punctuation">:</span> <span class="token string">"validator.provisions"</span><span class="token punctuation">,</span>
|
||
Attributes<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>
|
||
abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>Key<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"address"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Value<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"..."</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Index<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>Key<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"amount"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Value<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"..."</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Index<span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>Key<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"balance"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Value<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"..."</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Index<span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">{</span>
|
||
Type<span class="token punctuation">:</span> <span class="token string">"validator.slashed"</span><span class="token punctuation">,</span>
|
||
Attributes<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>
|
||
abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>Key<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"address"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Value<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"..."</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Index<span class="token punctuation">:</span> <span class="token boolean">false</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>Key<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"amount"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Value<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"..."</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Index<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
abci<span class="token punctuation">.</span>EventAttribute<span class="token punctuation">{</span>Key<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"reason"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Value<span class="token punctuation">:</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">"..."</span><span class="token punctuation">)</span><span class="token punctuation">,</span> Index<span class="token punctuation">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token comment">// ...</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">,</span>
|
||
<span class="token punctuation">}</span>
|
||
</span></span></span></span> <!----></span> <!----></span></span> <h2 id="evidencetype"><a href="#evidencetype" class="header-anchor">#</a> EvidenceType</h2> <p>Tendermint's security model relies on the use of "evidence". Evidence is proof of
|
||
malicious behaviour by a network participant. It is the responsibility of Tendermint
|
||
to detect such malicious behaviour. When malicious behavior is detected, Tendermint
|
||
will gossip evidence of the behavior to other nodes and commit the evidence to
|
||
the chain once it is verified by all validators. This evidence will then be
|
||
passed it on to the application through the ABCI. It is the responsibility of the
|
||
application to handle the evidence and exercise punishment.</p> <p>EvidenceType has the following protobuf format:</p> <span class="codeblock" data-v-1eda75b2><span class="container codeblock__hasfooter__false codeblock__is-expandable__false codeblock__expanded__false" data-v-1eda75b2><span class="body__container" data-v-1eda75b2><span class="body__block" data-v-1eda75b2><span class="icons" data-v-1eda75b2><!----> <span class="icons__item" data-v-1eda75b2><svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="icons__item__icon" data-v-1eda75b2><path fill-rule="evenodd" clip-rule="evenodd" d="M11 0.25C10.0335 0.25 9.25 1.0335 9.25 2V4.5H10.75V2C10.75 1.86193 10.8619 1.75 11 1.75H21C21.1381 1.75 21.25 1.86193 21.25 2V16C21.25 16.1381 21.1381 16.25 21 16.25H16.5V17.75H21C21.9665 17.75 22.75 16.9665 22.75 16V2C22.75 1.0335 21.9665 0.25 21 0.25H11ZM3 6.25C2.0335 6.25 1.25 7.0335 1.25 8V22C1.25 22.9665 2.0335 23.75 3 23.75H13C13.9665 23.75 14.75 22.9665 14.75 22V8C14.75 7.0335 13.9665 6.25 13 6.25H3ZM2.75 8C2.75 7.86193 2.86193 7.75 3 7.75H13C13.1381 7.75 13.25 7.86193 13.25 8V22C13.25 22.1381 13.1381 22.25 13 22.25H3C2.86193 22.25 2.75 22.1381 2.75 22V8Z" data-v-1eda75b2></path></svg> <span class="icons__item__tooltip" data-v-1eda75b2>
|
||
Copy
|
||
</span></span></span> <span class="body" data-v-1eda75b2><span class="body__wrapper" data-v-1eda75b2><span class="body__code" data-v-1eda75b2>enum EvidenceType {
|
||
UNKNOWN = 0;
|
||
DUPLICATE_VOTE = 1;
|
||
LIGHT_CLIENT_ATTACK = 2;
|
||
}
|
||
</span></span></span></span> <!----></span> <!----></span></span> <p>There are two forms of evidence: Duplicate Vote and Light Client Attack. More
|
||
information can be found in either <a href="/master/spec/core/data_structures.html">data structures</a>
|
||
or <a href="/master/spec/light-client/accountability/">accountability</a></p> <h2 id="determinism"><a href="#determinism" class="header-anchor">#</a> Determinism</h2> <p>ABCI applications must implement deterministic finite-state machines to be
|
||
securely replicated by the Tendermint consensus engine. This means block execution
|
||
over the Consensus Connection must be strictly deterministic: given the same
|
||
ordered set of requests, all nodes will compute identical responses, for all
|
||
BeginBlock, DeliverTx, EndBlock, and Commit. This is critical, because the
|
||
responses are included in the header of the next block, either via a Merkle root
|
||
or directly, so all nodes must agree on exactly what they are.</p> <p>For this reason, it is recommended that applications not be exposed to any
|
||
external user or process except via the ABCI connections to a consensus engine
|
||
like Tendermint Core. The application must only change its state based on input
|
||
from block execution (BeginBlock, DeliverTx, EndBlock, Commit), and not through
|
||
any other kind of request. This is the only way to ensure all nodes see the same
|
||
transactions and compute the same results.</p> <p>If there is some non-determinism in the state machine, consensus will eventually
|
||
fail as nodes disagree over the correct values for the block header. The
|
||
non-determinism must be fixed and the nodes restarted.</p> <p>Sources of non-determinism in applications may include:</p> <ul><li>Hardware failures
|
||
<ul><li>Cosmic rays, overheating, etc.</li></ul></li> <li>Node-dependent state
|
||
<ul><li>Random numbers</li> <li>Time</li></ul></li> <li>Underspecification
|
||
<ul><li>Library version changes</li> <li>Race conditions</li> <li>Floating point numbers</li> <li>JSON serialization</li> <li>Iterating through hash-tables/maps/dictionaries</li></ul></li> <li>External Sources
|
||
<ul><li>Filesystem</li> <li>Network calls (eg. some external REST API service)</li></ul></li></ul> <p>See <a href="https://github.com/tendermint/abci/issues/56" target="_blank" rel="noopener noreferrer">#56<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a> for original discussion.</p> <p>Note that some methods (<code>Query, CheckTx, DeliverTx</code>) return
|
||
explicitly non-deterministic data in the form of <code>Info</code> and <code>Log</code> fields. The <code>Log</code> is
|
||
intended for the literal output from the application's logger, while the
|
||
<code>Info</code> is any additional info that should be returned. These are the only fields
|
||
that are not included in block header computations, so we don't need agreement
|
||
on them. All other fields in the <code>Response*</code> must be strictly deterministic.</p> <h2 id="block-execution"><a href="#block-execution" class="header-anchor">#</a> Block Execution</h2> <p>The first time a new blockchain is started, Tendermint calls
|
||
<code>InitChain</code>. From then on, the following sequence of methods is executed for each
|
||
block:</p> <p><code>BeginBlock, [DeliverTx], EndBlock, Commit</code></p> <p>where one <code>DeliverTx</code> is called for each transaction in the block.
|
||
The result is an updated application state.
|
||
Cryptographic commitments to the results of DeliverTx, EndBlock, and
|
||
Commit are included in the header of the next block.</p> <h2 id="state-sync"><a href="#state-sync" class="header-anchor">#</a> State Sync</h2> <p>State sync allows new nodes to rapidly bootstrap by discovering, fetching, and applying
|
||
state machine snapshots instead of replaying historical blocks. For more details, see the
|
||
<a href="/master/spec/p2p/messages/state-sync.html">state sync section</a>.</p> <p>New nodes will discover and request snapshots from other nodes in the P2P network.
|
||
A Tendermint node that receives a request for snapshots from a peer will call
|
||
<code>ListSnapshots</code> on its application to retrieve any local state snapshots. After receiving
|
||
snapshots from peers, the new node will offer each snapshot received from a peer
|
||
to its local application via the <code>OfferSnapshot</code> method.</p> <p>Snapshots may be quite large and are thus broken into smaller "chunks" that can be
|
||
assembled into the whole snapshot. Once the application accepts a snapshot and
|
||
begins restoring it, Tendermint will fetch snapshot "chunks" from existing nodes.
|
||
The node providing "chunks" will fetch them from its local application using
|
||
the <code>LoadSnapshotChunk</code> method.</p> <p>As the new node receives "chunks" it will apply them sequentially to the local
|
||
application with <code>ApplySnapshotChunk</code>. When all chunks have been applied, the application
|
||
<code>AppHash</code> is retrieved via an <code>Info</code> query. The <code>AppHash</code> is then compared to
|
||
the blockchain's <code>AppHash</code> which is verified via <a href="/master/spec/light-client/verification/">light client verification</a>.</p> <h2 id="messages"><a href="#messages" class="header-anchor">#</a> Messages</h2> <h3 id="echo"><a href="#echo" class="header-anchor">#</a> Echo</h3> <ul><li><strong>Request</strong>:
|
||
<ul><li><code>Message (string)</code>: A string to echo back</li></ul></li> <li><strong>Response</strong>:
|
||
<ul><li><code>Message (string)</code>: The input string</li></ul></li> <li><strong>Usage</strong>:
|
||
<ul><li>Echo a string to test an abci client/server implementation</li></ul></li></ul> <h3 id="flush"><a href="#flush" class="header-anchor">#</a> Flush</h3> <ul><li><strong>Usage</strong>:
|
||
<ul><li>Signals that messages queued on the client should be flushed to
|
||
the server. It is called periodically by the client
|
||
implementation to ensure asynchronous requests are actually
|
||
sent, and is called immediately to make a synchronous request,
|
||
which returns when the Flush response comes back.</li></ul></li></ul> <h3 id="info"><a href="#info" class="header-anchor">#</a> Info</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>version</td> <td>string</td> <td>The Tendermint software semantic version</td> <td>1</td></tr> <tr><td>block_version</td> <td>uint64</td> <td>The Tendermint Block Protocol version</td> <td>2</td></tr> <tr><td>p2p_version</td> <td>uint64</td> <td>The Tendermint P2P Protocol version</td> <td>3</td></tr> <tr><td>abci_version</td> <td>string</td> <td>The Tendermint ABCI semantic version</td> <td>4</td></tr></tbody></table></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>data</td> <td>string</td> <td>Some arbitrary information</td> <td>1</td></tr> <tr><td>version</td> <td>string</td> <td>The application software semantic version</td> <td>2</td></tr> <tr><td>app_version</td> <td>uint64</td> <td>The application protocol version</td> <td>3</td></tr> <tr><td>last_block_height</td> <td>int64</td> <td>Latest block for which the app has called Commit</td> <td>4</td></tr> <tr><td>last_block_app_hash</td> <td>bytes</td> <td>Latest result of Commit</td> <td>5</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Return information about the application state.</li> <li>Used to sync Tendermint with the application during a handshake
|
||
that happens on startup.</li> <li>The returned <code>app_version</code> will be included in the Header of every block.</li> <li>Tendermint expects <code>last_block_app_hash</code> and <code>last_block_height</code> to
|
||
be updated during <code>Commit</code>, ensuring that <code>Commit</code> is never
|
||
called twice for the same block height.</li></ul></li></ul> <blockquote><p>Note: Semantic version is a reference to <a href="https://semver.org/" target="_blank" rel="noopener noreferrer">semantic versioning<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a>. Semantic versions in info will be displayed as X.X.x.</p></blockquote> <h3 id="initchain"><a href="#initchain" class="header-anchor">#</a> InitChain</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>time</td> <td><a href="https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Timestamp" target="_blank" rel="noopener noreferrer">google.protobuf.Timestamp<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></td> <td>Genesis time</td> <td>1</td></tr> <tr><td>chain_id</td> <td>string</td> <td>ID of the blockchain.</td> <td>2</td></tr> <tr><td>consensus_params</td> <td><a href="#consensusparams">ConsensusParams</a></td> <td>Initial consensus-critical parameters.</td> <td>3</td></tr> <tr><td>validators</td> <td>repeated <a href="#validatorupdate">ValidatorUpdate</a></td> <td>Initial genesis validators, sorted by voting power.</td> <td>4</td></tr> <tr><td>app_state_bytes</td> <td>bytes</td> <td>Serialized initial application state. JSON bytes.</td> <td>5</td></tr> <tr><td>initial_height</td> <td>int64</td> <td>Height of the initial block (typically <code>1</code>).</td> <td>6</td></tr></tbody></table></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>consensus_params</td> <td><a href="#consensusparams">ConsensusParams</a></td> <td>Initial consensus-critical parameters (optional</td> <td>1</td></tr> <tr><td>validators</td> <td>repeated <a href="#validatorupdate">ValidatorUpdate</a></td> <td>Initial validator set (optional).</td> <td>2</td></tr> <tr><td>app_hash</td> <td>bytes</td> <td>Initial application hash.</td> <td>3</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Called once upon genesis.</li> <li>If ResponseInitChain.Validators is empty, the initial validator set will be the RequestInitChain.Validators</li> <li>If ResponseInitChain.Validators is not empty, it will be the initial
|
||
validator set (regardless of what is in RequestInitChain.Validators).</li> <li>This allows the app to decide if it wants to accept the initial validator
|
||
set proposed by tendermint (ie. in the genesis file), or if it wants to use
|
||
a different one (perhaps computed based on some application specific
|
||
information in the genesis file).</li></ul></li></ul> <h3 id="query-2"><a href="#query-2" class="header-anchor">#</a> Query</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>data</td> <td>bytes</td> <td>Raw query bytes. Can be used with or in lieu of Path.</td> <td>1</td></tr> <tr><td>path</td> <td>string</td> <td>Path field of the request URI. Can be used with or in lieu of <code>data</code>. Apps MUST interpret <code>/store</code> as a query by key on the underlying store. The key SHOULD be specified in the <code>data</code> field. Apps SHOULD allow queries over specific types like <code>/accounts/...</code> or <code>/votes/...</code></td> <td>2</td></tr> <tr><td>height</td> <td>int64</td> <td>The block height for which you want the query (default=0 returns data for the latest committed block). Note that this is the height of the block containing the application's Merkle root hash, which represents the state as it was after committing the block at Height-1</td> <td>3</td></tr> <tr><td>prove</td> <td>bool</td> <td>Return Merkle proof with response if possible</td> <td>4</td></tr></tbody></table></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>code</td> <td>uint32</td> <td>Response code.</td> <td>1</td></tr> <tr><td>log</td> <td>string</td> <td>The output of the application's logger. <strong>May be non-deterministic.</strong></td> <td>3</td></tr> <tr><td>info</td> <td>string</td> <td>Additional information. <strong>May be non-deterministic.</strong></td> <td>4</td></tr> <tr><td>index</td> <td>int64</td> <td>The index of the key in the tree.</td> <td>5</td></tr> <tr><td>key</td> <td>bytes</td> <td>The key of the matching data.</td> <td>6</td></tr> <tr><td>value</td> <td>bytes</td> <td>The value of the matching data.</td> <td>7</td></tr> <tr><td>proof_ops</td> <td><a href="#proofops">ProofOps</a></td> <td>Serialized proof for the value data, if requested, to be verified against the <code>app_hash</code> for the given Height.</td> <td>8</td></tr> <tr><td>height</td> <td>int64</td> <td>The block height from which data was derived. Note that this is the height of the block containing the application's Merkle root hash, which represents the state as it was after committing the block at Height-1</td> <td>9</td></tr> <tr><td>codespace</td> <td>string</td> <td>Namespace for the <code>code</code>.</td> <td>10</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Query for data from the application at current or past height.</li> <li>Optionally return Merkle proof.</li> <li>Merkle proof includes self-describing <code>type</code> field to support many types
|
||
of Merkle trees and encoding formats.</li></ul></li></ul> <h3 id="beginblock"><a href="#beginblock" class="header-anchor">#</a> BeginBlock</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>hash</td> <td>bytes</td> <td>The block's hash. This can be derived from the block header.</td> <td>1</td></tr> <tr><td>header</td> <td><a href="/master/spec/core/data_structures.html#header">Header</a></td> <td>The block header.</td> <td>2</td></tr> <tr><td>last_commit_info</td> <td><a href="#lastcommitinfo">LastCommitInfo</a></td> <td>Info about the last commit, including the round, and the list of validators and which ones signed the last block.</td> <td>3</td></tr> <tr><td>byzantine_validators</td> <td>repeated <a href="#evidence">Evidence</a></td> <td>List of evidence of validators that acted maliciously.</td> <td>4</td></tr></tbody></table></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>events</td> <td>repeated <a href="#events">Event</a></td> <td>type & Key-Value events for indexing</td> <td>1</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Signals the beginning of a new block.</li> <li>Called prior to any <code>DeliverTx</code> method calls.</li> <li>The header contains the height, timestamp, and more - it exactly matches the
|
||
Tendermint block header. We may seek to generalize this in the future.</li> <li>The <code>LastCommitInfo</code> and <code>ByzantineValidators</code> can be used to determine
|
||
rewards and punishments for the validators.</li></ul></li></ul> <h3 id="checktx-2"><a href="#checktx-2" class="header-anchor">#</a> CheckTx</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>tx</td> <td>bytes</td> <td>The request transaction bytes</td> <td>1</td></tr> <tr><td>type</td> <td>CheckTxType</td> <td>One of <code>CheckTx_New</code> or <code>CheckTx_Recheck</code>. <code>CheckTx_New</code> is the default and means that a full check of the tranasaction is required. <code>CheckTx_Recheck</code> types are used when the mempool is initiating a normal recheck of a transaction.</td> <td>2</td></tr></tbody></table></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>code</td> <td>uint32</td> <td>Response code.</td> <td>1</td></tr> <tr><td>data</td> <td>bytes</td> <td>Result bytes, if any.</td> <td>2</td></tr> <tr><td>log</td> <td>string</td> <td>The output of the application's logger. <strong>May be non-deterministic.</strong></td> <td>3</td></tr> <tr><td>info</td> <td>string</td> <td>Additional information. <strong>May be non-deterministic.</strong></td> <td>4</td></tr> <tr><td>gas_wanted</td> <td>int64</td> <td>Amount of gas requested for transaction.</td> <td>5</td></tr> <tr><td>gas_used</td> <td>int64</td> <td>Amount of gas consumed by transaction.</td> <td>6</td></tr> <tr><td>events</td> <td>repeated <a href="#events">Event</a></td> <td>Type & Key-Value events for indexing transactions (eg. by account).</td> <td>7</td></tr> <tr><td>codespace</td> <td>string</td> <td>Namespace for the <code>code</code>.</td> <td>8</td></tr> <tr><td>sender</td> <td>string</td> <td>The transaction's sender (e.g. the signer)</td> <td>9</td></tr> <tr><td>priority</td> <td>int64</td> <td>The transaction's priority (for mempool ordering)</td> <td>10</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Technically optional - not involved in processing blocks.</li> <li>Guardian of the mempool: every node runs <code>CheckTx</code> before letting a
|
||
transaction into its local mempool.</li> <li>The transaction may come from an external user or another node</li> <li><code>CheckTx</code> validates the transaction against the current state of the application,
|
||
for example, checking signatures and account balances, but does not apply any
|
||
of the state changes described in the transaction.
|
||
not running code in a virtual machine.</li> <li>Transactions where <code>ResponseCheckTx.Code != 0</code> will be rejected - they will not be broadcast to
|
||
other nodes or included in a proposal block.</li> <li>Tendermint attributes no other value to the response code</li></ul></li></ul> <h3 id="delivertx-2"><a href="#delivertx-2" class="header-anchor">#</a> DeliverTx</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>tx</td> <td>bytes</td> <td>The request transaction bytes.</td> <td>1</td></tr></tbody></table></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>code</td> <td>uint32</td> <td>Response code.</td> <td>1</td></tr> <tr><td>data</td> <td>bytes</td> <td>Result bytes, if any.</td> <td>2</td></tr> <tr><td>log</td> <td>string</td> <td>The output of the application's logger. <strong>May be non-deterministic.</strong></td> <td>3</td></tr> <tr><td>info</td> <td>string</td> <td>Additional information. <strong>May be non-deterministic.</strong></td> <td>4</td></tr> <tr><td>gas_wanted</td> <td>int64</td> <td>Amount of gas requested for transaction.</td> <td>5</td></tr> <tr><td>gas_used</td> <td>int64</td> <td>Amount of gas consumed by transaction.</td> <td>6</td></tr> <tr><td>events</td> <td>repeated <a href="#events">Event</a></td> <td>Type & Key-Value events for indexing transactions (eg. by account).</td> <td>7</td></tr> <tr><td>codespace</td> <td>string</td> <td>Namespace for the <code>code</code>.</td> <td>8</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>[<strong>Required</strong>] The core method of the application.</li> <li>When <code>DeliverTx</code> is called, the application must execute the transaction in full before returning control to Tendermint.</li> <li><code>ResponseDeliverTx.Code == 0</code> only if the transaction is fully valid.</li></ul></li></ul> <h3 id="endblock"><a href="#endblock" class="header-anchor">#</a> EndBlock</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>height</td> <td>int64</td> <td>Height of the block just executed.</td> <td>1</td></tr></tbody></table></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>validator_updates</td> <td>repeated <a href="#validatorupdate">ValidatorUpdate</a></td> <td>Changes to validator set (set voting power to 0 to remove).</td> <td>1</td></tr> <tr><td>consensus_param_updates</td> <td><a href="#consensusparams">ConsensusParams</a></td> <td>Changes to consensus-critical time, size, and other parameters.</td> <td>2</td></tr> <tr><td>events</td> <td>repeated <a href="#events">Event</a></td> <td>Type & Key-Value events for indexing</td> <td>3</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Signals the end of a block.</li> <li>Called after all the transactions for the current block have been delivered, prior to the block's <code>Commit</code> message.</li> <li>Optional <code>validator_updates</code> triggered by block <code>H</code>. These updates affect validation
|
||
for blocks <code>H+1</code>, <code>H+2</code>, and <code>H+3</code>.</li> <li>Heights following a validator update are affected in the following way:
|
||
<ul><li><code>H+1</code>: <code>NextValidatorsHash</code> includes the new <code>validator_updates</code> value.</li> <li><code>H+2</code>: The validator set change takes effect and <code>ValidatorsHash</code> is updated.</li> <li><code>H+3</code>: <code>LastCommitInfo</code> is changed to include the altered validator set.</li></ul></li> <li><code>consensus_param_updates</code> returned for block <code>H</code> apply to the consensus
|
||
params for block <code>H+1</code>. For more information on the consensus parameters,
|
||
see the <a href="/master/spec/abci/apps.html#consensus-parameters">application spec entry on consensus parameters</a>.</li></ul></li></ul> <h3 id="commit"><a href="#commit" class="header-anchor">#</a> Commit</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody></tbody></table> <p>Commit signals the application to persist application state. It takes no parameters.</p></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>data</td> <td>bytes</td> <td>The Merkle root hash of the application state.</td> <td>2</td></tr> <tr><td>retain_height</td> <td>int64</td> <td>Blocks below this height may be removed. Defaults to <code>0</code> (retain all).</td> <td>3</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Signal the application to persist the application state.</li> <li>Return an (optional) Merkle root hash of the application state</li> <li><code>ResponseCommit.Data</code> is included as the <code>Header.AppHash</code> in the next block
|
||
<ul><li>it may be empty</li></ul></li> <li>Later calls to <code>Query</code> can return proofs about the application state anchored
|
||
in this Merkle root hash</li> <li>Note developers can return whatever they want here (could be nothing, or a
|
||
constant string, etc.), so long as it is deterministic - it must not be a
|
||
function of anything that did not come from the
|
||
BeginBlock/DeliverTx/EndBlock methods.</li> <li>Use <code>RetainHeight</code> with caution! If all nodes in the network remove historical
|
||
blocks then this data is permanently lost, and no new nodes will be able to
|
||
join the network and bootstrap. Historical blocks may also be required for
|
||
other purposes, e.g. auditing, replay of non-persisted heights, light client
|
||
verification, and so on.</li></ul></li></ul> <h3 id="listsnapshots"><a href="#listsnapshots" class="header-anchor">#</a> ListSnapshots</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody></tbody></table> <p>Empty request asking the application for a list of snapshots.</p></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>snapshots</td> <td>repeated <a href="#snapshot">Snapshot</a></td> <td>List of local state snapshots.</td> <td>1</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Used during state sync to discover available snapshots on peers.</li> <li>See <code>Snapshot</code> data type for details.</li></ul></li></ul> <h3 id="loadsnapshotchunk"><a href="#loadsnapshotchunk" class="header-anchor">#</a> LoadSnapshotChunk</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>height</td> <td>uint64</td> <td>The height of the snapshot the chunks belongs to.</td> <td>1</td></tr> <tr><td>format</td> <td>uint32</td> <td>The application-specific format of the snapshot the chunk belongs to.</td> <td>2</td></tr> <tr><td>chunk</td> <td>uint32</td> <td>The chunk index, starting from <code>0</code> for the initial chunk.</td> <td>3</td></tr></tbody></table></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>chunk</td> <td>bytes</td> <td>The binary chunk contents, in an arbitray format. Chunk messages cannot be larger than 16 MB <em>including metadata</em>, so 10 MB is a good starting point.</td> <td>1</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Used during state sync to retrieve snapshot chunks from peers.</li></ul></li></ul> <h3 id="offersnapshot"><a href="#offersnapshot" class="header-anchor">#</a> OfferSnapshot</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>snapshot</td> <td><a href="#snapshot">Snapshot</a></td> <td>The snapshot offered for restoration.</td> <td>1</td></tr> <tr><td>app_hash</td> <td>bytes</td> <td>The light client-verified app hash for this height, from the blockchain.</td> <td>2</td></tr></tbody></table></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>result</td> <td><a href="#result">Result</a></td> <td>The result of the snapshot offer.</td> <td>1</td></tr></tbody></table></li></ul> <h4 id="result"><a href="#result" class="header-anchor">#</a> Result</h4> <span class="codeblock" data-v-1eda75b2><span class="container codeblock__hasfooter__false codeblock__is-expandable__false codeblock__expanded__false" data-v-1eda75b2><span class="body__container" data-v-1eda75b2><span class="body__block" data-v-1eda75b2><span class="icons" data-v-1eda75b2><!----> <span class="icons__item" data-v-1eda75b2><svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="icons__item__icon" data-v-1eda75b2><path fill-rule="evenodd" clip-rule="evenodd" d="M11 0.25C10.0335 0.25 9.25 1.0335 9.25 2V4.5H10.75V2C10.75 1.86193 10.8619 1.75 11 1.75H21C21.1381 1.75 21.25 1.86193 21.25 2V16C21.25 16.1381 21.1381 16.25 21 16.25H16.5V17.75H21C21.9665 17.75 22.75 16.9665 22.75 16V2C22.75 1.0335 21.9665 0.25 21 0.25H11ZM3 6.25C2.0335 6.25 1.25 7.0335 1.25 8V22C1.25 22.9665 2.0335 23.75 3 23.75H13C13.9665 23.75 14.75 22.9665 14.75 22V8C14.75 7.0335 13.9665 6.25 13 6.25H3ZM2.75 8C2.75 7.86193 2.86193 7.75 3 7.75H13C13.1381 7.75 13.25 7.86193 13.25 8V22C13.25 22.1381 13.1381 22.25 13 22.25H3C2.86193 22.25 2.75 22.1381 2.75 22V8Z" data-v-1eda75b2></path></svg> <span class="icons__item__tooltip" data-v-1eda75b2>
|
||
Copy
|
||
</span></span></span> <span class="body" data-v-1eda75b2><span class="body__wrapper" data-v-1eda75b2><span class="body__code" data-v-1eda75b2> enum Result {
|
||
UNKNOWN = 0; // Unknown result, abort all snapshot restoration
|
||
ACCEPT = 1; // Snapshot is accepted, start applying chunks.
|
||
ABORT = 2; // Abort snapshot restoration, and don't try any other snapshots.
|
||
REJECT = 3; // Reject this specific snapshot, try others.
|
||
REJECT_FORMAT = 4; // Reject all snapshots with this `format`, try others.
|
||
REJECT_SENDER = 5; // Reject all snapshots from all senders of this snapshot, try others.
|
||
}
|
||
</span></span></span></span> <!----></span> <!----></span></span> <ul><li><strong>Usage</strong>:
|
||
<ul><li><code>OfferSnapshot</code> is called when bootstrapping a node using state sync. The application may
|
||
accept or reject snapshots as appropriate. Upon accepting, Tendermint will retrieve and
|
||
apply snapshot chunks via <code>ApplySnapshotChunk</code>. The application may also choose to reject a
|
||
snapshot in the chunk response, in which case it should be prepared to accept further
|
||
<code>OfferSnapshot</code> calls.</li> <li>Only <code>AppHash</code> can be trusted, as it has been verified by the light client. Any other data
|
||
can be spoofed by adversaries, so applications should employ additional verification schemes
|
||
to avoid denial-of-service attacks. The verified <code>AppHash</code> is automatically checked against
|
||
the restored application at the end of snapshot restoration.</li> <li>For more information, see the <code>Snapshot</code> data type or the <a href="/master/spec/p2p/messages/state-sync.html">state sync section</a>.</li></ul></li></ul> <h3 id="applysnapshotchunk"><a href="#applysnapshotchunk" class="header-anchor">#</a> ApplySnapshotChunk</h3> <ul><li><p><strong>Request</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>index</td> <td>uint32</td> <td>The chunk index, starting from <code>0</code>. Tendermint applies chunks sequentially.</td> <td>1</td></tr> <tr><td>chunk</td> <td>bytes</td> <td>The binary chunk contents, as returned by <code>LoadSnapshotChunk</code>.</td> <td>2</td></tr> <tr><td>sender</td> <td>string</td> <td>The P2P ID of the node who sent this chunk.</td> <td>3</td></tr></tbody></table></li> <li><p><strong>Response</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>result</td> <td>Result (see below)</td> <td>The result of applying this chunk.</td> <td>1</td></tr> <tr><td>refetch_chunks</td> <td>repeated uint32</td> <td>Refetch and reapply the given chunks, regardless of <code>result</code>. Only the listed chunks will be refetched, and reapplied in sequential order.</td> <td>2</td></tr> <tr><td>reject_senders</td> <td>repeated string</td> <td>Reject the given P2P senders, regardless of <code>Result</code>. Any chunks already applied will not be refetched unless explicitly requested, but queued chunks from these senders will be discarded, and new chunks or other snapshots rejected.</td> <td>3</td></tr></tbody></table></li></ul> <span class="codeblock" data-v-1eda75b2><span class="container codeblock__hasfooter__false codeblock__is-expandable__false codeblock__expanded__false" data-v-1eda75b2><span class="body__container" data-v-1eda75b2><span class="body__block" data-v-1eda75b2><span class="icons" data-v-1eda75b2><!----> <span class="icons__item" data-v-1eda75b2><svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class="icons__item__icon" data-v-1eda75b2><path fill-rule="evenodd" clip-rule="evenodd" d="M11 0.25C10.0335 0.25 9.25 1.0335 9.25 2V4.5H10.75V2C10.75 1.86193 10.8619 1.75 11 1.75H21C21.1381 1.75 21.25 1.86193 21.25 2V16C21.25 16.1381 21.1381 16.25 21 16.25H16.5V17.75H21C21.9665 17.75 22.75 16.9665 22.75 16V2C22.75 1.0335 21.9665 0.25 21 0.25H11ZM3 6.25C2.0335 6.25 1.25 7.0335 1.25 8V22C1.25 22.9665 2.0335 23.75 3 23.75H13C13.9665 23.75 14.75 22.9665 14.75 22V8C14.75 7.0335 13.9665 6.25 13 6.25H3ZM2.75 8C2.75 7.86193 2.86193 7.75 3 7.75H13C13.1381 7.75 13.25 7.86193 13.25 8V22C13.25 22.1381 13.1381 22.25 13 22.25H3C2.86193 22.25 2.75 22.1381 2.75 22V8Z" data-v-1eda75b2></path></svg> <span class="icons__item__tooltip" data-v-1eda75b2>
|
||
Copy
|
||
</span></span></span> <span class="body" data-v-1eda75b2><span class="body__wrapper" data-v-1eda75b2><span class="body__code" data-v-1eda75b2> enum Result {
|
||
UNKNOWN = 0; // Unknown result, abort all snapshot restoration
|
||
ACCEPT = 1; // The chunk was accepted.
|
||
ABORT = 2; // Abort snapshot restoration, and don't try any other snapshots.
|
||
RETRY = 3; // Reapply this chunk, combine with `RefetchChunks` and `RejectSenders` as appropriate.
|
||
RETRY_SNAPSHOT = 4; // Restart this snapshot from `OfferSnapshot`, reusing chunks unless instructed otherwise.
|
||
REJECT_SNAPSHOT = 5; // Reject this snapshot, try a different one.
|
||
}
|
||
</span></span></span></span> <!----></span> <!----></span></span> <ul><li><strong>Usage</strong>:
|
||
<ul><li>The application can choose to refetch chunks and/or ban P2P peers as appropriate. Tendermint
|
||
will not do this unless instructed by the application.</li> <li>The application may want to verify each chunk, e.g. by attaching chunk hashes in
|
||
<code>Snapshot.Metadata</code> and/or incrementally verifying contents against <code>AppHash</code>.</li> <li>When all chunks have been accepted, Tendermint will make an ABCI <code>Info</code> call to verify that
|
||
<code>LastBlockAppHash</code> and <code>LastBlockHeight</code> matches the expected values, and record the
|
||
<code>AppVersion</code> in the node state. It then switches to fast sync or consensus and joins the
|
||
network.</li> <li>If Tendermint is unable to retrieve the next chunk after some time (e.g. because no suitable
|
||
peers are available), it will reject the snapshot and try a different one via <code>OfferSnapshot</code>.
|
||
The application should be prepared to reset and accept it or abort as appropriate.</li></ul></li></ul> <h2 id="data-types"><a href="#data-types" class="header-anchor">#</a> Data Types</h2> <p>Most of the data structures used in ABCI are shared <a href="/master/spec/core/data_structures.html">common data structures</a>. In certain cases, ABCI uses different data structures which are documented here:</p> <h3 id="validator"><a href="#validator" class="header-anchor">#</a> Validator</h3> <ul><li><p><strong>Fields</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>address</td> <td>bytes</td> <td><a href="/master/spec/core/data_structures.html#address">Address</a> of validator</td> <td>1</td></tr> <tr><td>power</td> <td>int64</td> <td>Voting power of the validator</td> <td>3</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Validator identified by address</li> <li>Used in RequestBeginBlock as part of VoteInfo</li> <li>Does not include PubKey to avoid sending potentially large quantum pubkeys
|
||
over the ABCI</li></ul></li></ul> <h3 id="validatorupdate"><a href="#validatorupdate" class="header-anchor">#</a> ValidatorUpdate</h3> <ul><li><p><strong>Fields</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>pub_key</td> <td><a href="/master/spec/core/data_structures.html#pub_key">Public Key</a></td> <td>Public key of the validator</td> <td>1</td></tr> <tr><td>power</td> <td>int64</td> <td>Voting power of the validator</td> <td>2</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Validator identified by PubKey</li> <li>Used to tell Tendermint to update the validator set</li></ul></li></ul> <h3 id="voteinfo"><a href="#voteinfo" class="header-anchor">#</a> VoteInfo</h3> <ul><li><p><strong>Fields</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>validator</td> <td><a href="#validator">Validator</a></td> <td>A validator</td> <td>1</td></tr> <tr><td>signed_last_block</td> <td>bool</td> <td>Indicates whether or not the validator signed the last block</td> <td>2</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Indicates whether a validator signed the last block, allowing for rewards
|
||
based on validator availability</li></ul></li></ul> <h3 id="evidence"><a href="#evidence" class="header-anchor">#</a> Evidence</h3> <ul><li><p><strong>Fields</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>type</td> <td><a href="#evidencetype">EvidenceType</a></td> <td>Type of the evidence. An enum of possible evidence's.</td> <td>1</td></tr> <tr><td>validator</td> <td><a href="#validator">Validator</a></td> <td>The offending validator</td> <td>2</td></tr> <tr><td>height</td> <td>int64</td> <td>Height when the offense occurred</td> <td>3</td></tr> <tr><td>time</td> <td><a href="https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Timestamp" target="_blank" rel="noopener noreferrer">google.protobuf.Timestamp<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></td> <td>Time of the block that was committed at the height that the offense occurred</td> <td>4</td></tr> <tr><td>total_voting_power</td> <td>int64</td> <td>Total voting power of the validator set at height <code>Height</code></td> <td>5</td></tr></tbody></table></li></ul> <h4 id="evidencetype-2"><a href="#evidencetype-2" class="header-anchor">#</a> EvidenceType</h4> <ul><li><p><strong>Fields</strong></p> <p>EvidenceType is an enum with the listed fields:</p> <table><thead><tr><th>Name</th> <th>Field Number</th></tr></thead> <tbody><tr><td>UNKNOWN</td> <td>0</td></tr> <tr><td>DUPLICATE_VOTE</td> <td>1</td></tr> <tr><td>LIGHT_CLIENT_ATTACK</td> <td>2</td></tr></tbody></table></li></ul> <h3 id="lastcommitinfo"><a href="#lastcommitinfo" class="header-anchor">#</a> LastCommitInfo</h3> <ul><li><p><strong>Fields</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>round</td> <td>int32</td> <td>Commit round. Reflects the total amount of rounds it took to come to consensus for the current block.</td> <td>1</td></tr> <tr><td>votes</td> <td>repeated <a href="#voteinfo">VoteInfo</a></td> <td>List of validators addresses in the last validator set with their voting power and whether or not they signed a vote.</td> <td>2</td></tr></tbody></table></li></ul> <h3 id="consensusparams"><a href="#consensusparams" class="header-anchor">#</a> ConsensusParams</h3> <ul><li><p><strong>Fields</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>block</td> <td><a href="/master/spec/core/data_structures.html#blockparams">BlockParams</a></td> <td>Parameters limiting the size of a block and time between consecutive blocks.</td> <td>1</td></tr> <tr><td>evidence</td> <td><a href="/master/spec/core/data_structures.html#evidenceparams">EvidenceParams</a></td> <td>Parameters limiting the validity of evidence of byzantine behaviour.</td> <td>2</td></tr> <tr><td>validator</td> <td><a href="/master/spec/core/data_structures.html#validatorparams">ValidatorParams</a></td> <td>Parameters limiting the types of public keys validators can use.</td> <td>3</td></tr> <tr><td>version</td> <td><a href="/master/spec/core/data_structures.html#versionparams">VersionsParams</a></td> <td>The ABCI application version.</td> <td>4</td></tr> <tr><td>synchrony</td> <td><a href="/master/spec/core/data_structures.html#synchronyparams">SynchronyParams</a></td> <td>Parameters that determine the bounds under which a proposed block's timestamp is considered valid.</td> <td>5</td></tr> <tr><td>timeout</td> <td><a href="/master/spec/core/data_structures.html#timeoutparams">TimeoutParams</a></td> <td>Parameters that configure the timeouts for the steps of the Tendermint consensus algorithm.</td> <td>6</td></tr></tbody></table></li></ul> <h3 id="proofops"><a href="#proofops" class="header-anchor">#</a> ProofOps</h3> <ul><li><p><strong>Fields</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>ops</td> <td>repeated <a href="#proofop">ProofOp</a></td> <td>List of chained Merkle proofs, of possibly different types. The Merkle root of one op is the value being proven in the next op. The Merkle root of the final op should equal the ultimate root hash being verified against..</td> <td>1</td></tr></tbody></table></li></ul> <h3 id="proofop"><a href="#proofop" class="header-anchor">#</a> ProofOp</h3> <ul><li><p><strong>Fields</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>type</td> <td>string</td> <td>Type of Merkle proof and how it's encoded.</td> <td>1</td></tr> <tr><td>key</td> <td>bytes</td> <td>Key in the Merkle tree that this proof is for.</td> <td>2</td></tr> <tr><td>data</td> <td>bytes</td> <td>Encoded Merkle proof for the key.</td> <td>3</td></tr></tbody></table></li></ul> <h3 id="snapshot"><a href="#snapshot" class="header-anchor">#</a> Snapshot</h3> <ul><li><p><strong>Fields</strong>:</p> <table><thead><tr><th>Name</th> <th>Type</th> <th>Description</th> <th>Field Number</th></tr></thead> <tbody><tr><td>height</td> <td>uint64</td> <td>The height at which the snapshot was taken (after commit).</td> <td>1</td></tr> <tr><td>format</td> <td>uint32</td> <td>An application-specific snapshot format, allowing applications to version their snapshot data format and make backwards-incompatible changes. Tendermint does not interpret this.</td> <td>2</td></tr> <tr><td>chunks</td> <td>uint32</td> <td>The number of chunks in the snapshot. Must be at least 1 (even if empty).</td> <td>3</td></tr> <tr><td>hash</td> <td>bytes</td> <td>TAn arbitrary snapshot hash. Must be equal only for identical snapshots across nodes. Tendermint does not interpret the hash, it only compares them.</td> <td>3</td></tr> <tr><td>metadata</td> <td>bytes</td> <td>Arbitrary application metadata, for example chunk hashes or other verification data.</td> <td>3</td></tr></tbody></table></li> <li><p><strong>Usage</strong>:</p> <ul><li>Used for state sync snapshots, see the <a href="/master/spec/p2p/messages/state-sync.html">state sync section</a> for details.</li> <li>A snapshot is considered identical across nodes only if <em>all</em> fields are equal (including
|
||
<code>Metadata</code>). Chunks may be retrieved from all nodes that have the same snapshot.</li> <li>When sent across the network, a snapshot message can be at most 4 MB.</li></ul></li></ul></div><!----></div></div></div></div><div class="layout__main__content__aside__container" style="--height-banners:nullpx;" data-v-58560e81><div class="layout__main__content__aside aside__bottom__false" data-v-58560e81><!----></div><div class="layout__main__content__aside__banners" data-v-58560e81><a href="https://github.com/tendermint/tendermint/issues" target="_blank" data-v-58560e81><div data-v-31935645 data-v-58560e81><div class="container" data-v-31935645><svg width="100%" height="100%" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" class="icon" data-v-31935645><path d="M0.836491 13.7697C0.543598 14.0626 0.543598 14.5374 0.836492 14.8303C1.12939 15.1232 1.60426 15.1232 1.89715 14.8303L0.836491 13.7697ZM14.7729 1.95457C15.0658 1.66168 15.0658 1.1868 14.7729 0.893912C14.48 0.601019 14.0051 0.601019 13.7122 0.893913L14.7729 1.95457ZM14.6668 1H15.4168V0.25H14.6668V1ZM4.48498 0.25C4.07077 0.25 3.73498 0.585786 3.73498 1C3.73498 1.41421 4.07077 1.75 4.48498 1.75V0.25ZM13.9168 11.1818C13.9168 11.596 14.2526 11.9318 14.6668 11.9318C15.081 11.9318 15.4168 11.596 15.4168 11.1818H13.9168ZM1.89715 14.8303L14.7729 1.95457L13.7122 0.893913L0.836491 13.7697L1.89715 14.8303ZM14.6668 0.25H4.48498V1.75H14.6668V0.25ZM15.4168 11.1818V1H13.9168V11.1818H15.4168Z"></path></svg><div class="image" data-v-31935645><svg width="41" height="44" viewBox="0 0 41 44" fill="none" xmlns="http://www.w3.org/2000/svg" data-v-31935645><path fill-rule="evenodd" clip-rule="evenodd" d="M4 1.8999H32C33.3807 1.8999 34.5 3.01919 34.5 4.3999V10.997L36 9.497V4.3999C36 2.19076 34.2091 0.399902 32 0.399902H4C1.79086 0.399902 0 2.19077 0 4.39991V39.5999C0 41.809 1.79086 43.5999 4 43.5999H32C34.2091 43.5999 36 41.809 36 39.5999V20.2096L34.5 21.7096V39.5999C34.5 40.9806 33.3807 42.0999 32 42.0999H4C2.61929 42.0999 1.5 40.9806 1.5 39.5999V4.39991C1.5 3.01919 2.61929 1.8999 4 1.8999ZM7.2 19.1999H26.2971L24.2971 21.1999H7.2V19.1999ZM7.2 15.7999H28.8V13.7999H7.2V15.7999ZM7.2 26.5999H16.2V24.5999H7.2V26.5999ZM20.8638 25.7372L20.7386 25.8624L20.6826 26.0303L18.9855 31.1215L18.4792 32.6406L19.9704 32.0571L24.8494 30.1479L24.9955 30.0908L25.1064 29.9798L37.9799 17.1063L39.7831 15.3032C40.9546 14.1316 40.9546 12.2321 39.7831 11.0606C38.6115 9.88898 36.712 9.88898 35.5404 11.0606L20.8638 25.7372ZM20.9149 30.0767L22.0496 26.6726L36.6011 12.1212C37.1869 11.5354 38.1366 11.5354 38.7224 12.1212C39.3082 12.707 39.3082 13.6567 38.7224 14.2425L37.4496 15.5153L36.2465 14.3122C35.9536 14.0193 35.4787 14.0193 35.1858 14.3122C34.8929 14.6051 34.8929 15.08 35.1858 15.3729L36.3889 16.576L24.5761 28.3888L23.6215 27.4342C23.3286 27.1413 22.8537 27.1413 22.5608 27.4342C22.2679 27.7271 22.2679 28.202 22.5608 28.4949L23.2349 29.1689L20.9149 30.0767Z" fill="var(--color-primary, blue)" data-v-31935645></path></svg></div><div class="h1" data-v-31935645>Found an Issue?</div><div class="h2" data-v-31935645>Help us improve this page by suggesting edits on GitHub.</div></div></div></a></div></div></div><div class="layout__main__gutter" data-v-58560e81><div data-v-15325c0d data-v-58560e81><div class="links" data-v-15325c0d><div class="links__wrapper" data-v-15325c0d><div class="links__container" data-v-15325c0d><a href="/master/spec/abci/" class="links__item links__item__left router-link-active" data-v-15325c0d><div class="links__item__icon" data-v-15325c0d><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 64 64" data-v-15325c0d><title data-v-15325c0d>arrow-right</title><g stroke-linecap="square" stroke-linejoin="miter" stroke-width="2" data-v-15325c0d><line fill="none" stroke-miterlimit="10" x1="61" y1="32" x2="3" y2="32" stroke-linecap="butt" data-v-15325c0d></line><polyline fill="none" stroke-miterlimit="10" points="21,14 3,32 21,50 " data-v-15325c0d></polyline></g></svg></div><div data-v-15325c0d><div class="links__label" data-v-15325c0d>Previous</div><div class="links__item__title" data-v-15325c0d>ABCI</div><!----></div></a></div></div><div class="links__wrapper" data-v-15325c0d><div class="links__container" data-v-15325c0d><a href="/master/spec/abci/apps.html" class="links__item links__item__right" data-v-15325c0d><div data-v-15325c0d><div class="links__label" data-v-15325c0d>Next</div><div class="links__item__title" data-v-15325c0d>Applications</div><!----></div><div class="links__item__icon" data-v-15325c0d><svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 64 64" data-v-15325c0d><title data-v-15325c0d>arrow-right</title><g stroke-linecap="square" stroke-linejoin="miter" stroke-width="2" data-v-15325c0d><line fill="none" stroke-miterlimit="10" x1="3" y1="32" x2="61" y2="32" stroke-linecap="butt" data-v-15325c0d></line><polyline fill="none" stroke-miterlimit="10" points="43,14 61,32 43,50 " data-v-15325c0d></polyline></g></svg></div></a></div></div></div></div></div><div class="layout__main__footer" data-v-58560e81><div data-v-732a47ec data-v-58560e81><div class="wrapper" data-v-732a47ec><div class="container" data-v-732a47ec><div class="footer__wrapper" data-v-732a47ec><div class="questions" data-v-732a47ec><div class="questions__wrapper" data-v-732a47ec><div class="questions__h1" data-v-732a47ec>Questions?</div><div class="questions__p" data-v-732a47ec><div>Chat with Tendermint developers in <a href='https://discord.gg/cosmosnetwork' target='_blank'>Discord</a> or reach out on the <a href='https://forum.cosmos.network/c/tendermint' target='_blank'>Tendermint Forum</a> to learn more.</div></div></div><form action="https://app.mailerlite.com/webforms/submit/u7o3l7" data-code="u7o3l7" method="POST" target="_blank" rel="noreferrer noopener" class="newsletter__form__component__internal" data-v-fd618d74 data-v-732a47ec><div class="newsletter__desc" data-v-fd618d74><div class="newsletter__desc__h1" data-v-fd618d74><label for="newsletter-email-input" data-v-fd618d74>Get Cosmos updates</label></div><div class="newsletter__desc__p" data-v-fd618d74>You’ll be notified with Cosmos updates, news and announcements.</div></div><div class="newsletter__input" data-v-fd618d74><div class="newsletter__input__input" data-v-fd618d74><input type="email" required="required" name="fields[email]" id="newsletter-email-input" placeholder="Your email" class="newsletter__input__input__el" data-v-fd618d74><button type="submit" class="newsletter__input__input__button" data-v-fd618d74>Sign up</button><input type="hidden" name="ml-submit" value="1" data-v-fd618d74></div><div class="newsletter__input__p" data-v-fd618d74>You can unsubscribe at any time.</div></div></form></div><!----><div class="logo" data-v-732a47ec><div class="logo__item" data-v-732a47ec><a href="https://tendermint.com" target="_blank" rel="noreferrer noopener" tag="div" class="logo__image" data-v-732a47ec><svg width="100%" height="100%" viewBox="0 0 142 20" fill="black" xmlns="http://www.w3.org/2000/svg" data-v-732a47ec><path d="M33.5369 19.2904H35.9969V7.57038H40.4569V5.29038H29.0769V7.57038H33.5369V19.2904ZM45.3214 19.5304C47.2614 19.5304 48.6414 18.7504 49.6414 17.5504L48.2214 16.2904C47.3814 17.1104 46.5414 17.5504 45.3614 17.5504C43.8014 17.5504 42.5814 16.5904 42.3214 14.8704H50.0814C50.1014 14.6304 50.1214 14.4104 50.1214 14.1904C50.1214 11.1504 48.4214 8.51038 45.0614 8.51038C42.0414 8.51038 39.9014 10.9904 39.9014 14.0104V14.0504C39.9014 17.3104 42.2614 19.5304 45.3214 19.5304ZM42.3014 13.2704C42.5214 11.6304 43.5614 10.4904 45.0414 10.4904C46.6414 10.4904 47.5614 11.7104 47.7214 13.2704H42.3014ZM52.5317 19.2904H54.9717V13.3304C54.9717 11.6904 55.9517 10.7104 57.3517 10.7104C58.7917 10.7104 59.6117 11.6504 59.6117 13.2904V19.2904H62.0317V12.5504C62.0317 10.1104 60.6517 8.51038 58.2717 8.51038C56.6317 8.51038 55.6517 9.37038 54.9717 10.3504V8.73038H52.5317V19.2904ZM69.3141 19.5104C71.0341 19.5104 72.1341 18.6304 72.9141 17.5304V19.2904H75.3341V4.69038H72.9141V10.3704C72.1541 9.37038 71.0541 8.51038 69.3141 8.51038C66.7941 8.51038 64.4141 10.4904 64.4141 13.9904V14.0304C64.4141 17.5304 66.8341 19.5104 69.3141 19.5104ZM69.8941 17.4104C68.2541 17.4104 66.8541 16.0704 66.8541 14.0304V13.9904C66.8541 11.9104 68.2341 10.6104 69.8941 10.6104C71.5141 10.6104 72.9541 11.9504 72.9541 13.9904V14.0304C72.9541 16.0504 71.5141 17.4104 69.8941 17.4104ZM83.212 19.5304C85.152 19.5304 86.532 18.7504 87.532 17.5504L86.112 16.2904C85.272 17.1104 84.432 17.5504 83.252 17.5504C81.692 17.5504 80.472 16.5904 80.212 14.8704H87.972C87.992 14.6304 88.012 14.4104 88.012 14.1904C88.012 11.1504 86.312 8.51038 82.952 8.51038C79.932 8.51038 77.792 10.9904 77.792 14.0104V14.0504C77.792 17.3104 80.152 19.5304 83.212 19.5304ZM80.192 13.2704C80.412 11.6304 81.452 10.4904 82.932 10.4904C84.532 10.4904 85.452 11.7104 85.612 13.2704H80.192ZM90.4223 19.2904H92.8623V15.2704C92.8623 12.4704 94.3423 11.0904 96.4623 11.0904H96.6023V8.53038C94.7423 8.45038 93.5223 9.53038 92.8623 11.1104V8.73038H90.4223V19.2904ZM98.6841 19.2904H101.124V13.3304C101.124 11.7104 102.044 10.7104 103.384 10.7104C104.724 10.7104 105.524 11.6304 105.524 13.2704V19.2904H107.944V13.3304C107.944 11.6304 108.884 10.7104 110.204 10.7104C111.564 10.7104 112.344 11.6104 112.344 13.2904V19.2904H114.764V12.5504C114.764 9.97038 113.364 8.51038 111.064 8.51038C109.464 8.51038 108.344 9.25038 107.504 10.3704C106.944 9.25038 105.864 8.51038 104.344 8.51038C102.724 8.51038 101.804 9.39038 101.124 10.3304V8.73038H98.6841V19.2904ZM117.728 7.11038H120.328V4.81038H117.728V7.11038ZM117.808 19.2904H120.248V8.73038H117.808V19.2904ZM123.391 19.2904H125.831V13.3304C125.831 11.6904 126.811 10.7104 128.211 10.7104C129.651 10.7104 130.471 11.6504 130.471 13.2904V19.2904H132.891V12.5504C132.891 10.1104 131.511 8.51038 129.131 8.51038C127.491 8.51038 126.511 9.37038 125.831 10.3504V8.73038H123.391V19.2904ZM139.353 19.4704C140.273 19.4704 140.933 19.2704 141.533 18.9304V16.9504C141.053 17.1904 140.573 17.3104 140.033 17.3104C139.213 17.3104 138.733 16.9304 138.733 15.9904V10.8104H141.573V8.73038H138.733V5.83038H136.313V8.73038H134.973V10.8104H136.313V16.3704C136.313 18.6904 137.573 19.4704 139.353 19.4704Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.8359 8.62449C13.6297 8.17373 12.3308 7.93828 11.0189 7.93828C8.26156 7.93828 5.66799 8.96445 3.71603 10.8277C1.77253 12.6827 0.692757 15.1469 0.675382 17.7662L0.67308 18.1179L0.995493 18.2917C2.54939 19.1298 4.30666 19.5708 6.08735 19.5708C6.13631 19.5708 6.18567 19.5704 6.23475 19.5697C7.78697 19.5486 9.32263 19.1947 10.7148 18.5417C10.2758 18.3089 9.85515 18.0468 9.45524 17.7578C7.02864 18.664 4.27847 18.5523 1.95105 17.4173C2.17744 12.8209 6.16956 9.13899 11.0189 9.13899C12.3676 9.13899 13.6998 9.42181 14.903 9.95924C14.9185 9.51427 14.8962 9.06826 14.8359 8.62449"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M21.3623 17.6846C21.3253 14.4281 19.6525 11.4569 16.864 9.64708C16.8661 10.1236 16.8325 10.5998 16.7635 11.0733C18.7449 12.6069 19.9528 14.8652 20.085 17.3394C15.8109 19.4271 10.4806 17.965 8.05257 13.9755C7.39676 12.8979 6.99466 11.693 6.87649 10.4619C6.46399 10.6752 6.07001 10.9205 5.69806 11.1956C5.89419 12.3803 6.32039 13.5309 6.95641 14.5759C8.33758 16.8453 10.5581 18.4723 13.2087 19.1571C14.108 19.3895 15.0224 19.5045 15.9317 19.5045C17.7034 19.5045 19.4562 19.068 21.0421 18.213L21.3662 18.0382L21.3623 17.6846Z"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M11.3845 1.1535L11.0648 0.975742L10.745 1.15323C9.16521 2.02964 7.85272 3.28619 6.94934 4.78692C6.16925 6.08298 5.70784 7.5348 5.59962 9.01676C6.0321 8.77307 6.48263 8.55879 6.94848 8.37569C7.34977 5.93272 8.84843 3.72483 11.0642 2.37561C15.1338 4.85607 16.4721 9.999 14.0276 14.0154C13.3657 15.1031 12.4605 16.0436 11.3882 16.7656C11.7887 16.9971 12.2093 17.1981 12.6463 17.3662C13.6376 16.6043 14.4816 15.671 15.1238 14.6157C17.9778 9.92641 16.3003 3.88731 11.3845 1.1535"></path> <path fill-rule="evenodd" clip-rule="evenodd" d="M11.0584 11.4001C10.4754 11.4001 10.0012 11.85 10.0012 12.4031C10.0012 12.9561 10.4754 13.4061 11.0584 13.4061C11.6415 13.4061 12.1158 12.9561 12.1158 12.4031C12.1158 11.85 11.6415 11.4001 11.0584 11.4001M11.0584 14.6068C9.77747 14.6068 8.73544 13.6183 8.73544 12.4031C8.73544 11.188 9.77747 10.1994 11.0584 10.1994C12.3394 10.1994 13.3815 11.188 13.3815 12.4031C13.3815 13.6183 12.3394 14.6068 11.0584 14.6068"></path></svg></a></div><div class="logo__item logo__link" data-v-732a47ec><a href="https://medium.com/@tendermint" target="_blank" title="medium" rel="noreferrer noopener" class="smallprint__item__links__item" data-v-732a47ec><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" fill="#aaa" data-v-732a47ec><path d="M24 24h-24v-24h24v24zm-4.03-5.649v-.269l-1.247-1.224c-.11-.084-.165-.222-.142-.359v-8.998c-.023-.137.032-.275.142-.359l1.277-1.224v-.269h-4.422l-3.152 7.863-3.586-7.863h-4.638v.269l1.494 1.799c.146.133.221.327.201.523v7.072c.044.255-.037.516-.216.702l-1.681 2.038v.269h4.766v-.269l-1.681-2.038c-.181-.186-.266-.445-.232-.702v-6.116l4.183 9.125h.486l3.593-9.125v7.273c0 .194 0 .232-.127.359l-1.292 1.254v.269h6.274z" data-v-732a47ec></path></svg></a><a href="https://twitter.com/tendermint_team" target="_blank" title="twitter" rel="noreferrer noopener" class="smallprint__item__links__item" data-v-732a47ec><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" fill="#aaa" data-v-732a47ec><path d="M24 4.557c-.883.392-1.832.656-2.828.775 1.017-.609 1.798-1.574 2.165-2.724-.951.564-2.005.974-3.127 1.195-.897-.957-2.178-1.555-3.594-1.555-3.179 0-5.515 2.966-4.797 6.045-4.091-.205-7.719-2.165-10.148-5.144-1.29 2.213-.669 5.108 1.523 6.574-.806-.026-1.566-.247-2.229-.616-.054 2.281 1.581 4.415 3.949 4.89-.693.188-1.452.232-2.224.084.626 1.956 2.444 3.379 4.6 3.419-2.07 1.623-4.678 2.348-7.29 2.04 2.179 1.397 4.768 2.212 7.548 2.212 9.142 0 14.307-7.721 13.995-14.646.962-.695 1.797-1.562 2.457-2.549z" data-v-732a47ec></path></svg></a><a href="https://www.linkedin.com/company/tendermint/" target="_blank" title="linkedin" rel="noreferrer noopener" class="smallprint__item__links__item" data-v-732a47ec><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" fill="#aaa" data-v-732a47ec><path d="M0 0v24h24v-24h-24zm8 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.397-2.586 7-2.777 7 2.476v6.759z" data-v-732a47ec></path></svg></a><a href="https://reddit.com/r/cosmosnetwork" target="_blank" title="reddit" rel="noreferrer noopener" class="smallprint__item__links__item" data-v-732a47ec><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" fill="#aaa" data-v-732a47ec><path d="M14.238 15.348c.085.084.085.221 0 .306-.465.462-1.194.687-2.231.687l-.008-.002-.008.002c-1.036 0-1.766-.225-2.231-.688-.085-.084-.085-.221 0-.305.084-.084.222-.084.307 0 .379.377 1.008.561 1.924.561l.008.002.008-.002c.915 0 1.544-.184 1.924-.561.085-.084.223-.084.307 0zm-3.44-2.418c0-.507-.414-.919-.922-.919-.509 0-.923.412-.923.919 0 .506.414.918.923.918.508.001.922-.411.922-.918zm13.202-.93c0 6.627-5.373 12-12 12s-12-5.373-12-12 5.373-12 12-12 12 5.373 12 12zm-5-.129c0-.851-.695-1.543-1.55-1.543-.417 0-.795.167-1.074.435-1.056-.695-2.485-1.137-4.066-1.194l.865-2.724 2.343.549-.003.034c0 .696.569 1.262 1.268 1.262.699 0 1.267-.566 1.267-1.262s-.568-1.262-1.267-1.262c-.537 0-.994.335-1.179.804l-2.525-.592c-.11-.027-.223.037-.257.145l-.965 3.038c-1.656.02-3.155.466-4.258 1.181-.277-.255-.644-.415-1.05-.415-.854.001-1.549.693-1.549 1.544 0 .566.311 1.056.768 1.325-.03.164-.05.331-.05.5 0 2.281 2.805 4.137 6.253 4.137s6.253-1.856 6.253-4.137c0-.16-.017-.317-.044-.472.486-.261.82-.766.82-1.353zm-4.872.141c-.509 0-.922.412-.922.919 0 .506.414.918.922.918s.922-.412.922-.918c0-.507-.413-.919-.922-.919z" data-v-732a47ec></path></svg></a><a href="https://t.me/cosmosproject" target="_blank" title="telegram" rel="noreferrer noopener" class="smallprint__item__links__item" data-v-732a47ec><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" fill="#aaa" data-v-732a47ec><path d="M12,0c-6.626,0 -12,5.372 -12,12c0,6.627 5.374,12 12,12c6.627,0 12,-5.373 12,-12c0,-6.628 -5.373,-12 -12,-12Zm3.224,17.871c0.188,0.133 0.43,0.166 0.646,0.085c0.215,-0.082 0.374,-0.267 0.422,-0.491c0.507,-2.382 1.737,-8.412 2.198,-10.578c0.035,-0.164 -0.023,-0.334 -0.151,-0.443c-0.129,-0.109 -0.307,-0.14 -0.465,-0.082c-2.446,0.906 -9.979,3.732 -13.058,4.871c-0.195,0.073 -0.322,0.26 -0.316,0.467c0.007,0.206 0.146,0.385 0.346,0.445c1.381,0.413 3.193,0.988 3.193,0.988c0,0 0.847,2.558 1.288,3.858c0.056,0.164 0.184,0.292 0.352,0.336c0.169,0.044 0.348,-0.002 0.474,-0.121c0.709,-0.669 1.805,-1.704 1.805,-1.704c0,0 2.084,1.527 3.266,2.369Zm-6.423,-5.062l0.98,3.231l0.218,-2.046c0,0 3.783,-3.413 5.941,-5.358c0.063,-0.057 0.071,-0.153 0.019,-0.22c-0.052,-0.067 -0.148,-0.083 -0.219,-0.037c-2.5,1.596 -6.939,4.43 -6.939,4.43Z" data-v-732a47ec></path></svg></a><a href="https://www.youtube.com/c/CosmosProject" target="_blank" title="youtube" rel="noreferrer noopener" class="smallprint__item__links__item" data-v-732a47ec><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" fill="#aaa" data-v-732a47ec><path d="M19.615 3.184c-3.604-.246-11.631-.245-15.23 0-3.897.266-4.356 2.62-4.385 8.816.029 6.185.484 8.549 4.385 8.816 3.6.245 11.626.246 15.23 0 3.897-.266 4.356-2.62 4.385-8.816-.029-6.185-.484-8.549-4.385-8.816zm-10.615 12.816v-8l8 3.993-8 4.007z" data-v-732a47ec></path></svg></a></div></div><div class="smallprint" data-v-732a47ec><div class="smallprint__item smallprint__item__links" data-v-732a47ec><a href="https://tendermint.com" data-v-732a47ec>tendermint.com</a></div><div class="smallprint__item__desc smallprint__item" data-v-732a47ec><div>The development of Tendermint Core was led primarily by All in Bits, Inc. The Tendermint trademark is owned by New Tendermint, LLC.</div></div></div></div></div></div></div></div></div></div><div class="sheet__sidebar" data-v-ec82e5e0 data-v-58560e81><!----> <!----></div><div class="sheet__sidebar" data-v-ec82e5e0 data-v-58560e81><!----> <!----></div><div class="sheet__sidebar sheet__sidebar__toc" data-v-ec82e5e0 data-v-58560e81><!----> <!----></div></div><div class="global-ui"></div></div>
|
||
<script src="/master/assets/js/app.d8230444.js" defer></script><script src="/master/assets/js/24.7da7f2cf.js" defer></script><script src="/master/assets/js/21.92fb7737.js" defer></script><script src="/master/assets/js/44.a966f787.js" defer></script><script src="/master/assets/js/19.a758649d.js" defer></script><script src="/master/assets/js/66.1a996a52.js" defer></script><script src="/master/assets/js/64.602a26f4.js" defer></script><script src="/master/assets/js/65.224ad1ec.js" defer></script><script src="/master/assets/js/25.c1f919e6.js" defer></script><script src="/master/assets/js/56.714e246c.js" defer></script><script src="/master/assets/js/62.c200562d.js" defer></script><script src="/master/assets/js/40.bbfd2b95.js" defer></script><script src="/master/assets/js/10.3cf8ba3a.js" defer></script><script src="/master/assets/js/7.c795f92d.js" defer></script><script src="/master/assets/js/183.a6f8527e.js" defer></script><script src="/master/assets/js/2.21a3b73d.js" defer></script><script src="/master/assets/js/5.4af69dfc.js" defer></script><script src="/master/assets/js/38.933ad5bd.js" defer></script><script src="/master/assets/js/13.cd4f8d8e.js" defer></script><script src="/master/assets/js/12.cf95ee24.js" defer></script><script src="/master/assets/js/16.e0a6886e.js" defer></script><script src="/master/assets/js/45.1110ab59.js" defer></script><script src="/master/assets/js/20.c6a2fb05.js" defer></script>
|
||
</body>
|
||
</html>
|