The Smart Contract Audit Process: A StepbyStep Guide for Developers

Three diverse developers analyze a glowing holographic flowchart of the smart contract audit process guide in a futuristic office

Welcome to Blockchain Trends, your go-to resource for unraveling the complexities and vast potential of blockchain technology. Beyond the hype, lies a revolutionary force reshaping industries. Ready to ensure your decentralized applications are secure and reliable? Dive into our latest article: "The Smart Contract Audit Process: A Step-by-Step Guide for Developers," and discover the critical stages involved in safeguarding your code against vulnerabilities. What hidden risks might be lurking in your smart contracts, and how can a rigorous audit mitigate them? Read on to find out!

Table

Introduction: Securing Your Blockchain Applications with Smart Contract Audits

Why Smart Contract Audits Are Crucial for Blockchain Security

Smart contract audits are indispensable for ensuring the security and reliability of blockchain applications. Unlike traditional software, smart contracts are immutable once deployed on the blockchain. This immutability, a core feature of blockchain technology, becomes a double-edged sword when vulnerabilities are present.

A flaw in a deployed smart contract cannot be easily patched; it can be exploited to drain funds, disrupt operations, or compromise the integrity of the entire decentralized application (dApp). For example, the infamous DAO hack in 2016, which resulted in the theft of approximately $50 million worth of Ether, stemmed from a critical vulnerability in the smart contract code. This single event highlighted the devastating financial consequences and reputational damage that can arise from unaudited and vulnerable smart contracts.

The criticality of smart contract audits extends beyond just financial losses. In sectors like supply chain management, healthcare, or voting systems, where blockchain technology is increasingly adopted, the repercussions of a smart contract vulnerability can be far-reaching. Imagine a supply chain application where a smart contract flaw allows malicious actors to manipulate product origins or ownership, leading to counterfeit goods entering the market.

Or consider a healthcare application where a vulnerability exposes sensitive patient data stored within a blockchain-based system. These scenarios underscore that smart contract audits are not merely a best practice, but a fundamental necessity for building secure and trustworthy blockchain applications across diverse industries.

The Growing Importance of Audits in the DeFi Ecosystem

The Decentralized Finance (DeFi) ecosystem has witnessed explosive growth, with billions of dollars in value locked in smart contracts governing lending platforms, decentralized exchanges, and yield farming protocols. This rapid expansion has unfortunately been accompanied by a surge in exploits targeting DeFi smart contracts.

In 2020 and 2021 alone, DeFi projects suffered numerous high-profile hacks, with losses totaling hundreds of millions of dollars. Instances like the Yearn Finance exploit in early 2021, where approximately $11 million was drained due to a flash loan attack exploiting a smart contract vulnerability, serve as stark reminders of the risks inherent in unaudited DeFi protocols.

This vulnerability landscape has propelled smart contract audits to the forefront of DeFi security practices. Users and investors are increasingly demanding evidence of rigorous security audits before entrusting their assets to DeFi platforms. Projects that prioritize and publicly disclose comprehensive smart contract audit reports gain a significant competitive advantage, fostering trust and attracting greater participation.

Prominent DeFi platforms now routinely undergo multiple audits from reputable firms and often implement bug bounty programs to further enhance their security posture. The DeFi space is maturing, and with this maturation comes a heightened awareness and adoption of robust smart contract audit processes as an essential component of risk management and sustainable growth.

Overview: This Smart Contract Audit Process Guide

This guide provides a comprehensive, step-by-step walkthrough of the smart contract audit process tailored for developers. It is designed to equip developers with the knowledge and understanding necessary to navigate the audit landscape effectively, from initial preparation to post-audit best practices. Whether you are a seasoned blockchain developer or new to the world of smart contracts, this guide will serve as a valuable resource for integrating security audits into your development lifecycle.

By following the structured approach outlined in this smart contract audit process guide, developers can proactively identify and mitigate potential vulnerabilities within their smart contracts. This structured approach encompasses key phases including meticulous preparation, a detailed walkthrough of audit methodologies, understanding audit reports and remediation strategies, and leveraging essential tools and resources. Ultimately, this guide aims to empower developers to build more secure, resilient, and trustworthy blockchain applications, contributing to a safer and more robust decentralized ecosystem.

Step 1: Preparing for Your Smart Contract Audit

