Sam Blackshear

dblp:86/8008 · DBLP profile ↗
← Back
9ranked-venue papers
6as first author
2since 2021 · last 2024
0000-0002-0024-6655ORCID · corroborated

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 7 · 5 first-authorSecurity and privacy · 2 · 1 first-author · 2 since 2021Theory of computation · 1

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
6 papers
Program analysis · 42% Program verification · 31% Software maintenance and evolution · 9%
Computer architecture, parallel and distributed computing, and storage systems
1 paper
Distributed systems · 88% Storage systems · 12%
Network and information security
2 papers
Blockchain and cryptocurrency security · 88% Systems and software security · 12%

Topics — the 22 heaviest of 23, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Distributed systems
consensus
0.812024
Sui Lutris: A Blockchain Combining Broadcast and Consensus · CCS 2024
Distributed systems
replication
0.812024
Sui Lutris: A Blockchain Combining Broadcast and Consensus · CCS 2024
Program analysis
static analysis
0.732018
RacerD: compositional static race detection · Proc. ACM Program. Lang. 2018
Selective control-flow abstraction via jumping · OOPSLA 2015
Thresher: precise refutations for heap reachability · PLDI 2013
Program verification
deductive verification
0.412020
The Move Prover · CAV (1) 2020
Program verification › deductive verification
intermediate verification language
0.412020
The Move Prover · CAV (1) 2020
Program analysis › static analysis › interprocedural analysis
compositional analysis
0.312018
RacerD: compositional static race detection · Proc. ACM Program. Lang. 2018
Software maintenance and evolution › release engineering
continuous integration
0.312018
RacerD: compositional static race detection · Proc. ACM Program. Lang. 2018
Concurrent programming › concurrency bug detection
data race detection
0.312018
RacerD: compositional static race detection · Proc. ACM Program. Lang. 2018
Program analysis › static analysis
interprocedural analysis
0.312018
RacerD: compositional static race detection · Proc. ACM Program. Lang. 2018
Storage systems
crash recovery
0.212024
Sui Lutris: A Blockchain Combining Broadcast and Consensus · CCS 2024
Distributed systems
fault tolerance
0.212024
Sui Lutris: A Blockchain Combining Broadcast and Consensus · CCS 2024
Programming languages and type systems › control flow
control flow abstraction
0.212015
Selective control-flow abstraction via jumping · OOPSLA 2015
Program verification
static verification
0.212014
Verification modulo versions: towards usable verification · PLDI 2014
Program verification › dynamic verification › runtime verification
assertion checking
0.212013
Almost-correct specifications: a modular semantic framework for assigning confidence to warnings · PLDI 2013
Program analysis › data flow analysis
path-sensitive analysis
0.212013
Thresher: precise refutations for heap reachability · PLDI 2013
Program analysis › static analysis
pointer analysis
0.212013
Thresher: precise refutations for heap reachability · PLDI 2013
Requirements engineering and software design
specification
0.212013
Almost-correct specifications: a modular semantic framework for assigning confidence to warnings · PLDI 2013
Program verification › equivalence checking
regression verification
0.112014
Verification modulo versions: towards usable verification · PLDI 2014
Software maintenance and evolution › software configuration management
version control
0.112014
Verification modulo versions: towards usable verification · PLDI 2014
Systems and software security › memory safety
memory leak detection
0.012013
Thresher: precise refutations for heap reachability · PLDI 2013
Systems and software security
memory safety
0.012013
Thresher: precise refutations for heap reachability · PLDI 2013
Program analysis
false alarm reduction
0.012013
Almost-correct specifications: a modular semantic framework for assigning confidence to warnings · PLDI 2013

Methods — techniques the papers use, named apart from their topics

