Solidity Compiler และความสัมพันธ์ EVM
เมื่อฉันคอมไพล์โค้ดด้านล่างใน 0.6.6 มันไม่ได้คอมไพล์ (ต้องการสาธารณะ) แต่ใน 0.7.3 มันคอมไพล์
หากฉันทำให้โค้ดด้านล่างสามารถคอมไพล์ได้ (เพิ่มสาธารณะ) ใน 0.6.6 ฉันสามารถปรับใช้บน Rinkeby ได้สำเร็จ หากฉันรวบรวมโค้ดด้านล่างใน 0.7.3 ฉันสามารถปรับใช้กับ Rinkeby ได้สำเร็จ สิ่งนี้จะชี้ให้เห็นว่าไม่มีการเปลี่ยนแปลงใด ๆ กับ Rinkeby EVM มีเพียงวิธีที่คอมไพเลอร์เวอร์ชันบังคับใช้การจัดเรียง Bytecode มีการเปลี่ยนแปลง?
นี่หมายความว่าฉันสามารถใช้มาตรฐานคอมไพเลอร์ 0.6.6 เป็นเวลาอีกหลายปีบนท้องถนนและรหัสของฉันจะไม่พังหรือไม่? การทำซ้ำของคอมไพเลอร์จำนวนมากเป็นประสบการณ์ใหม่สำหรับฉันและฉันพยายามที่จะห่อหัวของฉัน
ขอบคุณ
contract A { constructor () payable {} }
คำตอบ
คุณถูก. มักจะมีการเปลี่ยนแปลงเวอร์ชัน Solidity
การเปลี่ยนแปลงเชิงสังเคราะห์ (ทำให้ภาษาปลอดภัยขึ้น)
การเปลี่ยนแปลง ABI (ดู Ethereum smart contract ABI v2.0
การเปลี่ยนแปลง EVM จะเพิ่มคำสั่งใหม่เช่นคำสั่งสำหรับrevert(string)และcatchจากนั้นสิ่งเหล่านี้จะถูกนำไปใช้ใน Solidity เป็นโครงสร้างภาษา แต่การเปลี่ยนแปลงเหล่านี้หายากกว่า