Defining Audit Scope and Objectives

Before initiating a smart contract audit, clearly defining the scope and objectives is paramount. This crucial initial step ensures that the audit process is focused, efficient, and aligned with the project's specific security needs. A well-defined scope prevents scope creep, where the audit expands beyond its intended boundaries, potentially leading to unnecessary delays and increased costs. Conversely, a poorly defined scope might miss critical areas, leaving potential vulnerabilities undetected.

Defining the audit scope involves several key considerations. Firstly, identifying critical smart contract functions is essential. This involves pinpointing the functions that handle sensitive operations, such as fund transfers, access control, or core business logic. Secondly, determining the audit's depth and coverage dictates the level of scrutiny applied to the codebase.

A shallow audit might focus only on high-level logic, while a deep audit would involve a line-by-line code review and extensive dynamic testing. Finally, setting clear security goals for the audit provides measurable benchmarks for success. These goals might include achieving a certain vulnerability severity threshold, complying with specific security standards, or ensuring resilience against particular attack vectors. For instance, a project launching a DeFi lending protocol might prioritize auditing functions related to fund management and liquidation mechanisms, aiming to mitigate risks associated with flash loan attacks and reentrancy vulnerabilities.

Assembling the Necessary Documentation

Providing comprehensive and well-organized documentation is crucial for a successful and efficient smart contract audit. Auditors rely heavily on documentation to understand the intended functionality, architecture, and security considerations of the smart contract system. Incomplete or poorly documented code can significantly hinder the audit process, leading to delays, increased costs, and potentially overlooking subtle vulnerabilities due to a lack of context.

The essential documentation includes, first and foremost, providing comprehensive smart contract source code. This should encompass all relevant Solidity or Vyper files, along with any supporting scripts or libraries. Secondly, documenting architectural design and system interactions offers auditors a high-level overview of how the smart contracts interact with each other and with external systems. This documentation should include diagrams, flowcharts, and descriptions of data flow and dependencies.

For example, in a complex DeFi protocol, documenting the interaction between different smart contracts responsible for token management, lending pools, and governance mechanisms is crucial. Lastly, including test cases and expected outcomes provides auditors with concrete examples of how the smart contracts are intended to function under various scenarios. Well-defined test cases, including both positive and negative scenarios, help auditors verify the correctness of the code and identify potential edge cases or vulnerabilities.

Selecting the Right Smart Contract Audit Team

Choosing the right smart contract audit team is a pivotal decision that directly impacts the effectiveness and value of the audit process. The quality of the audit heavily depends on the expertise, experience, and methodology of the auditors. Selecting an unqualified or inexperienced team can lead to a superficial audit that fails to identify critical vulnerabilities, rendering the entire process ineffective.

When evaluating auditor expertise and experience, it's crucial to look for teams with a proven track record in auditing smart contracts, particularly within the specific domain of your project (e.g., DeFi, NFTs, supply chain). Inquire about their experience with similar projects and their understanding of common smart contract vulnerabilities. Checking for relevant certifications and specializations can further validate the auditor's credentials.

While there isn't a universally recognized smart contract auditor certification, some firms may have certifications in information security or specific blockchain technologies, which can be indicative of their expertise. Finally, understanding the auditor's methodology and tools is essential. A reputable audit team should have a well-defined methodology that incorporates both automated and manual analysis techniques.

They should also utilize industry-standard tools for static analysis, dynamic analysis, and formal verification. Requesting a detailed description of their audit process, including the tools they employ and the types of vulnerabilities they typically look for, will help ensure you select a team that aligns with your project's security requirements.

Step 2: The Smart Contract Audit Process: A Detailed Walkthrough

Static Analysis: Identifying Potential Vulnerabilities

Static analysis is a crucial initial phase in the smart contract audit process, focusing on examining the source code without actually executing it. This technique leverages automated tools and manual code inspection to identify potential vulnerabilities, coding errors, and deviations from secure coding best practices. Static analysis acts as a first line of defense, efficiently flagging common and easily detectable flaws early in the audit process.

Using automated tools for code scanning is a cornerstone of static analysis. Tools like Slither, Mythril, and Securify are widely used to automatically scan Solidity code for known vulnerability patterns, such as reentrancy, integer overflows, and timestamp dependence. These tools employ sophisticated algorithms to analyze the code's abstract syntax tree and identify potential security weaknesses. Furthermore, static analysis is effective in detecting common smart contract security flaws that often arise from coding errors or misunderstandings of Solidity's intricacies.