hybrid architecture · 1.5consensus protocol · 1.5formal specification · 0.4boogie translation · 0.4symbolic execution · 0.3static program analysis · 0.3flow-insensitive points-to analysis · 0.3abstract heap · 0.3product graph analysis · 0.2jumping · 0.2static analysis · 0.2semantic environment condition inference · 0.2
YearPublicationVenuePosition
2024 Sui Lutris: A Blockchain Combining Broadcast and Consensus
abstract
Sui Lutris is the first smart-contract platform to sustainably achieve sub-second finality. It achieves this significant decrease by employing consensusless agreement not only for simple payments but for a large variety of transactions. Unlike prior work, Sui Lutris neither compromises expressiveness nor throughput and can run perpetually without restarts. Sui Lutris achieves this by safely integrating consensuless agreement with a high-throughput consensus protocol that is invoked out of the critical finality path but ensures that when a transaction is at risk of inconsistent concurrent accesses, its settlement is delayed until the total ordering is resolved. Building such a hybrid architecture is especially delicate during reconfiguration events, where the system needs to preserve the safety of the consensusless path without compromising the long-term liveness of potentially misconfigured clients. We thus develop a novel reconfiguration protocol, the first to provably show the safe and efficient reconfiguration of a consensusless blockchain. Sui Lutris is currently running in production and underpins the Sui smart-contract platform. Combined with the use of Objects instead of accounts it enables the safe execution of smart contracts that expose objects as a first-class resource. In our experiments Sui Lutris achieves latency lower than 0.5 seconds for throughput up to 5,000 certificates per second (150k ops/s with transaction blocks), compared to the state-of-the-art real-world consensus latencies of 3 seconds. Furthermore, it gracefully handles validators crash-recovery and does not suffer visible performance degradation during reconfiguration.
Sam Blackshear, Andrey Chursin, George Danezis, Anastasios Kichidis, Eleftherios Kokoris-Kogias, Xun Li 0001, Mark Logan, Ashok Menon, Todd Nowacki, Alberto Sonnino, Brandon Williams, Lu Zhang 0092
CCS1
2023 Robust Safety for Move
abstract
A program that maintains key safety properties even when interacting with arbitrary untrusted code is said to enjoy robust safety. Proving that a program written in a mainstream language is robustly safe is typically challenging because it requires static verification tools that work precisely even in the presence of language features like dynamic dispatch and shared mutability. The emerging Move programming language was designed to support strong encapsulation and static verification in the service of secure smart contract programming. However, the language design has not been analysed using a theoretical framework like robust safety. In this paper, we define robust safety for the Move language and introduce a generic framework for static tools that wish to enforce it. Our framework consists of two abstract components: a program verifier that can prove an invariant holds in a closed-world setting (e.g., the Move Prover [16], [47]), and a novel encapsulator that checks if the verifier's result generalizes to an open-world setting. We formalise an escape analysis as an instantiation of the encapsulator and prove that it attains the required security properties. Finally, we implement our encapsulator as an extension to the Move Prover and use the combination to analyse a large representative benchmark set of real-world Move programs. This toolchain certifies >99% of the Move modules we analyse, validating that automatic enforcement of strong security properties like robust safety is practical for Move. Additionally, our results tell that security-centric language design can be effective in attaining strong security properties such as robust safety.
Marco Patrignani, Sam Blackshear
CSF2
2020 The Move Prover
abstract
The Libra blockchain is designed to store billions of dollars in assets, so the security of code that executes transactions is important. The Libra blockchain has a new language for implementing transactions, called “Move.” This paper describes the Move Prover, an automatic formal verification system for Move. We overview the unique features of the Move language and then describe the architecture of the Prover, including the language for formal specification and the translation to the Boogie intermediate verification language .
Jingyi Emma Zhong, Kevin Cheang, Shaz Qadeer, Wolfgang Grieskamp, Sam Blackshear, Junkil Park, Yoni Zohar, Clark W. Barrett, David L. Dill
CAV (1)5
2018 RacerD: compositional static race detection
abstract
Automatic static detection of data races is one of the most basic problems in reasoning about concurrency. We present RacerD—a static program analysis for detecting data races in Java programs which is fast, can scale to large code, and has proven effective in an industrial software engineering scenario. To our knowledge, RacerD is the first inter-procedural, compositional data race detector which has been shown to have non-trivial precision and impact. Due to its compositionality, it can analyze code changes quickly, and this allows it to perform continuous reasoning about a large, rapidly changing codebase as part of deployment within a continuous integration ecosystem. In contrast to previous static race detectors, its design favors reporting high-confidence bugs over ensuring their absence. RacerD has been in deployment for over a year at Facebook, where it has flagged over 2500 issues that have been fixed by developers before reaching production. It has been important in enabling the development of new code as well as fixing old code: it helped support conversion of part of the main Facebook Android app from a single-threaded to a multi-threaded architecture. In this paper we describe RacerD’s design, implementation, deployment and impact.
Sam Blackshear, Nikos Gorogiannis, Peter W. O'Hearn, Ilya Sergey
Proc. ACM Program. Lang.1
2015 Selective control-flow abstraction via jumping
abstract
We present jumping, a form of selective control-flow abstraction useful for improving the scalability of goal-directed static analyses. Jumping is useful for analyzing programs with complex control-flow such as event-driven systems. In such systems, accounting for orderings between certain events is important for precision, yet analyzing the product graph of all possible event orderings is intractable. Jumping solves this problem by allowing the analysis to selectively abstract away control-flow between events irrelevant to a goal query while preserving information about the ordering of relevant events. We present a framework for designing sound jumping analyses and create an instantiation of the framework for per- forming precise inter-event analysis of Android applications. Our experimental evaluation showed that using jumping to augment a precise goal-directed analysis with inter-event reasoning enabled our analysis to prove 90–97% of dereferences safe across our benchmarks.
Sam Blackshear, Bor-Yuh Evan Chang, Manu Sridharan
OOPSLA1
2014 Verification modulo versions: towards usable verification
abstract
We introduce Verification Modulo Versions (VMV), a new static analysis technique for reducing the number of alarms reported by static verifiers while providing sound semantic guarantees. First, VMV extracts semantic environment conditions from a base program P. Environmental conditions can either be sufficient conditions (implying the safety of P) or necessary conditions (implied by the safety of P). Then, VMV instruments a new version of the program, P', with the inferred conditions. We prove that we can use (i) sufficient conditions to identify abstract regressions of P' w.r.t. P; and (ii) necessary conditions to prove the relative correctness of P' w.r.t. P. We show that the extraction of environmental conditions can be performed at a hierarchy of abstraction levels (history, state, or call conditions) with each subsequent level requiring a less sophisticated matching of the syntactic changes between P' and P. Call conditions are particularly useful because they only require the syntactic matching of entry points and callee names across program versions. We have implemented VMV in a widely used static analysis and verification tool. We report our experience on two large code bases and demonstrate a substantial reduction in alarms while additionally providing relative correctness guarantees.
Francesco Logozzo, Shuvendu K. Lahiri, Manuel Fähndrich, Sam Blackshear
PLDI4
2013 Thresher: precise refutations for heap reachability
abstract
We present a precise, path-sensitive static analysis for reasoning about heap reachability, that is, whether an object can be reached from another variable or object via pointer dereferences. Precise reachability information is useful for a number of clients, including static detection of a class of Android memory leaks. For this client, we found the heap reachability information computed by a state-of-the-art points-to analysis was too imprecise, leading to numerous false-positive leak reports. Our analysis combines a symbolic execution capable of path-sensitivity and strong updates with abstract heap information computed by an initial flow-insensitive points-to analysis. This novel mixed representation allows us to achieve both precision and scalability by leveraging the pre-computed points-to facts to guide execution and prune infeasible paths. We have evaluated our techniques in the Thresher tool, which we used to find several developer-confirmed leaks in Android applications.
Sam Blackshear, Bor-Yuh Evan Chang, Manu Sridharan
PLDI1
2013 Almost-correct specifications: a modular semantic framework for assigning confidence to warnings
abstract
Modular assertion checkers are plagued with false alarms due to the need for precise environment specifications (preconditions and callee postconditions). Even the fully precise checkers report assertion failures under the most demonic environments allowed by unconstrained or partial specifications. The inability to preclude overly adversarial environments makes such checkers less attractive to developers and severely limits the adoption of such tools in the development cycle.
Sam Blackshear, Shuvendu K. Lahiri
PLDI1
2011 The Flow-Insensitive Precision of Andersen's Analysis in Practice
Sam Blackshear, Bor-Yuh Evan Chang, Sriram Sankaranarayanan 0001, Manu Sridharan
SAS1