
편집자 주: 블록체인은 인터넷의 최하위 계층부터 알려지지 않은 암호화 기술에 이르기까지 많은 기술을 수반하지만, 종종 화폐 가격에 주목하는 사람은 많고 기술을 연구하는 사람은 거의 없습니다. 강세장 때는 다들 코인 투기 공부 열심히 하겠지만 약세장 때는 어차피 할 게 없으니 더 열심히 공부하면 될 것 같아요. 교양과목 학생으로서 저는 확실히 과학 학생들이 바보라고 생각하는 것 같은 많은 질문을 가지고 있습니다.기자로서 업계를 이해하고 인간적으로 설명해주는 사람들을 찾는 것은 어렵지 않으며, 그들은 종종 나를 대면하여 싫어하지 않습니다.
나는 모두와 공유하기 위해 연구 노트를 작성했습니다.이번에는 가상머신을 공부하고 있고, 크로스체인, VRF, 오픈소스의 역사와 문화, 네트워크 구조, 블록체인 레이어드 시스템 비교도 공부할 예정입니다. 이 나라는 무엇을 경험하고 있습니다." 다른 흥미로운 질문이 있으시면,이미지 설명
이 메모는 내가 예상했던 것보다 정말 길다
스마트 컨트랙트는 현재 퍼블릭 체인이 완성되기 위한 주요 방향입니다.
Ethereum의 스마트 계약에는 많은 허점이 있습니다.업계는 일반적으로 스마트 계약이 너무 유연하다고 생각합니다. 즉, Ethereum은 스마트 계약 Turing을 완성하기를 원합니다. 이전에나는 인터뷰ArcBlock CEO인 Mao Zhihong은 이더리움 스마트 계약이 허점이 있다고 결론을 내렸는데 첫째는 너무 유연하기 때문이고 둘째는 가상 머신과 언어가 새롭고 성숙하지 않기 때문입니다. "얼마 전에 발생한 오버플로 문제(Meitu 통화 문제는 정수 오버플로로 인해 발생함)는 언어 수준에서 해결했어야 합니다."
이더리움의 이 두 가지 문제를 기반으로 "더 나은 이더리움 만들기" 또는 "이더리움 수직 버전"에 전념하는 프로젝트는 원래 기반에서 개선되거나 자체 스마트 계약 언어를 발명할 것입니다.샤딩을 특징으로 하는 퍼블릭 체인 Zilliqa, 전자 상거래 퍼블릭 체인 CyberMiles.
CyberMiles의 가상 머신(CVM)과 고급 프로그래밍 언어인 Lity가 최근에 출시되었으며, 수석 과학자인 Michael Yuan에게 가상 머신의 기본 사항에 대해 질문하고 대화를 정리할 기회를 가졌습니다.
내 기억에 나는 학교 네트워크 센터에서 네트워크 관리자로 가상 머신을 처음 접했습니다. 학교 데이터 센터에 가상 머신이 있을 것입니다 머신의 계정 나중에 제가 Caixin에서 인턴으로 있을 때 동료가 Win 가상 머신을 설치하여 Mac 시스템에 Wonder를 설치했습니다.그런 다음 Alibaba Cloud와 Docker 간의 협력에 대해 보고했을 때, 가상 머신과 도커는 모두 가상화 기술이기 때문에 당시 둘의 차이점에 대해 알게 되었고, 드디어 자바 가상 머신과 이더리움 가상 머신(EVM)을 들었습니다.
보조 제목
가상 머신이란 무엇입니까?
이름에서 알 수 있듯이 가상 머신은 실제 머신과 관련이 있습니다. 한 대의 컴퓨터를 사용합니다. 물론 Du Niang과 같은 것을 쉽게 찾을 수 있지만 종종 반 이해 ——가상이란 완전한 하드웨어 시스템 기능을 갖추고 소프트웨어 시뮬레이션을 통해 완전한 환경에서 실행되는 완전한 컴퓨터 시스템을 의미합니다.. 그러나 운영 체제 위에 있는 가상 머신은 그렇지 않은 것 같습니다.
Michael의 인간적 용어 설명은 가상 머신에 대한 나의 이해를 심화시켰습니다. 그는 가상머신의 등장이 윈도우나 인터넷 등의 운영체제보다 먼저 등장했으며 원래는 컴퓨터의 시분할 임대 문제를 해결하기 위한 것이었다고 말했다.
샤오밍:가상 머신의 역할은 정확히 무엇입니까? 언제 처음 나타 났습니까?
Michael:"처음에 큰 컴퓨터는 많은 사용자가 공유했습니다. 즉, 당신은 10초를 사용하고 나는 10초를 사용합니다. 당신은 이 기계가 항상 당신의 것이라고 생각하고 나는 항상 내 것이라고 생각합니다. 근데 줄곧 기다렸어 10초면 돼 컴퓨터가 너에서 내꺼로 바뀌면 방금 계산한거 다 복원해서 보여줘야지 10초후에 니꺼 빼고 내 모든 걸 다 드러내. 보여줘."
"우리는 같은 하드웨어를 사용하지만 그 위에 다른 가상 머신이 있습니다. 모두가 이 하드웨어가 자신의 것이라고 생각하지만 실제로는 메인프레임에 가상 머신을 구현하는 관행인 소프트웨어에 의해 실현됩니다. 나중에 개인용 가상 머신의 역할이 1997년 자바가 등장하기 전까지는 가상머신이 특히 중요했다. 당시에는 윈도우, 유닉스 등 다양한 운영체제가 있었기 때문이다. use 가상 머신은 이 모든 것을 통합하므로 Windows용과 Unix용으로 하나씩 작성할 필요가 없습니다. Java로 작성할 수 있으며 그 위에 가상 머신이 있습니다.”
"가상 머신은 추상화입니다. 내 가상 머신에는 자체 언어가 있고 가상 머신에서 무언가를 작성할 수 있지만 가상 머신 아래에는 서로 다른 하드웨어와 소프트웨어가 있을 수 있으며 동일한 하드웨어도 있을 수 있습니다. 어떻게 나눌 수 있습니까? "가상 머신을 가상 머신이라고 부르는 이유는 무엇입니까? 근본적인 것을 추상화하므로 밑에 있는 것에 신경을 쓸 필요가 없습니다."
최초의 가상 머신은 1965년경 IBM에서 발명되었습니다. 단일 컴퓨터 시스템은 IBM 모델을 통해 서로 다른 운영 체제를 사용하는 여러 컴퓨터를 시뮬레이션할 수 있습니다. 이를 통해 사용자는 단일 컴퓨터에서 가상 머신의 서로 다른 여러 복사본을 만들고 관리할 수 있습니다. IBM 모델의 핵심 기능은 컴퓨터 리소스를 분할하고 프로그램을 완전히 격리하여 프로그램이 동일한 하드웨어를 공유할 수 있도록 하는 것입니다. ("에서 복사가상 머신 요약》)
1990년대에는 Java 프로그래밍 언어가 대중화되어 가상 머신 애플리케이션의 하이라이트가 열렸습니다. 당시 네트워크가 서로 다른 운영 체제, 서로 다른 브라우저, 서로 다른 장치에 걸쳐 있었기 때문에 동일한 응용 프로그램을 실행하는 것이 얼마나 어려웠는지 Java는 이러한 요구를 충족했습니다(Java 가상 머신의 주요 기능은 프로그램을 작성할 수 있다는 것입니다. JAVA 가상 머신에 의존하여 여러 플랫폼에서 실행 가능), 시대적 요구에 부응하여 대중화되었으며 당시 슬로건은 "한 곳에서 컴파일하여 모든 곳에서 실행"이었습니다. ("에서 복사VM 기록》)
2005년까지 구글은 Dndroid 시스템을 인수했고, 2007년 첫 오픈소스 버전을 공개했다. 이 시스템에는 dalvik이라는 가상머신이 있는데 자바 가상머신과 다소 비슷하지만 다르다. 주로 휴대폰과 태블릿, 메모리가 제한적이고 CPU 주파수가 낮은 컴퓨터에서 실행되도록 설계되었으며 현재 이 가상 컴퓨터에서 수많은 휴대폰 응용 프로그램이 실행되고 있습니다. Android 시스템의 포위 여부와 관계없이 IT 산업의 초기 30년은 Intel Inside로 요약할 수 있고, 향후 30년은 Android Inside로 설명할 수 있습니다. 이 가상 머신은 원래 임베디드 장치에서 실행되도록 SUN에 의해 설계되었습니다.오늘날의 dalvik 가상 머신에서야 진정으로 독창적인 응용 프로그램을 실현하고 모든 장치를 위한 통합 플랫폼의 기회를 얻을 수 있습니다. ("에서 복사보조 제목》)
블록체인에 가상 머신이 필요한 이유는 무엇입니까?
가상 머신의 "통합"의 역할을 이해한 후,원래 인식가상 머신의 성능은 물리적 머신을 직접 호출하는 것보다 확실히 좋지 않으며 약간의 손실이 있을 것이며 레이어가 많을수록 손실이 커진다는 것은 당연합니다. 블록체인에 가상 머신 계층을 추가해야 하는 이유는 무엇이며 통합하려면 무엇이 필요합니까?
간단히 말해서 블록체인에는 합의 메커니즘이 있기 때문에 모든 사람이 동일한 계산 결과를 가져야 하지만 기존 가상 머신은 이를 지원하지 않으며 후자는 기본 하드웨어가 다르기 때문에 다른 결과를 출력할 수 있으므로 V God은 다른 것을 작성하십시오.이전 Lao Mao와의 인터뷰에서도 그는 “이더리움이 새로운 언어인 Solidity를 쓰기로 선택한 이유는 스마트 컨트랙트 코드를 구현하기 위해서다.일관성。”
샤오밍:블록체인의 가상 머신은 기존 연락처와 어떻게 다릅니까? 가상 머신이 필요한 이유는 무엇입니까?
Michael :메인프레임 메인프레임의 가상머신은 운영체제 아래에 있고 자바 가상머신은 운영체제 위에 있기 때문에 서로 다른 가상머신이다. 블록체인의 가상 머신은 정확히 무엇을 통합합니까? 블록체인 가상 머신은 서로 다른 노드를 통합하며 각 노드는 다릅니다.
예를 들어 기본 언어는 C++로 구성되며 가상 머신은 Vyper 또는 Solidity이거나 가상 머신에 자체 언어가 있습니다. 1세대 블록체인에는 가상 머신이 없으며 비트코인에는 가상 머신이 없습니다. 비트코인은 A에서 B로 돈을 보내는 거래인데, 이더리움의 천재적인 아이디어는 트랜잭션에서 왜 A에서 B로 돈을 보내야 하는가? A에서 B로 가는 과정을 코드로 만들 수 없는 이유는 무엇입니까? 하지만 이 코드 조각을 실행하려면 코드를 실행하는 상위 수준이 있어야 하며 이 수준이 가상 머신입니다.
이때 블록체인의 역할은 돈을 보내는 데 실수하지 않는 것에서 모든 노드가 동일한 코드를 실행해야 동일한 결과를 얻는 코드를 실행하는 데 실수하지 않는 것으로 바뀌었습니다.
모든 노드는 이 실행된 코드에서 동일한 결과를 가지며 이는 매우 까다롭습니다. Java 가상 머신과 같은 기존 가상 머신에서는 이를 달성할 수 없기 때문입니다. 어떤 머신은 64비트, 어떤 머신은 32비트이기 때문에 10의 음의 10승이기 때문에 A머신과 B머신의 표현이 다르기 때문에 이를 계산하면 각 노드가 쉽게 합의에 도달하므로 그는 자신의 가상 머신을 작성해야 합니다. 따라서 Vitalik은 이더리움 가상 머신의 첫 번째 버전을 작성했습니다.
이 가상 머신은 공격으로부터 보호되어야 합니다. 가상 머신에서 어떤 코드도 실행될 수 있다고 말할 수 없기 때문입니다. 그렇지 않으면 누군가 무한 루프에서 실행되는 코드를 작성할 것입니다. 따라서 가상 머신에서 가스를 만들기 위해서는 이것의 저장 용량이 얼마인지 알아야 합니다(스마트 계약의 코드는 블록체인에 저장되며 코드가 길수록 가스 요금이 높아집니다). 이에 가상 머신의 보안을 보장하기 위해 거래 수수료를 통해 돈을 모으는 데 도움을 줄 것입니다. 따라서 블록체인 가상 머신과 일반 컴퓨팅 가상 머신의 요구 사항은 다르지만 기능은 실제로 유사합니다. 즉, 코드 조각을 실행하는 것입니다.
샤오밍:그렇다면 Ethereum Virtual Machine은 무엇을 변경합니까? 이 작업에 어떤 해가 있습니까?
Michael:그는 성능을 희생했고 자바 가상 머신의 성능은 소위적시(JIT, 적시 컴파일), 가상 머신은 현재 코드 조각을 기반으로 다음 코드 조각이 무엇인지 예측합니다. JVM(Java Virtual Machine)은 매우 스마트합니다. 많은 비용이 투입되고 많은 최적화가 이루어졌기 때문입니다. 이더리움 가상 머신은 2016년 이전에는 아무도 돈을 쓰지 않았고 모두가 어린아이가 한 일이라고 생각했기 때문에 처음부터 이것을 한 적이 없습니다.
둘째, 최적화 프로세스도 매우 복잡합니다.Java 가상 머신은 서로 다른 가상 머신의 결과에서 약간의 차이를 허용할 수 있습니다.이것이 가능합니다. 그러나 블록체인이 아니라 블록체인의 모든 결과는 동일해야 합니다.
오늘날 블록체인 가상 머신에는 실제로 세 가지 장르가 있습니다. 하나는 이더리움에서 바뀌었고 그다음에 EOS는 EOS 이전에 존재했던 JavaScript 가상머신인 WebAssembly에서 바뀌었고 블록체인과 일치하지 않는 것을 제거했습니다. IoT에서 자주 사용됩니다.
보조 제목
일부 체인이 새로운 언어를 발명해야 하는 이유는 무엇입니까?
처음에 말했듯이 일부 프로젝트에서는 종종 새로운 가상 머신 언어와 함께 새로운 가상 머신을 개발할 것입니다. 이것은 무엇을 의미 하는가?
잠시 이혼, 가상 머신, 가상 머신 언어(고급 언어) 및 컴파일러 간의 관계에 대해 이야기하십시오.
간단히 말해서 가상 머신은 가상 머신 언어를 결정하고 컴파일러는 이 언어를 작성하기 위한 도구입니다.
에 관해서는
에 관해서는번역가의 일반적인 역할은 사람이 이해할 수 있는 언어를 컴퓨터가 이해할 수 있는 언어로 번역하는 것과 비슷합니다.
컴퓨터 언어에는 기계어, 어셈블리어, 고급언어의 세 가지가 있습니다("컴퓨터 시스템에 대한 심층적인 이해(3.1)------어셈블리 언어와 기계어"). 첫 번째 것만 컴퓨터에서 직접 인식하고 실행할 수 있습니다.이진 코드사람들이 기억하기 어렵다고 합니다. 따라서 사람들이 기억하고 이해할 수 있도록 일부 지침을 추상화하는 어셈블리 언어가 있습니다.
그러나 이 두 가지 모두 하드웨어/프로세서를 직접 향하고 있으며 둘 다 프로세서 유형에 바인딩됩니다. 고도로 캡슐화된 프로그래밍 언어인 Java, C, C++, C#, Python 등과 같은 고급 언어의 경우에는 그렇지 않으며 배우기 쉽다는 것은 유연성이 떨어진다는 것을 의미합니다. 그것에 의해 작성된 소프트웨어 소스 코드는 컴파일러에 의해 다른 프로세서의 언어로 번역될 수도 있습니다.
"저급 언어"가 더 "고급"일 수 있음을 알 수 있습니다. 왜냐하면 그것은 유연하기 때문입니다(언어가 낮을수록 효과가 더 강력함). 마스터하기가 더 어렵고 이해하는 사람이 적습니다. 그것.
주제로 돌아가서, 새로운 언어를 개발한다는 것은 사실 새로운 가상 머신을 만들어 이더리움 가상 머신이 하지 않는 일을 하는 것입니다.
CyberMiles는 주로 수직 시나리오에 최적화되어 있습니다. CyberMiles 가상 머신(CVM)은 이더리움 가상 머신을 기반으로 수정되었으므로 이더리움 가상 머신 언어 Solidity와 호환되며 이더리움 가상 머신이 지원하지 않는 일부 기능을 지원합니다. 즉, Solidity를 이미 알고 있다면 Solidity로 작성할 수 있지만 CVM의 일부 기능을 사용하려면 Lity로 작성할 수 있으며 CVM은 둘 다 "이해"할 수 있습니다.
Michael :Lity와 CVM, CyberMiles의 가장 중요한 점은 Ethereum이 할 수 없는 일을 할 수 있도록 하는 것입니다. 사실, 우리는 Ethereum 커뮤니티에 있습니다. 우리는 이더리움과 경쟁 관계에 있다고 생각하지 않습니다. 우리는 그들과 다른 철학을 가지고 있습니다. 그들은 다른 목표를 추구하고 있습니다. 그들은 세계 컴퓨터의 목표를 추구하고 있지만 우리는 그렇지 않습니다. 우리는 90%의 일을 할 수 없고 10%의 일을 할 수 있음을 인정하므로 Lity와 CVM은 특정 시나리오에 대해 이더리움의 Turing-complete 시스템을 최적화합니다.
Vitalik은 2015년에 우리의 접근 방식에 대해 알고 있었지만 이더리움을 전자 상거래 또는 크로스 체인에 최적화된 가상 머신으로 만들고 싶지 않았기 때문에 그렇게 하지 않으려고 했으며 일반적인 솔루션을 찾고자 했습니다. 이것은 세계관의 문제입니다. 이더리움이 말하는 것은 세계 컴퓨터입니다. 우리는 세계 컴퓨터가 되고 싶지 않습니다. 우리는 아무도 세계 컴퓨터가 될 수 없다고 생각합니다. 잘 만들어진 블록체인은 수직적입니다.
보조 제목
CyberMiles는 EVM을 기반으로 어떤 최적화를 수행했습니까?
그렇다면 EVM과 비교할 때 CyberMiles의 가상 머신 CVM 최적화는 어디에 있습니까? CyberMiles가 수행한 일부 최적화는 Ethereum의 특성을 이해하는 데 도움이 될 수도 있습니다.
첫째, 동적으로 확장할 수 있습니다.CyberMiles가 개발한 언어는 다양한 비즈니스 시나리오에 최적화되어 성능을 향상시킬 수 있습니다.
CyberMiles 공식 소개에 따르면 "Lity의 유연성은 새로운 언어 OTA 아키텍처에서 나옵니다. 이 버전에서는 LibENI 기능이 하이라이트입니다. 이제 사용자는 CyberMiles 가상 머신의 새로운 OPCODE를 통해 Lity 언어에 더 많은 기능을 추가할 수 있습니다. 이 확장 프로그램은 블록체인 소프트웨어를 중지하거나 업그레이드하지 않고도 슈퍼 노드 합의를 통해 CyberMiles 블록체인에 동적으로 배포할 수 있습니다."
이해하지 못하는 공식 소개에 몇 가지 메모를 추가합니다(자세한 내용은 마지막 참조 문서 참조).
OTA는 가상 머신을 다시 시작하지 않고 시스템 자체의 소프트웨어를 동적으로 업그레이드하는 Over the air입니다. 유사한 기술이 휴대폰의 무선 업그레이드 시스템에도 사용됩니다.
OPCODE는 연산 코드, 연산 코드로 기계어 명령어 집합입니다.간단히 말해서 CPU에 어떤 명령어를 실행해야 하는지 알려주는 데 사용되는 명령어 시퀀스 번호입니다.. CVM은 EVM에 없는 OPCODE를 추가하여 자체 기능을 구현한다.
Michael :작동하는 동안 몇 가지 새로운 기능과 기능을 추가할 수 있다는 것이 매우 중요합니다. 예를 들어, 저는 새로운 암호화 알고리즘을 가지고 있는데 이더리움에서 구현하는 데 매우 매우 비쌉니다. 그래서 C++로 추가할 수 있고 내 컴퓨터가 다운되지 않은 상태에서 무언가를 추가할 수 있습니다.
전자 상거래 퍼블릭 체인으로서 우리가 개발한 가상 머신이나 언어를 확장할 수 있습니다. 다른 사람들은 완전히 사용할 수 있는 테이크아웃 퍼블릭 체인 또는 금융 퍼블릭 체인을 만들고 싶어합니다. 이것이 우리가 오픈 소스 공유를 하는 이유입니다.
둘째, Lity 컴파일러와 CVM에 코드 검사 모드를 설치합니다. 간단히 말해서 CyberMiles 팀은 Ethereum Solidity 스마트 계약으로 인해 알려진 보안 문제를 분류하고 공통 패턴을 추출했습니다. 컴파일러 및 가상 머신 최적화를 통해 Lity는 정수 오버플로 및 토큰이 지원되지 않는 계약 주소로 실수로 전송되는 것과 같은 Solidity의 일반적인 보안 문제를 사전에 예방할 수 있습니다.
Michael :빌드 기능이 있는데 예를 들어 방금 BEC의 보안 취약점에 대해 이야기했지만 safemath를 추가하는 것을 잊었으므로 정수 오버플로 문제가 발생하여 수억 달러가 손실됩니다. BEC 계약은 CyberMiles에서 컴파일하고 가상 머신에서 실행할 수 있습니다. 그러나 가상 머신은 런타임에 정수가 오버플로되는지 여부를 확인하고 오류를 보고하기 때문에 가상 머신에서는 동일한 문제가 발생하지 않습니다. 이것이 EVM의 성숙도를 보여주는 것이라고 생각합니다. 이런게 자바에 등장했는데 자바가 1997년에 시작해서 자바는 체크가 안되고 나중에 추가되더군요.
셋째, 시계 기반 장기 스마트 계약입니다. Lity는 미래에 일어날 일을 실행할 수 있습니다.
Michael :이더리움에는 또 다른 큰 문제가 있습니다. 이더리움 계약은 스스로 시작할 수 없습니다. 계약이 미래에 시작되도록 알람 시계를 디자인할 수는 없습니다. 하지만 송금, 배송 등 전자상거래에서 자주 발생한다. 이더리움에서는 불가능합니다.이더리움에는 이더리움 알람시계라는 특별한 것이 있습니다.이것은 돈을 모으고 특정 시간에 이더리움 계약을 구현할 수 있도록 도와주는 오프라인 조직입니다. 우리는 그것을 가상 머신으로 만들었습니다.
이 일은 작은 일처럼 들립니다. Java의 개발 이력을 보면 이런 일들이 일어났습니다. 여러분의 엔터프라이즈 애플리케이션에서 이 기능이 없으면 할부로 결제할 수 없기 때문입니다.
예를 들어 오늘날 Solidity는 소수점 계산을 수행할 수 없고 정수만 수행합니다.왜? 서로 다른 기계에서 십진 연산 결과가 동일하지 않기 때문에 합의에 도달할 방법이 없습니다. 그런 다음 여기에서 이것을 변경했으며 수학 연산 라이브러리는 대부분입니다. 돈을 다루고 싶다면 여전히 소수점 계산이 필요합니다. 물론 백서에 언급된 규칙 엔진과 같은 다른 기능도 있다고 생각합니다.
보조 제목
이러한 "최적화" 비용은 얼마입니까?
Michael과 대화를 나눈 후 실제로 많은 CVM이 수직 산업에 최적화되어 있으며 Ethereum은 실제로 "할 수 없습니다. 하지 마십시오"라는 사실을 알게 될 것입니다. 일반 컴퓨팅 퍼블릭 체인인 경우 이러한 기능을 실현하기 위해 몇 가지가 희생될 수 있으며 가장 직접적인 것은 거버넌스 메커니즘입니다. CVM이 고성능을 낼 수 있는 이유는 기본 운영체제와 어느 정도 통신이 필요하지만, 이더리움은 특정 시스템을 사용하기 위해 네트워크에 합류하는 노드를 요구하는 것은 불가능하지만 DPOS의 CyberMiles는 사용할 수 있다. 가상 머신 수준, 확장 가능, 또한 DPOS 슈퍼 노드의 만장일치 동의가 필요합니다.
즉, CyberMiles의 언어는 Ethereum이 채택하기를 꺼리는 DPOS 합의 메커니즘의 채택과 분리할 수 없습니다.
가상 머신 성능 최적화 정보
샤오밍:이번에 우리의 몇 가지 기능, LibENI 기능 및 방금 언급한 코드 검사는 언어 자체가 검사 여부를 결정할 수 없기 때문에 주로 가상 머신 자체에 있다고 생각합니다.
Michael :언어에는 언어의 문법과 컴파일러가 포함되며, 확인해야 할 사항은 언어 시스템의 일부인 컴파일러에 배치됩니다. 그러나 LibENI는 언어 도메인에서 구현되어야 합니다.왜냐하면 이더리움 분야에는 추가할 수 있는 기능이 없다는 개념이 있고 백서에 이더리움이 명시되어 있기 때문입니다. 그런 다음 OPSCODE를 추가하고 싶습니다. 이것은 언어 자체의 변경입니다. 자명종 같은 것도 있고, 자명종도 언어의 키워드를 마스터해야 3일, 열흘 안에 실행하겠다고 말할 수 있습니다.
샤오밍:처음에 물었던 질문으로 돌아가서 가상 머신의 수준이 높을수록 손실이 더 크다고 생각합니다.
Michael: 예, 이것이 EVM이 비효율적인 이유 중 하나이며 OS 위에 있습니다. 두 개의 Ethereum 클라이언트가 있습니다. 하나는 Geth이고 다른 하나는 Parity입니다. Ethereum 권한을 실행하려면 Geth를 실행하거나 Parity를 실행하고 대용량 데이터 패키지를 다운로드할 수 있습니다. 새로운 트랜잭션이 들어와서 블록을 생성해야 하는 경우 컴퓨터의 이더리움 가상 머신이 모든 과정을 거쳐야 합니다.다운을 계속하기 전에 다른 네트워크의 항목을 일치시켜야 합니다. 그렇지 않으면 이 네트워크에 있지 않을 것입니다. .
샤오밍:가상 머신이 같은가요?
Michael Yuan 박사: 동일하지만 가상 머신에는 암호화 알고리즘 LibENI가 있습니다. 왜 LibENI라고 하나요? ENI는 이더리움의 로컬 인터페이스를 의미하며, 기본 운영 체제는 우리가 C++ 언어를 사용하는 방식입니다.위의 모든 것은 수학으로 증명할 수 있는 것입니다. 거기에 C++ 포트를 만들었으니 암호화와 복호화를 계산하려면 그 포트를 통과해서 운영체제 수준 이하로 맞추면 된다.물론 성능은 그것보다 훨씬 빠르다.
샤오밍:이와 같이 기본 운영 체제가 다르거나 기본 하드웨어도 다르면 방금 말한 불일치가 발생하지 않습니까?
Michael: 예, 이것은 LibENI의 내부 메커니즘이므로 LibENI가 모듈을 생성할 때 여러 시스템 모듈을 생성해야 합니다. 예를 들어 Ubuntu Linux, Windows 등이 있습니다. 그러나 슈퍼 노드를 제어할 수 있고 특정 수의 슈퍼 노드가 있으므로 슈퍼 노드가 이러한 운영 체제를 사용하도록 요구할 수 있다는 이점이 있습니다.
샤오밍:LibENI를 요약할 수 있습니까?
Michael: 두 부분으로 구성되어 있습니다. 하나는 Lity 레벨로, 가상 기계어로 보이는 것을 정의해야 합니다. 이런 일이 생기면 C++ 수준에서 도입해야 하는데 두 부분이 될 것입니다. 그런 다음 슈퍼 노드가 동의하도록 합니다. 이 과정에서 슈퍼 노드는 자체 운영 체제를 지원하는지 여부를 확인합니다. 그렇지 않으면 수행할 수 없습니다.
샤오밍:그래서 우리는 빠른 것을 가지고 있습니다. LibENI는 결정합니까?
Michael: LibENI가 추가하고 있습니다.쓰기 DApp은 Lity로 작성되고 가상 머신 CVM에서 실행됩니다. 하지만 가상머신을 변경하고 싶다면 LibENI라는 또 다른 것입니다. LibENI는 C++ 언어를 사용하는 Lity의 확장입니다. 이는 가상 머신 자체를 변환하는 것과 같습니다 가상 머신은 C++로 작성되며 이는 C++를 모듈로 캡슐화하여 선반에 올려놓는 것과 같습니다.
샤오밍:이것은 기본 C++ 언어에 대한 인터페이스이므로 왜 모든 항목에서 해당 함수를 호출할 수 없습니까?
Michael: 전체 가상 머신을 이렇게 모듈화하도록 수정한다는 의미입니까? 모든 기능이 기능을 사용할 수 있는 것은 아닙니다. 가상 머신에는 규칙 및 기타 구조가 있습니다. 함수로 문제를 해결할 수 있다면 할 수 있습니다. 기능이란 무엇입니까? 입력 및 출력 항목이 있습니다. 예를 들어 개인키와 텍스트가 나오면 암호화된 텍스트가 나온다.
샤오밍:평범한 사람들이 인지할 수 있는 예를 들 수 있습니까? 함수로는 할 수 없습니다.
Michael: 예를 들어 방금 언급한 규칙은 하나에서 열까지의 주기와 같은 제어와 관련된 것입니다. 방금 언급한 규칙 엔진은 실제로 이 문제가 완료된 후에 이 문제를 수행합니다. 여기에서 할 일은 각각 함수이지만 전체적인 구조는 함수가 아니다.
샤오밍:따라서 함수는 종종 단일 항목입니다.
Michael: 한 가지 중요한 것은 입력과 출력을 제공하는 것입니다.
언어 확장성과 거버넌스 메커니즘 간의 관계
샤오밍:CyberMiles는 전자 상거래 시나리오에 맞게 맞춤화되었다고 강조하지만 확장성이 상대적으로 강하다는 점도 강조합니다.
Michael: 강력한 확장성 때문에 CyberMiles 체인의 사용과 CVM에 추가된 기능은 모두 전자 상거래와 관련이 있습니다. 그러나 LibENI와 CVM을 사용하여 음식 배달, 택시 타기 또는 증권형 토큰 발행에 사용할 수 있는 또 다른 퍼블릭 체인을 만들 수 있습니다. 기술적으로는 이를 제공하며 필요에 따라 CVM을 확장할 수 있습니다.
CyberMiles는 전자 상거래 공개 체인과 생태계를 운영하기를 원하기 때문에 CyberMiles의 범위를 벗어납니다. 그러나 우리가 개발하는 소프트웨어는 이것보다 더 다재다능합니다. 이것이 내가 방금 말한 것입니다. 우리는 모두가 우리의 것을 복사하기를 매우 희망합니다. 언젠가 사람들이 당신의 코드를 복사하지 않으면 모두가 내 코드를 복사할 것입니다. 이것이라고 생각합니다. 우리 성공의 특징입니다.
샤오밍:당신은 우리 언어가 확장성이 높다고 언급했는데 어떤 종류의 언어가 확장성이 높지 않습니까? 또는 언어가 강하고 강하지 않은 것을 정의하는 기준은 무엇입니까?
Michael: EVM과 Solidity는 확장할 수 없습니다. 즉, 변경할 수 없습니다. 변경해야 하는 경우 전체 소프트웨어 시스템을 업데이트해야 합니다. EVM 소프트웨어는 약 1년에 한 번 업데이트됩니다. EVM에서 변경하는 경우 기본적으로 Vitalik을 직접 알아야 하며 모든 핵심 개발을 수행합니다.
우리는 가상 머신을 모두가 변경할 수 있는 것으로 전환했습니다. 예를 들어 Solidity에서 포트를 열었고 C++ 포트에 직접 넣을 수 있도록 할 수 있으므로 이 작업은 C++에서 수행할 수 있지만 이더넷 가상 머신에서는 수행할 방법이 없습니다. 소프트웨어를 업데이트하지 않고 소프트웨어에서 가상머신을 업데이트해야 하기 때문에 PoW에서는 구현할 수 없으며 이는 소프트웨어의 핵심 구성 요소이며 전체 네트워크의 모든 노드의 합의가 필요합니다. 모든 채굴자가 이더리움에서 합의에 도달하도록 요구하는 것은 매우 어렵지만, 우리는 DPoS를 수행하므로 이를 위해 슈퍼 노드 합의를 사용할 수 있습니다.
샤오밍:방금 말씀하신 내용인데 개발자가 제안하고 노드가 수락할 수 있는 기능이 많이 있습니다.
Michael: 패키지 도구를 사용하여 문제를 인식할 수 있는 방법을 제공합니다. 가상 머신에서 처리됩니다. 예를 들어 이전에는 가상 머신에서 RSA 암호화를 수행할 수 있습니다. 이제 DES 암호화를 수행하고 싶습니다. 기능. 패키지로 압축하고 슈퍼 노드가 동의하도록 한 다음 동의한 후 암호화할 수 있습니다. 엔진을 바꾸면서 비행기가 날고 있다.
샤오밍:사실 우리의 확장성은 언어에 의해 결정되는 것이 아니라 거버넌스 메커니즘에 의해 결정되는 것입니까?
Michael: 우리의 언어, 가상 머신 및 거버넌스 메커니즘은 함께 작동하며 분리할 수 없습니다. 우리 언어에 이런 종류의 키워드를 추가할 수 있기 때문에 이 키워드의 기능을 가상 머신에 직접 추가할 수 있는 모듈 방식이 있습니다. 현재 이더리움에서는 지원이 없기 때문에 불가능합니다.
가상 머신에 대한 민첩성 대 보안 논쟁
샤오밍:많은 분들이 가상머신 자체가 잘 설계되지 않아서 정수 오버플로를 포함하여 이더리움 스마트 컨트랙트 자체에 허점이 많다고 비판하시죠?
마이클: 그런 것 같아요. 가상머신이나 언어를 쓰는 사람들은 스마트 컨트랙트를 쓰는 사람들의 문제라고 할 것입니다. 당신의 프로그래머가 너무 가난해서 이런 문제가 있습니다. 모든 사람이 같은 실수를 한다면 이 물건의 디자인이 좋지 않다는 뜻이므로 디자인을 변경할 방법을 찾아야 합니다. 이전에 Java를 사용했을 때도 이런 종류의 문제에 직면했습니다. 이 버그는 프로그래머의 문제로 인해 발생합니까? 그것은 프로그래머의 문제 때문이고, 당신의 언어가 이 문제를 막지 못하기 때문에 나는 항상 이 문제가 있다고 생각했습니다.
이것이 공학적 솔루션과 과학적 솔루션의 차이 또는 학문적 사고와 공학적 사고의 차이입니다.
나는 대학에서 학문적 사고가 우리가 설계하는 것이 튜링 완전하고 수학적으로 증명 가능하다고 말할 것이라고 매우 분명하게 생각했습니다. 예를 들어 정수 오버플로, 왜 버그라고 합니까? 내 언어로 이렇게 쓸 수 있기 때문입니다. 프로그래머는 자신이 하고 싶다는 것을 증명하기 위해 이렇게 썼습니다. 그러나 실생활에서는 99.99% 프로그래머가 하지 않고 잘못 썼다.
우리는 자바가 이전에 했던 것을 했습니다. 즉, 정수가 오버플로되면 계속 실행할 수 없으며 가상 머신에서 오류가 보고됩니다.
샤오밍:이전에 JVM(Java Virtual Machine)이 이를 허용했습니까?
Michael: 모든 가상 머신은 이 논쟁을 거칩니다. 이것은 버그입니까 아니면 기능입니까? 우리는 모든 사람이 이것을 할 수 있도록 허용합니다.
샤오밍:유연함의 "단점". 운영체제 위에 가상머신이 있기 때문에 운영 중에 운영체제가 실제로 가상머신을 가질 수 있다는 뜻인데, 이런 일이 발생했다는 것을 하위 계층에서 알 수 있을까요? 멈출 수 없습니까?
Michael: 기본 가상 머신에 대해 이 작업을 수행하시겠습니까? 가상 머신이 낮을수록 이를 원할 가능성이 높습니다. 당신에게 정수 오버플로로 보이는 것이 아래에 있는 정수 오버플로가 아닐 수도 있습니다. 따라서 아래로 내려갈수록 사람들에게 자유를 주어야 합니다. 따라서 소프트웨어 수준이 낮을수록 프로그래머에 대한 요구 사항은 높아집니다. 예를 들어 기계어로 무언가를 작성하고 싶다면 오류가 발생하기 쉽지만 유연성과 최적화 능력이 뛰어나고 전체 시스템의 모든 리소스를 사용할 수 있습니다. 그러나 Java 계층 또는 EVM 계층에 도달하면 시스템의 많은 것들이 단순히 보이지 않습니다. 메모리가 추상화되기 때문에 메모리가 어디에 있는지조차 알 수 없습니다.
샤오밍:하위 가상 머신은 특정 동작을 허용하지 않지만 상위 가상 머신은 허용한다고 가정하고 다시 작성하면 하위 레벨이 차단합니까?
참조 문서:
저는 Odaily의 편집자 Lu Xiaoming입니다. 실제 블록체인을 탐구하고 있습니다. 속보 및 커뮤니케이션을 위해 WeChat lohiuming을 추가하십시오. 귀하의 이름, 부서, 직위 및 이유를 메모하십시오.
참조 문서:
가상 머신 소개(9) - 가상 머신 요약: 현재 사용 중인 4가지 가상 머신 개념 모델에 대한 간략한 소개
가상 머신 소개 (4) - 가상 머신의 역사: 가상 머신의 주요 역사적 사건 부록
가상 머신의 역사: 간단한 가상 머신 기록
컴퓨터 시스템에 대한 심층적인 이해(3.1)------어셈블리 언어와 기계어