For instance, these tools can identify unchecked external calls, improper access control mechanisms, or vulnerabilities related to gas consumption. Beyond vulnerability detection, static analysis also involves analyzing code structure and design patterns to assess code quality and maintainability. Auditors examine the code's organization, modularity, and adherence to coding conventions to identify potential areas for improvement and ensure the long-term security and robustness of the smart contract.

Manual Code Review: In-Depth Security Assessment

Following static analysis, manual code review provides a crucial layer of in-depth security assessment. While automated tools excel at identifying known vulnerability patterns, they often fall short in detecting complex logic flaws, business logic vulnerabilities, and subtle security weaknesses that require human intuition and understanding of the application's context. Manual code review complements static analysis by providing a nuanced and thorough examination of the smart contract code.

Human review of smart contract logic is at the heart of manual code review. Experienced auditors meticulously examine the code line by line, focusing on the intended functionality, control flow, and potential edge cases. They analyze the code's logic to ensure it aligns with the project's specifications and that there are no unintended behaviors or logical inconsistencies that could be exploited. This in-depth review is particularly effective at identifying complex vulnerabilities missed by automation.

These might include vulnerabilities related to business logic flaws, such as incorrect incentive mechanisms in a DeFi protocol, or vulnerabilities stemming from intricate interactions between multiple smart contracts. Moreover, manual code review plays a vital role in assessing code quality and maintainability. Auditors evaluate the code's readability, clarity, and adherence to coding best practices, providing recommendations for improving code quality and reducing the likelihood of future vulnerabilities arising from poorly structured or difficult-to-understand code.

Dynamic Analysis: Testing Smart Contract Behavior

Dynamic analysis takes a different approach to security assessment by focusing on testing the smart contract's behavior in a simulated or live environment. Unlike static analysis, which examines code without execution, dynamic analysis involves running the smart contract with various inputs and scenarios to observe its runtime behavior and identify potential vulnerabilities that manifest during execution. This phase is crucial for validating the smart contract's functionality and uncovering vulnerabilities that might only be apparent during runtime.

Executing test cases to simulate real-world scenarios is a key aspect of dynamic analysis. Auditors design and execute a comprehensive suite of test cases that mimic various user interactions, attack vectors, and edge cases. These test cases aim to trigger specific functionalities and observe how the smart contract responds under different conditions. Furthermore, dynamic analysis involves monitoring smart contract performance and resource usage.

Auditors analyze gas consumption, execution time, and resource utilization to identify potential performance bottlenecks or vulnerabilities related to denial-of-service attacks. For example, they might test scenarios that attempt to exhaust the contract's gas limits or trigger excessive resource consumption. In addition to performance, dynamic analysis is also crucial for identifying potential gas optimization opportunities. By analyzing gas consumption patterns during testing, auditors can pinpoint areas in the code where gas usage can be reduced, leading to more efficient and cost-effective smart contracts.

Formal Verification: Proving Smart Contract Correctness

Formal verification represents the most rigorous and mathematically grounded approach to smart contract security. This advanced technique utilizes mathematical models and logical reasoning to formally prove the correctness of smart contract code. Formal verification goes beyond simply finding vulnerabilities; it aims to provide mathematical assurance that the smart contract behaves as intended and is free from certain classes of vulnerabilities.

Using mathematical models to verify code logic is the core of formal verification. Auditors create formal specifications that describe the intended behavior of the smart contract in mathematical terms. These specifications are then used to rigorously verify that the code implementation conforms to the intended behavior using automated theorem provers and model checkers.

Formal verification is particularly valuable for ensuring smart contract functionality meets specifications. It can mathematically prove that the contract always behaves according to its design, even under complex or unexpected conditions. This level of assurance is especially critical for high-value smart contracts where correctness is paramount.

Moreover, formal verification plays a crucial role in validating contract integrity and security properties. It can be used to prove properties such as access control enforcement, data integrity, and resistance to specific attack vectors, providing a high degree of confidence in the smart contract's security and reliability. Tools like Certora Prover are specifically designed for formal verification of smart contracts.

Step 3: Understanding the Audit Report and Remediation

A sleek digital workspace showing a large monitor with a smart contract audit report, illustrating the smart contract audit process guide

Interpreting the Smart Contract Audit Findings

Receiving the smart contract audit report is a critical juncture in the smart contract audit process. The report typically details the vulnerabilities identified, their severity levels, and recommendations for remediation. Understanding how to interpret these findings is essential for effectively addressing the identified security issues and ensuring the overall security of the smart contract.

A key aspect of interpretation is understanding vulnerability severity levels (Critical, High, Medium, Low). Audit reports commonly categorize vulnerabilities based on their potential impact and likelihood of exploitation. Critical vulnerabilities represent the most severe risks, potentially leading to significant financial losses or complete system compromise.

High-severity vulnerabilities pose a substantial risk, while medium and low-severity vulnerabilities represent less immediate threats but should still be addressed. Furthermore, analyzing the impact of identified issues is crucial for prioritizing remediation efforts. The report should describe the potential consequences of each vulnerability, including the type of attack it enables, the assets at risk, and the potential financial or reputational damage.

Finally, reviewing recommendations for remediation is the actionable part of the report. Auditors typically provide specific recommendations on how to fix each identified vulnerability, including code modifications, architectural changes, or security best practices to implement. These recommendations serve as a roadmap for developers to effectively address the security issues.

Implementing Remediation Strategies

Once the audit report is understood, the next crucial step is implementing remediation strategies. This phase involves systematically addressing the identified vulnerabilities by modifying the smart contract code and system architecture based on the auditor's recommendations. Effective remediation is paramount to realizing the benefits of the audit process and securing the smart contract against potential exploits.

Prioritizing vulnerability fixes based on severity is a critical aspect of remediation. Critical and high-severity vulnerabilities should be addressed immediately due to their potential for significant impact. Medium and low-severity vulnerabilities can be addressed in a subsequent phase, but should not be ignored. After prioritization, the next step involves modifying smart contract code to address security flaws.

This often requires rewriting vulnerable code sections, implementing proper input validation, strengthening access control mechanisms, or adopting secure coding patterns. Following code modifications, rigorous testing remediation efforts to ensure effectiveness is essential. Developers should re-run test cases, perform additional dynamic analysis, and ideally involve the audit team in a re-audit or verification process to confirm that the implemented fixes effectively address the vulnerabilities and do not introduce new issues.

Post-Audit Best Practices: Maintaining Smart Contract Security

The completion of a smart contract audit and remediation is not the end of the security journey, but rather a significant milestone in an ongoing process. Maintaining smart contract security requires continuous vigilance and proactive measures to address emerging threats and ensure the long-term resilience of the system. Adopting post-audit best practices is crucial for sustaining a robust security posture.

Continuous monitoring for emerging vulnerabilities is essential in the rapidly evolving blockchain landscape. New attack vectors and vulnerabilities are constantly being discovered, and developers must stay informed and proactively monitor their smart contracts for potential threats. Utilizing vulnerability scanning tools and subscribing to security advisories can help in this continuous monitoring effort.

Furthermore, regular code reviews and security audits should be incorporated into the development lifecycle. Even after the initial audit, periodic security reviews, especially after significant code changes or updates, are crucial for identifying and mitigating newly introduced vulnerabilities. Ideally, consider scheduling regular audits, perhaps annually or semi-annually, depending on the project's risk profile and development activity.

Finally, staying updated on the latest security threats and mitigation techniques is paramount. The blockchain security landscape is dynamic, and developers must continuously learn and adapt to new threats and best practices. Following security blogs, participating in security communities, and attending security conferences are valuable ways to stay informed and enhance their security knowledge.

Step 4: Tools and Resources for Smart Contract Audits

Essential Smart Contract Audit Tools

The smart contract audit process benefits significantly from the use of specialized tools designed to automate and enhance various aspects of security analysis. These tools range from static analyzers that automatically scan code for vulnerabilities to dynamic analysis platforms that enable runtime testing and formal verification tools that provide mathematical proofs of correctness. Leveraging these tools can significantly improve the efficiency, depth, and accuracy of smart contract audits.

Slither: Static Analysis and Vulnerability Detection is a widely used static analysis framework for Solidity. Slither excels at identifying a wide range of common smart contract vulnerabilities, including reentrancy, timestamp dependence, and gas-related issues. It provides detailed reports highlighting potential vulnerabilities and their locations in the code, aiding auditors in their analysis and remediation efforts.

MythX: Dynamic Analysis and Fuzzing offers a cloud-based dynamic analysis platform for Ethereum smart contracts. MythX performs symbolic execution and fuzzing techniques to automatically explore different execution paths and identify vulnerabilities that manifest during runtime. It is particularly effective at detecting vulnerabilities related to business logic flaws and unexpected interactions.

Certora Prover: Formal Verification and Mathematical Modeling is a powerful tool for formal verification of smart contracts. Certora Prover uses mathematical models and automated theorem proving to formally verify that smart contracts meet their specifications and are free from certain classes of vulnerabilities. It provides the highest level of assurance regarding code correctness and security.

Open-Source Resources for Smart Contract Security

Beyond commercial tools, a wealth of open-source resources and community-driven initiatives are available to support smart contract audit process and enhance blockchain security knowledge. These resources offer valuable guidance, best practices, vulnerability databases, and checklists, empowering developers to build more secure and resilient decentralized applications.

Consensys Smart Contract Best Practices: Security Best Practices Guides provides a comprehensive collection of security best practices for Solidity smart contract development. This resource covers a wide range of topics, from secure coding patterns to common vulnerability mitigation techniques, serving as an invaluable guide for developers aiming to write secure smart contracts. SWC Registry: Vulnerability Databases and Exploit Examples (Smart Contract Weakness Classification and Test Cases) is a community-driven initiative that catalogs known smart contract vulnerabilities with detailed descriptions, exploit examples, and mitigation strategies.

The SWC Registry serves as a valuable resource for understanding common vulnerability patterns and learning how to prevent them. OWASP Smart Contract Security Checklist: Security Audit Checklists and Templates offers a structured checklist and templates for conducting smart contract security audits.

This resource provides a systematic approach to auditing, ensuring that all critical security aspects are considered and thoroughly evaluated. The OWASP checklist is a valuable tool for both auditors and developers seeking to perform self-audits or prepare for professional audits.

Conclusion: Building Secure and Reliable Blockchain Applications

The Ongoing Importance of Smart Contract Audits

As the blockchain ecosystem continues to expand and mature, the ongoing importance of smart contract audits cannot be overstated. The increasing complexity of decentralized applications, coupled with the growing value locked in smart contracts, necessitates a persistent focus on security.

Smart contract audits are not a one-time fix, but rather an essential and recurring component of a robust security strategy for any blockchain project. The dynamic nature of the threat landscape and the continuous evolution of blockchain technology demand a proactive and vigilant approach to security, with audits playing a central role in identifying and mitigating risks throughout the smart contract lifecycle.

The lessons learned from past exploits and vulnerabilities underscore the critical need for comprehensive and rigorous audits. The financial and reputational consequences of unaudited smart contracts can be devastating, particularly in high-stakes environments like DeFi. As blockchain adoption expands into new sectors and industries, the demand for secure and reliable applications will only intensify, further amplifying the importance of smart contract audits as a cornerstone of trust and confidence in decentralized systems.

The Future of Blockchain Security and Decentralized Systems

The future of blockchain security and decentralized systems hinges on continuous innovation and collaboration within the security community. Advancements in formal verification techniques, AI-powered security tools, and proactive vulnerability disclosure programs will play a crucial role in shaping a more secure and resilient blockchain ecosystem. The development of more user-friendly and accessible audit tools will empower developers to integrate security earlier in the development lifecycle, fostering a "security-by-design" approach.

Furthermore, the growing recognition of the importance of smart contract audits is driving the emergence of industry standards and best practices. Standardized audit methodologies, reporting formats, and certification programs are likely to emerge, providing greater clarity and consistency in the audit landscape.

Collaboration between audit firms, blockchain projects, and the broader security community will be essential for sharing knowledge, developing effective mitigation strategies, and collectively raising the security bar for decentralized systems. Ultimately, a proactive and collaborative approach to blockchain security, with smart contract audits at its core, will pave the way for a future where decentralized applications are not only innovative and efficient but also secure and trustworthy.

Further Resources for Smart Contract Developers

For smart contract developers seeking to deepen their knowledge of security and enhance their auditing capabilities, a wealth of further resources is available. Online courses and educational platforms, such as those offered by Consensys Academy and Trail of Bits, provide in-depth training on smart contract security best practices and audit techniques.

Participating in capture-the-flag (CTF) competitions focused on smart contract security offers hands-on experience in identifying and exploiting vulnerabilities in a simulated environment. Engaging with the blockchain security community through online forums, conferences, and meetups provides opportunities to learn from experts, share knowledge, and stay abreast of the latest security trends.

Continuously exploring and leveraging these resources will empower smart contract developers to build more secure and robust decentralized applications, contributing to the overall health and growth of the blockchain ecosystem. By prioritizing security and actively engaging with the security community, developers can play a vital role in shaping a future where blockchain technology realizes its full transformative potential while maintaining the highest standards of security and reliability.

Frequently Asked Questions

What is the primary goal of a smart contract audit?

The primary goal is to identify vulnerabilities and security flaws in smart contracts before deployment, ensuring the code functions as intended and is resistant to attacks, safeguarding user funds and data.

Why is a smart contract audit process necessary, even for experienced developers?

Even experienced developers can miss subtle bugs. Audits provide a fresh perspective and utilize specialized tools to uncover vulnerabilities, mitigating risks associated with malicious exploitation and unintended consequences.

What are some key steps involved in a typical smart contract audit process?

A typical audit involves code review, static analysis, dynamic analysis, and formal verification. These steps help to identify vulnerabilities such as reentrancy attacks and integer overflows.

How do I choose a reputable auditor for my smart contract?

Look for auditors with a proven track record, relevant experience, and a transparent audit methodology. Check for industry certifications and client testimonials to assess their credibility.

What happens after the smart contract audit is complete?

The auditor provides a detailed report outlining found vulnerabilities and recommended fixes. Developers then address the issues, and the auditor may perform a re-audit to verify the corrections.

Final Reflection: Securing the Future of Decentralization

The journey through the smart contract audit process, as outlined in this guide, highlights a critical truth: security is not an afterthought, but a foundational pillar of the decentralized future. In a landscape where trust is often replaced by code, ensuring the integrity and reliability of smart contracts is paramount. The steps detailed here are not merely technical procedures; they are the building blocks of a more secure and trustworthy blockchain ecosystem.

The impact of secure smart contracts extends far beyond individual projects. It shapes the very perception and adoption of decentralized technologies. A single vulnerability exploited can erode confidence and hinder progress. My own belief is that fostering a culture of rigorous auditing and continuous improvement is essential for realizing the full potential of blockchain. The best way to predict the future is to create it. - Peter Drucker. This quote resonates deeply, reminding us that the future of decentralized technology depends on our proactive efforts to secure it.

Now, as you embark on your own smart contract development journey, remember that the audit process is not just a checklist, but a commitment to excellence. Embrace the principles outlined in this guide, continuously refine your skills, and contribute to a safer, more reliable, and ultimately, more transformative decentralized world. Your dedication to secure coding practices will not only protect your projects but will also help pave the way for a future where blockchain technology can truly flourish.

Unlock Unbreakable Code: Secure Your Smart Contracts Now!

Thank you for exploring the smart contract audit process and enhancing your development skills. You've gained valuable insights into creating more secure and dependable decentralized applications. Now, it's time to apply that knowledge!

Are you ready to make your code more robust?

  • Prioritize your next smart contract for a thorough security audit without delay. Proactive reviews can prevent costly vulnerabilities.
  • Utilize the recommended auditing tools and frameworks to perform initial self-assessments and identify potential issues early.
  • Share this guide with fellow developers to build a community committed to secure and reliable blockchain innovation.

What specific change will you implement in your next smart contract project based on what you've learned? Share your plans in the comments!



Olivia Hastings

Olivia Hastings is a leading cybersecurity analyst specializing in the unique security challenges within blockchain ecosystems. Her expertise is centered on identifying and mitigating vulnerabilities in smart contracts and assessing the inherent risks associated with decentralized platforms, particularly in the rapidly evolving DeFi sector. Olivia conducts in-depth smart contract audits, develops security protocols, and provides critical insights into emerging cybersecurity threats in blockchain. She is known for her meticulous approach to security analysis and her proactive stance on promoting robust security practices within the blockchain community.

Leave a Reply

Your email address will not be published. Required fields are marked *

Go up